Transformers documentation
Byte Latent Transformer(BLT)
이 모델은 2024-12-13에 HF papers에 게시되었으며, 2025-09-19에 Hugging Face Transformers에 기여되었습니다.
Byte Latent Transformer(BLT)
개요
BLT 모델은 Artidoro Pagnoni, Ram Pasunuru, Pedro Rodriguez, John Nguyen, Benjamin Muller, Margaret Li1, Chunting Zhou, Lili Yu, Jason Weston, Luke Zettlemoyer, Gargi Ghosh, Mike Lewis, Ari Holtzman†, Srinivasan Iyer가 Byte Latent Transformer: Patches Scale Better Than Tokens에서 제안했습니다. BLT는 엔트로피 기반의 동적 패칭을 통해 토큰화 수준의 성능을 달성하는 바이트 수준의 LLM입니다.
해당 논문의 초록은 다음과 같습니다:
Byte Latent Transformer(BLT)를 소개합니다. BLT는 새로운 바이트 수준 LLM 아키텍처로, 대규모 환경에서 토크나이제이션 기반 LLM의 성능을 처음으로 동등하게 달성하는 동시에 추론 효율성과 견고성을 크게 향상시킵니다. BLT는 바이트를 동적 크기의 패치로 인코딩하며, 이 패치가 계산의 기본 단위로 사용됩니다. 패치는 다음 바이트의 엔트로피를 기준으로 분할되며, 데이터 복잡성이 증가하는 부분에 더 많은 계산 자원과 모델 용량을 할당합니다. 8B 파라미터와 4T 학습 바이트까지의 바이트 수준 모델에 대한 최초의 flop 제어 스케일링 연구를 제시합니다. 우리의 결과는 고정된 어휘 없이 원시 바이트로 학습된 모델의 스케일링이 가능함을 보여줍니다. 데이터가 예측 가능한 경우 긴 패치를 동적으로 선택함으로써 학습 및 추론 효율성이 모두 향상되며, 추론 및 롱 테일 일반화 측면에서도 질적 개선이 확인되었습니다. 전체적으로, 고정된 추론 비용에서 BLT는 패치와 모델 크기를 동시에 확장함으로써 토크나이제이션 기반 모델보다 훨씬 더 나은 스케일링을 보여줍니다.
사용 팁
이중 모델 아키텍처: BLT는 두 개의 독립적으로 학습된 모델로 구성됩니다:
- Patcher (Entropy Model): 패치 경계를 결정하고 입력을 세그먼트로 나누기 위해 바이트 수준의 엔트로피를 예측하는 더 작은 transformer 모델입니다.
- 주요 Transformer 모델: 패치를 Local Encoder, Global Transformer, Local Decoder를 통해 처리하는 기본 모델입니다.
동적 패칭: 모델은 엔트로피 기반 동적 패칭을 사용하며, 다음과 같습니다:
- 고엔트로피 영역(복잡한 데이터)에는 더 짧은 패치를 적용하여 더 많은 계산적 주의를 기울입니다
- 엔트로피가 낮은 영역(예측 가능한 데이터)은 효율성을 위해 더 긴 패치를 사용합니다
- 이를 통해 모델은 가장 필요한 곳에 컴퓨트 리소스를 할당할 수 있습니다
Local Encoder: 패치 임베딩에 대한 크로스 어텐션을 사용하여 바이트 시퀀스를 처리합니다
Global Transformer: 패치 간 전체 attention을 사용하여 패치 수준 표현을 처리
Local Decoder: 원래 바이트 시퀀스에 대한 cross-attention을 통해 출력을 생성합니다
Byte-Level Tokenizer: 학습된 어휘를 사용하는 기존 토크나이저와 달리, BLT의 토크나이저는 텍스트를 UTF-8 바이트로 변환한 뒤 각 바이트를 토큰 ID에 매핑합니다. 따라서 어휘가 필요 없습니다.
모델은 다음을 통해 로드할 수 있습니다:
<hfoption id="AutoModel">from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("itazap/blt-1b-hf")
model = AutoModelForCausalLM.from_pretrained(
"itazap/blt-1b-hf",
device_map="auto",
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
prompt = "my name is"
generated_ids = model.generate(
**inputs, max_new_tokens=NUM_TOKENS_TO_GENERATE, do_sample=False, use_cache=False
)
print(tokenizer.decode(generated_ids[0]))이 모델은 itazap님이 기여하였습니다. 원본 코드는 여기에서 찾을 수 있습니다.
BltConfig
class transformers.BltConfig
< 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 = Nonevocab_size: int = 260max_position_embeddings: int = 4096patch_in_forward: bool | None = Truepatch_size: int | None = 4patching_mode: str | None = 'entropy'patching_threshold: float | None = 1.335442066192627patching_batch_size: int | None = 1max_patch_length: int | None = Nonelocal_attention_window_len: int | None = 512cross_attn_k: int | None = 2encoder_hash_byte_group_size: list[int] | None = Noneencoder_hash_byte_group_vocab: int | None = 500002encoder_hash_byte_group_nb_functions: int | None = 1patcher_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneencoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonedecoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneglobal_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonetie_word_embeddings: bool = Falseuse_cache: bool = Truepad_token_id: int | None = Nonebos_token_id: int | None = Noneeos_token_id: int | list[int] | None = Noneinitializer_range: float = 0.02rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None )
매개변수
- vocab_size (
int, 선택 사항, 기본값260) — 모델의 어휘 크기입니다.input_ids로 표현할 수 있는 서로 다른 토큰의 수를 정의합니다. - max_position_embeddings (
int, 선택 사항, 기본값4096) — 이 모델이 사용될 수 있는 최대 시퀀스 길이입니다. - patch_in_forward (
bool, 선택 사항, 기본값True) — forward pass 동안 patching을 수행할지 여부입니다. - patch_size (
int, 선택 사항, 기본값 4) — 패칭 메커니즘에 사용되는 패치의 크기입니다. - patching_mode (
str, 선택 사항, 기본값"entropy") — 패칭에 사용되는 모드입니다. 엔트로피 기반 패칭 등이 있습니다. - patching_threshold (
float, 선택 사항, 기본값 1.34) — 패치를 적용할 시점을 결정하는 임계값. - patching_batch_size (
int, 선택 사항, 기본값 1) — 패칭 과정에서 사용되는 배치 크기입니다. - max_patch_length (
int, 선택 사항) — 생성할 수 있는 패치의 최대 길이입니다. - local_attention_window_len (
int, 선택 사항, 기본값 512) — 로컬 인코더와 로컬 디코더가 사용하는 로컬 어텐션 윈도우의 크기로, 공개된 체크포인트의local_attention_window_len값과 일치합니다. 대신 전체 인과적 컨텍스트에 대해 어텐션을 수행하려면None으로 설정하세요. - cross_attn_k (
int, 선택 사항, 기본값 2) — 모델에서 사용되는 cross-attention 헤드 수입니다. - encoder_hash_byte_group_size (
list, 선택 사항) — 인코더 해시 함수에 사용되는 바이트 그룹 크기의 목록입니다. - encoder_hash_byte_group_vocab (
int, 선택 사항, 기본값 500002) — 인코더 해시 바이트 그룹의 어휘 크기입니다. - encoder_hash_byte_group_nb_functions (
int, 선택 사항, 기본값 1) — 인코더 바이트 그룹핑에 사용되는 해시 함수의 수입니다. - patcher_config (
BltPatcherConfig, 선택 사항) — 모델의 patcher 구성 요소에 대한 설정입니다. - encoder_config (
Union[dict, ~configuration_utils.PreTrainedConfig], 선택) — 인코더 백본의 config 객체 또는 사전입니다. - decoder_config (
Union[dict, ~configuration_utils.PreTrainedConfig], 선택) — decoder backbone의 config 객체 또는 사전입니다. - global_config (
BltGlobalTransformerConfig, 선택 사항) — 모델의 전역 transformer 구성 요소에 대한 설정입니다. - tie_word_embeddings (
bool, 선택, 기본값False) — 모델의tied_weights_keys매핑에 따라 가중치 임베딩을 묶을지 여부. - use_cache (
bool, 선택 사항, 기본값True) — 모델이 마지막 key/values attention을 반환할지 여부입니다(모든 모델에서 사용되지 않음).config.is_decoder=True인 경우 또는 모델이 decoder-only 생성 모델인 경우에만 관련이 있습니다. - pad_token_id (
int, 선택 사항) — 어휘에서 패딩에 사용되는 토큰 ID입니다. - bos_token_id (
int, 선택 사항) — 어휘에서 스트림 시작에 사용되는 토큰 ID입니다. - eos_token_id (
Union[int, list[int]], 선택) — 어휘에서 스트림 종료에 사용되는 토큰 ID입니다. - initializer_range (
float, 선택 사항, 기본값0.02) — 모든 가중치 행렬을 초기화하는 truncated_normal_initializer의 표준 편차입니다. - rope_parameters (
Union[~modeling_rope_utils.RopeParameters, dict], 선택) — RoPE 임베딩의 구성 매개변수를 포함하는 사전입니다. 사전에는rope_theta값이 포함되어야 하며, 더 긴max_position_embeddings로 RoPE를 사용하려는 경우 스케일링에 사용되는 매개변수를 선택적으로 포함할 수 있습니다.
이것은 BltModel의 구성을 저장하기 위한 구성 클래스입니다. 지정된 인자에 따라 Blt 모델을 인스턴스화하여 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 구성을 인스턴스화하면 itazap/blt-1b-hf와 유사한 구성이 생성됩니다.
Configuration 객체는 PreTrainedConfig를 상속하며 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 PreTrainedConfig의 문서를 참고하세요.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonepatch_lengths: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> )
BltForCausalLM
클래스 transformers.BltForCausalLM
< source >( config: BltConfig )
매개변수
- config (BltConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
언어 모델링 헤드가 위에 있는 Blt Text Model.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonecross_attention_states: typing.Optional[torch.LongTensor] = Nonecross_attention_mask: typing.Optional[torch.LongTensor] = Nonefull_text_row_masked_out_mask: tuple[torch.Tensor, torch.Tensor] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → CausalLMOutputWithPast or tuple(torch.Tensor)
매개변수
- input_ids (
torch.LongTensor형상이(batch_size, sequence_length), 선택 사항) — 어휘(input vocabulary)에서 입력 시퀀스 토큰의 인덱스입니다. 기본적으로 패딩은 무시됩니다.AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
- attention_mask (
torch.Tensor형상이(batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요?[0, 1]:- 마스크되지 않은 토큰에 대해 1
- 마스크된 토큰에 대해 0
- position_ids (
torch.LongTensor의 shape(batch_size, sequence_length), , 선택 사항) — 위치 임베딩에서 각 입력 시퀀스 토큰의 위치 인덱스. 범위[0, config.n_positions - 1]. - cross_attention_states (
torch.Tensor, 선택 사항) — 비전 모델의 출력으로, cross-attention에 사용됩니다. 이 텐서는 언어 모델이 attend할 처리된 이미지 특징을 포함합니다. - cross_attention_mask (
torch.Tensor형상이(batch_size, seq_length, max_num_images, max_num_tiles), 선택 사항) — 텍스트 토큰과 이미지 타일 간의 상호작용을 제어하는 Cross-attention mask입니다. 이 4D 텐서는 각 텍스트 토큰이 어떤 이미지 타일에 attend해야 하는지를 정의합니다.각 텍스트 토큰(시퀀스 길이: seq_length)에 대해:
- 1은 해당 토큰이 해당 이미지 타일에 주의를 기울여야 함을 나타냅니다
- 0은 해당 이미지 타일에 주의를 기울이지 않아야 함을 나타냅니다
- full_text_row_masked_out_mask (
tuple[torch.Tensor, torch.Tensor], 선택 사항) — 크로스 어텐션 메커니즘에서 행을 마스킹하는 두 개의 텐서를 포함하는 튜플입니다:- 첫 번째 텐서는
(batch_size, 1, seq_length, 1)형태를 가지며 0 또는 1의 값을 포함합니다. 값이 0인 경우, 해당 텍스트 토큰의 cross-attention 행렬에서 전체 행이 마스킹되어야 함을 의미합니다(모든 이미지 토큰 무시). - 두 번째 텐서는 동일한 형태를 가지며, cross-attention 레이어의 forward pass 동안 마스킹을 적용하는 데 내부적으로 사용됩니다. 이 마스크는 cross_attention_mask에서 파생되며, 텍스트 토큰이 어떤 이미지 토큰에도 attend하지 않아야 하는 경우를 처리하는 데 사용됩니다.
- 첫 번째 텐서는
- past_key_values (
~cache_utils.Cache, 선택 사항) — 순차적 디코딩을 가속화할 수 있는 사전 계산된 hidden-states(self-attention 블록과 cross-attention 블록의 key 및 value). 일반적으로 이는past_key_values디코딩의 이전 단계에서 모델이 반환한use_cache=True또는config.use_cache=True.입력으로 Cache 인스턴스만 허용되며, kv cache 가이드를 참고하세요.
past_key_values가 전달되지 않으면 기본적으로 DynamicCache가 초기화됩니다.모델은 입력으로 제공된 것과 동일한 캐시 형식을 출력합니다.
past_key_values를 사용하는 경우, 이 모델에 과거 키 값 상태가 제공되지 않은input_ids만 입력해야 하며, 이때의 shape은(batch_size, unprocessed_length)입니다. shape이(batch_size, sequence_length)인 전체input_ids를 입력하지 않습니다. - inputs_embeds (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택) —input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다input_ids인덱스를 관련 벡터로 변환하는 방식에 대해 더 세밀한 제어가 필요한 경우에 유용합니다. - labels (
torch.LongTensor, shape(batch_size, sequence_length), 선택 사항) — 마스크 언어 모델링 손실을 계산하는 데 사용되는 라벨입니다. 인덱스는[0, ..., config.vocab_size]범위 내의 값이거나 -100이어야 합니다(input_idsdocstring 참조). 인덱스가-100으로 설정된 토큰은 무시(마스크)되며, 손실은[0, ..., config.vocab_size]범위의 라벨을 가진 토큰에 대해서만 계산됩니다. - use_cache (
bool, 선택 사항) —True로 설정하면past_key_values키 값 상태가 반환되며, 디코딩 속도를 높이는 데 사용할 수 있습니다(past_key_values참조). - logits_to_keep (
Union[int, torch.Tensor], 선택 사항, 기본값0) —int인 경우, 마지막logits_to_keep토큰에 대한 logits를 계산합니다.0인 경우, 모든input_ids에 대한 logits를 계산합니다(특수한 경우). 생성에는 마지막 토큰의 logits만 필요하며, 해당 토큰에 대해서만 계산하면 메모리를 절약할 수 있습니다. 이는 긴 시퀀스나 큰 어휘 크기의 경우 상당한 이점을 제공합니다.torch.Tensor인 경우, 시퀀스 길이 차원에서 유지할 인덱스에 해당하는 1차원 텐서여야 합니다. 이는 패킹된 텐서 형식(배치와 시퀀스 길이를 단일 차원으로 사용하는 경우)을 사용할 때 유용합니다.
반환값
CausalLMOutputWithPast 또는 tuple(torch.Tensor)
torch.Tensor의 튜플 또는 CausalLMOutputWithPast(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(BltConfig)과 입력에 따라 다양한 요소를 포함합니다.
BltForCausalLM의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
loss (
torch.Tensor, shape(1,), 선택 사항,labels이 제공될 때 반환됨) — 언어 모델링 손실(다음 토큰 예측용).logits (
torch.Tensor, shape(batch_size, sequence_length, config.vocab_size)) — 언어 모델링 헤드에서 생성된 예측 점수(SoftMax 적용 전 각 어휘 토큰에 대한 점수).past_key_values (
Cache, 선택 사항,use_cache=True가 전달되었거나config.use_cache=True인 경우 반환됨) — Cache 인스턴스입니다. 자세한 내용은 kv cache 가이드를 참고하세요.순차적 디코딩을 가속화하는 데 사용할 수 있는 사전 계산된 hidden-states(셀프 어텐션 블록의 key와 value)를 포함합니다(입력
past_key_values참조).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와 선택적 초기 임베딩 출력을 포함합니다.
attentions (
tuple(torch.Tensor), 선택 사항,output_attentions=True가 전달되었거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.
예:
>>> from transformers import AutoTokenizer, BltForCausalLM
>>> model = BltForCausalLM.from_pretrained("itazap/blt-1b-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("itazap/blt-1b-hf")
>>> prompt = "If I had to write a haiku, it would be:"
>>> inputs = tokenizer(prompt, return_tensors="pt")
>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=40, do_sample=True, temperature=0.6)
>>> result = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
>>> print(result)
If I had to write a haiku, it would be: "Snowflakes gently fall" - simple, yet peaceful.
I love the idea of snowflakes gently falling, each one