Transformers documentation
Mamba 2
이 모델은 2024-05-31에 HF papers에 게시되었으며, 2024-08-06에 Hugging Face Transformers에 기여되었습니다.
Mamba 2
Mamba 2는 구조화 상태 공간 모델(SSM)과 어텐션 변형을 연결하는 상태 공간 이중성(SSD) 프레임워크를 기반으로 합니다. Mamba보다 2~8배 더 빠른 효율적인 SSD 알고리즘을 사용하며, 텐서 병렬 처리와 그룹화 값 어텐션(GVA) 헤드 구조를 가능하도록 아키텍처를 수정했습니다.
모든 Mamba 2 원본 체크포인트는 State Space Models 조직에서 찾을 수 있지만, 아래 예시는 원본 체크포인트에 대한 Hugging Face 구현이 아직 지원되지 않기 때문에 mistralai/Mamba-Codestral-7B-v0.1를 사용합니다.
Mamba 2 기반의 다른 아키텍처로는 Bamba, FalconH1, Zamba2가 있습니다.
이 모델은 ArthurZ가 기여했습니다. Mamba를 다양한 언어 작업에 적용하는 방법에 대한 추가 예제는 오른쪽 사이드바의 Mamba 모델 항목을 클릭하여 확인하세요.
아래 예제는 Pipeline, AutoModel, 그리고 명령줄을 사용하여 텍스트를 생성하는 방법을 보여줍니다.
from transformers import pipeline
pipeline = pipeline(
task="text-generation",
model="mistralai/Mamba-Codestral-7B-v0.1",
device=0
)
pipeline("Plants create energy through a process known as")from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1")
model = AutoModelForCausalLM.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1", device_map="auto")
input_ids = tokenizer("Plants create energy through a process known as", return_tensors="pt").to(model.device)
output = model.generate(**input_ids)
print(tokenizer.decode(output[0], skip_special_tokens=True))Quantization은 가중치를 더 낮은 정밀도로 표현하여 대규모 모델의 메모리 부담을 줄입니다. 사용 가능한 다른 양자화 백엔드에 대해서는 Quantization 개요를 참조하세요.
아래 예제는 torchao를 사용하여 가중치만 4비트 정수로 양자화합니다.
from transformers import AutoModelForCausalLM, AutoTokenizer, TorchAoConfig
quantization_config = TorchAoConfig("int4_weight_only", group_size=128)
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1")
model = AutoModelForCausalLM.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1", quantization_config=quantization_config, device_map="auto")
input_ids = tokenizer("Plants create energy through a process known as", return_tensors="pt").to(model.device)
output = model.generate(**input_ids)
print(tokenizer.decode(output[0], skip_special_tokens=True))The input is a single word "Notes". 참고
Codestral Mamba는
groups=8을 가지며, 이는 attention 기반 모델의 kv head 수와 유사합니다.Codestral Mamba에는
torch_forward또는cuda_kernels_forward라는 두 가지 다른 forward pass가 있으며, 그 결과는 약간 다를 것으로 예상됩니다.이 모델에는 위치 임베딩이 없지만,
attention_mask가 존재하며 배치 생성 시 두 곳에서 hidden states를 마스킹하는 특정 로직이 있습니다(자세한 내용은 이 댓글을 참조하세요). 이 부분과 재구현된 Mamba 2 커널의 추가로 인해 배치 생성과 캐시된 생성 사이에 약간의 불일치가 발생합니다.SSM 알고리즘은 텐서 수축에 크게 의존하며, 이는 matmul과 동등한 연산이지만 연산 순서가 약간 다릅니다. 이로 인해 낮은 정밀도에서 차이가 더 커집니다.
Padding은 왼쪽 padding으로만 테스트됩니다. 오른쪽 padding은 pad 위치로 캐시를 업데이트하여 신뢰할 수 없는 결과를 반환합니다. 배치 생성 시
tokenizer.padding_side="left"를 설정하세요. Padding side를 참조하세요.아래 예제는 PEFT를 사용하여 Mamba 2를 파인튜닝하는 방법을 보여줍니다.
from datasets import load_dataset
from peft import LoraConfig
from trl import SFTConfig, SFTTrainer
model_id = "mistralai/Mamba-Codestral-7B-v0.1"
dataset = load_dataset("Abirate/english_quotes", split="train")
training_args = SFTConfig(dataset_text_field="quote", gradient_checkpointing=True, per_device_train_batch_size=4)
lora_config = LoraConfig(target_modules=["x_proj", "embeddings", "in_proj", "out_proj"])
trainer = SFTTrainer(
model=model_id,
args=training_args,
train_dataset=dataset,
peft_config=lora_config,
)
trainer.train()Mamba2Config
클래스 transformers.Mamba2Config
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonenum_heads: int = 128head_dim: int = 64vocab_size: int = 32768hidden_size: int = 4096state_size: int = 128num_hidden_layers: int = 64layer_norm_epsilon: float = 1e-05pad_token_id: int | None = 1bos_token_id: int | None = 0eos_token_id: int | list[int] | None = 2expand: int = 2conv_kernel: int = 4n_groups: int = 8use_bias: bool = Falseuse_conv_bias: bool = Truehidden_act: str = 'silu'initializer_range: float = 0.1residual_in_fp32: bool = Truetime_step_rank: str | int = 'auto'time_step_min: float = 0.001time_step_max: float = 0.1time_step_floor: float = 0.0001time_step_limit: list[float] | tuple[float, ...] = (0.0, inf)rescale_prenorm_residual: bool = Falseuse_cache: bool = Truechunk_size: int = 256tie_word_embeddings: bool = False )
매개변수
- num_heads (
int, 선택 사항, 기본값128) — Transformer decoder의 각 attention layer에 사용되는 attention head의 수입니다. - head_dim (
int, 선택 사항, 기본값64) — Attention head의 차원입니다. None인 경우 hidden_size // num_attention_heads 값이 기본값으로 사용됩니다. - vocab_size (
int, 선택 사항, 기본값32768) — 모델의 어휘 크기입니다.input_ids로 표현할 수 있는 서로 다른 토큰의 수를 정의합니다. - hidden_size (
int, 선택 사항, 기본값4096) — 숨겨진 표현의 차원입니다. - state_size (
int, 선택 사항, 기본값128) — Mamba 레이어에서 SSM 상태(잠재 상태 차원)의 크기입니다. - num_hidden_layers (
int, 선택 사항, 기본값64) — Transformer decoder의 숨겨진 레이어 수. - layer_norm_epsilon (
float, 선택 사항, 기본값 1e-05) — 레이어 정규화 레이어에서 사용할 epsilon 값입니다. - pad_token_id (
int, 선택 사항, 기본값1) — 어휘에서 패딩에 사용되는 토큰 ID입니다. - bos_token_id (
int, 선택 사항, 기본값0) — 어휘에서 스트림 시작에 사용되는 토큰 id입니다. - eos_token_id (
Union[int, list[int]], 선택 사항, 기본값2) — 어휘에서 스트림 종료에 사용되는 토큰 ID입니다. - expand (
int, 선택 사항, 기본값 2) — 중간 크기를 결정하는 데 사용되는 확장 계수입니다. - conv_kernel (
int, 선택 사항, 기본값4) — 합성곱 커널의 크기입니다. - n_groups (
int, 선택 사항, 기본값 8) — mamba 2의 진화 행렬에 사용할 그룹 수입니다. - use_bias (
bool, 선택 사항, 기본값False) — mixer 블록의 ["in_proj", "out_proj"]에서 bias를 사용할지 여부 - use_conv_bias (
bool, 선택 사항, 기본값True) — mixer 블록의 convolution layer에 bias를 사용할지 여부. - hidden_act (
str, 선택 사항, 기본값silu) — 디코더의 비선형 활성화 함수(함수 또는 문자열)입니다. 예를 들어,"gelu","relu","silu"등이 있습니다. - initializer_range (
float, 선택 사항, 기본값0.1) — 모든 가중치 행렬을 초기화하는 truncated_normal_initializer의 표준 편차입니다. - residual_in_fp32 (
bool, 선택 사항, 기본값True) — residuals를float32로 사용할지 여부입니다.False로 설정하면 residuals는 모델의 나머지 부분과 동일한dtype을 유지합니다. - time_step_rank (
Union[str, int], 선택 사항, 기본값auto) — Delta(시간 단계) 투영의 랭크입니다."auto"를 지정하면 자동으로 설정됩니다. - time_step_min (
float, 선택 사항, 기본값0.001) —dt_proj.bias의 하한으로 사용되는 최소time_step입니다. - time_step_max (
float, 선택 사항, 기본값0.1) —dt_proj.bias의 상한을 설정하는 데 사용되는 최대time_step입니다. - time_step_floor (
float, 선택 사항, 기본값0.0001) — softplus 활성화 이후의 이산 시간 단계 델타에 허용되는 최소 값입니다. - time_step_limit (
Union[list[float], tuple[float, ...]], 선택 사항, 기본값(0.0, inf)) — 클램핑에 사용되는 시간 단계 값의 허용 범위입니다. - rescale_prenorm_residual (
bool, 선택 사항, 기본값False) — 초기화 시out_proj가중치를 다시 스케일링할지 여부입니다. - use_cache (
bool, 선택 사항, 기본값True) — 모델이 마지막 key/values attention을 반환할지 여부입니다(모든 모델에서 사용되지 않음).config.is_decoder=True인 경우 또는 모델이 decoder-only 생성 모델인 경우에만 관련이 있습니다. - chunk_size (
int, 선택 사항, 기본값 256) — 시퀀스를 구성할 청크의 크기입니다. - tie_word_embeddings (
bool, 선택, 기본값False) — 모델의tied_weights_keys매핑에 따라 가중치 임베딩을 묶을지 여부.
이것은 Mamba2Model의 구성을 저장하기 위한 구성 클래스입니다. 지정된 인자에 따라 Mamba2 모델을 인스턴스화하여 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 구성을 인스턴스화하면 state-spaces/mamba2-2.8b와 유사한 구성이 생성됩니다.
Configuration 객체는 PreTrainedConfig를 상속하며 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 PreTrainedConfig의 문서를 참고하세요.
예:
>>> from transformers import Mamba2Config, Mamba2Model
>>> # Initializing a Mamba2 configuration
>>> configuration = Mamba2Config()
>>> # Initializing a model (with random weights) from the configuration
>>> model = Mamba2Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configMamba2Model
class transformers.Mamba2Model
< source >( config: Mamba2Config )
매개변수
- config (Mamba2Config) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
특정 헤드가 위에 없는 맨 Mamba2 모델로, 원시 hidden-states를 출력합니다.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.LongTensor] = Nonecache_params: transformers.cache_utils.Cache | None = Noneuse_cache: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = Noneattention_mask: typing.Optional[torch.Tensor] = None**kwargs ) → Mamba2Output or tuple(torch.Tensor)
매개변수
- input_ids (
torch.LongTensor형상이(batch_size, sequence_length), 선택 사항) — 어휘(input vocabulary)에서 입력 시퀀스 토큰의 인덱스입니다. 기본적으로 패딩은 무시됩니다.AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
- inputs_embeds (
torch.LongTensor, shape(batch_size, sequence_length, hidden_size), 선택) —input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다input_ids인덱스를 관련 벡터로 변환하는 방식을 더 세밀하게 제어하려는 경우에 유용합니다. - cache_params (
Cache, 선택 사항) — 이 인자가 전달되면, 모델은 모든 블록에서 이전 상태를 사용합니다(이는 모델이state_input_ids + input_ids를 컨텍스트로 추가한 것처럼input_ids에 대한 출력을 제공합니다). - use_cache (
bool, 선택 사항) —True로 설정하면cache_params가 반환되며, 이를 사용하여 다음 logits를 빠르게 생성할 수 있습니다. - output_hidden_states (
bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중hidden_states항목을 참고하세요. - return_dict (
bool, 선택) — 일반 튜플 대신 ModelOutput를 반환할지 여부. - attention_mask (
torch.Tensor형상이(batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요?[0, 1]:- 마스크되지 않은 토큰에 대해 1
- 마스크된 토큰에 대해 0
반환값
Mamba2Output 또는 tuple(torch.Tensor)
Mamba2Output 또는 torch.Tensor의 튜플(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(Mamba2Config)과 입력에 따라 다양한 요소를 포함합니다.
Mamba2Model의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
last_hidden_state (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 마지막 레이어 출력에서 생성된 hidden-state 시퀀스입니다.cache_params (
~cache_utils.Cache, 선택) — 마지막 시간 단계에서의 모델 상태입니다. 이전input_ids를 다시 제공하지 않고, 다음input_ids와 함께 forward 메서드에서 사용할 수 있습니다.selective scan 이후의 State space model 상태 행렬과 Convolutional states를 모두 포함합니다
hidden_states (
tuple[torch.Tensor], 선택 사항,output_hidden_states=True가 전달되거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩 출력 1개 + 각 레이어의 출력 1개)로, 모양은(batch_size, sequence_length, hidden_size)입니다.각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.
Mamba2LMHeadModel
클래스 transformers.Mamba2ForCausalLM
< source >( config: Mamba2Config )
매개변수
- config (Mamba2Config) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
입력 임베딩과 가중치가 연결되지 않은 선형 레이어로 구성된 언어 모델링 헤드가 위에 있는 MAMBA2 모델 transformer입니다.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonecache_params: transformers.cache_utils.Cache | None = Nonelabels: typing.Optional[torch.LongTensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = Noneuse_cache: bool | None = Noneattention_mask: typing.Optional[torch.Tensor] = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs ) → Mamba2CausalLMOutput or tuple(torch.Tensor)
매개변수
- input_ids (
torch.LongTensor형상이(batch_size, sequence_length), 선택 사항) — 어휘(input vocabulary)에서 입력 시퀀스 토큰의 인덱스입니다. 기본적으로 패딩은 무시됩니다.AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
- inputs_embeds (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택) —input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다input_ids인덱스를 관련 벡터로 변환하는 방식에 대해 더 세밀한 제어가 필요한 경우에 유용합니다. - cache_params (
Cache, 선택 사항) — 이 인자가 전달되면, 모델은 모든 블록에서 이전 상태를 사용합니다(이는 모델이state_input_ids + input_ids를 컨텍스트로 추가한 것처럼input_ids에 대한 출력을 제공합니다). - labels (
torch.LongTensor, shape(batch_size, sequence_length), 선택 사항) — 언어 모델링을 위한 라벨입니다. 모델 내부에서 라벨이 시프트(shift)됩니다. 즉,labels = input_ids를 설정할 수 있습니다. 인덱스는[-100, 0, ..., config.vocab_size]범위에서 선택됩니다.-100으로 설정된 모든 라벨은 무시(마스크)되며, 손실은[0, ..., config.vocab_size]범위의 라벨에 대해서만 계산됩니다. - output_hidden_states (
bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중hidden_states항목을 참고하세요. - return_dict (
bool, 선택) — 일반 튜플 대신 ModelOutput를 반환할지 여부. - use_cache (
bool, 선택 사항) —True로 설정하면cache_params가 반환되며, 이를 사용하여 다음 logits를 빠르게 생성할 수 있습니다. - attention_mask (
torch.Tensor형상이(batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요?[0, 1]:- 마스크되지 않은 토큰에 대해 1
- 마스크된 토큰에 대해 0
- logits_to_keep (
Union[int, torch.Tensor], 선택 사항, 기본값0) —int인 경우, 마지막logits_to_keep토큰에 대한 logits를 계산합니다.0인 경우, 모든input_ids에 대한 logits를 계산합니다(특수한 경우). 생성에는 마지막 토큰의 logits만 필요하며, 해당 토큰에 대해서만 계산하면 메모리를 절약할 수 있습니다. 이는 긴 시퀀스나 큰 어휘 크기의 경우 상당한 이점을 제공합니다.torch.Tensor인 경우, 시퀀스 길이 차원에서 유지할 인덱스에 해당하는 1차원 텐서여야 합니다. 이는 패킹된 텐서 형식(배치와 시퀀스 길이를 단일 차원으로 사용하는 경우)을 사용할 때 유용합니다.
반환값
Mamba2CausalLMOutput 또는 tuple(torch.Tensor)
Mamba2CausalLMOutput 또는 torch.Tensor의 튜플(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(Mamba2Config)과 입력에 따라 다양한 요소를 포함합니다.
Mamba2ForCausalLM의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
loss (
torch.Tensor, shape(1,), 선택 사항,labels이 제공될 때 반환됨) — 언어 모델링 손실(다음 토큰 예측용).logits (
torch.Tensor, shape(batch_size, sequence_length, config.vocab_size)) — 언어 모델링 헤드에서 생성된 예측 점수(SoftMax 적용 전 각 어휘 토큰에 대한 점수).cache_params (
~cache_utils.Cache, 선택) — 마지막 시간 단계에서의 모델 상태입니다. 이전input_ids를 다시 제공하지 않고, 다음input_ids와 함께 forward 메서드에서 사용할 수 있습니다.selective scan 이후의 State space model 상태 행렬과 Convolutional states를 모두 포함합니다
hidden_states (
tuple[torch.Tensor], 선택 사항,output_hidden_states=True가 전달되거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩 출력 1개 + 각 레이어의 출력 1개)로, 모양은(batch_size, sequence_length, hidden_size)입니다.각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.