Transformers documentation

Byte Latent Transformer (BLT)

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

このモデルは2024年12月13日にHF papersで公開され、2025年9月19日にHugging Face Transformersに貢献されました。

FlashAttention SDPA

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です。

論文の抄録は以下の通りです。

バイトレベルのLLMアーキテクチャであるByte Latent Transformer (BLT) を紹介します。BLT は、推論効率と堅牢性を大幅に向上させながら、大規模なトークナイゼーションベースのLLMと同等の性能を初めて達成しました。BLT はバイトを動的なサイズのパッチにエンコードし、これらを計算の主要な単位として利用します。パッチは次バイトのエントロピーに基づいて分割され、データ複雑度が高い部分にはより多くの計算リソースとモデル容量が割り当てられます。本研究では、8Bパラメータおよび4Tの学習バイトまでのバイトレベルモデルにおける、初のFLOPs制御スケーリング研究を提示します。結果は、固定語彙なしで生バイトを学習したモデルのスケーリングが実現可能であることを示しています。データが予測可能な場合に長いパッチを動的に選択することで、学習と推論の両方の効率が向上し、推論能力やロングテール汎化においても定性的な改善が見られました。全体として、推論コストを固定した場合、BLT はパッチサイズとモデルサイズを同時に拡大することで、トークナイゼーションベースのモデルよりもはるかに優れたスケーリング特性を示します。

使用のコツ

  • デュアルモデルアーキテクチャ: BLTは、2つの独立して学習されたモデルで構成されています:

    • Patcher (エントロピーモデル): バイトレベルのエントロピーを予測してパッチの境界を決定し、入力をセグメント化する、より小型の Transformer モデルです。
    • Main Transformer Model: パッチを Local Encoder、Global Transformer、Local Decoder を通じて処理する主要なモデル。
  • 動的パッチング: モデルはエントロピーベースの動的パッチングを使用します。

    • 高エントロピー領域(複雑なデータ)には、より短いパッチが割り当てられ、より多くの計算リソースが注がれます
    • 低エントロピー領域(予測可能なデータ)には、効率化のために長いパッチが割り当てられます
    • これにより、モデルは最も必要とされる箇所に計算リソースを割り当てることができます。
  • ローカルエンコーダー: クロスアテンションを用いて、バイトシーケンスをパッチ埋め込みに対して処理します

  • Global Transformer: パッチレベルの表現を、パッチ全体にわたる完全なアテンションで処理します

  • ローカルデコーダー: 元のバイト列へのクロスアテンションを用いて出力を生成します

  • 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]))
</hfoption>

このモデルはitazapによって提供されました。 元のコードはこちらで確認できます。

BltConfig

クラス transformers.BltConfig

< >

( 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 = Nonecross_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) — フォワードパス中にパッチを適用するかどうかを指定します。
  • patch_size (int、任意、デフォルトは 4) — パッチング機構で使用するパッチのサイズ。
  • patching_mode (str、任意、デフォルトは "entropy") — パッチングに使用するモード。エントロピーベースのパッチングなどが該当します。
  • patching_threshold (float、任意、デフォルト値は 1.34)— パッチを適用するタイミングを判定するために使用される閾値。
  • patching_batch_size (int, 任意、デフォルトは 1) — パッチング処理で使用するバッチサイズ。
  • max_patch_length (int, 任意) — 生成可能なパッチの最大長。
  • cross_attn_k (int、任意、デフォルトは 2)— モデルで使用されるクロスアテンションヘッドの数。
  • encoder_hash_byte_group_size (list、任意) — エンコーダーのハッシュ関数で使用するバイトグループサイズのリストです。
  • encoder_hash_byte_group_vocab (int、任意、デフォルト値は 500002)— エンコーダーのハッシュバイトグループの語彙サイズです。
  • encoder_hash_byte_group_nb_functions (int、optional、デフォルト値は 1) — エンコーダーのバイトグループ化で使用されるハッシュ関数の数です。
  • patcher_config (BltPatcherConfig、任意) — モデルのpatcherコンポーネントの設定です。
  • encoder_config (Union[dict, ~configuration_utils.PreTrainedConfig]、任意) — エンコーダーのバックボーンの設定オブジェクトまたは辞書です。
  • decoder_config (Union[dict, ~configuration_utils.PreTrainedConfig]、任意) — デコーダーのバックボーンの設定オブジェクトまたは辞書です。
  • global_config (BltGlobalTransformerConfig、任意) — モデルのグローバルトランスフォーマーコンポーネントの設定です。
  • tie_word_embeddings (bool、任意、デフォルトは False) — モデルの tied_weights_keys マッピングに従って重み埋め込みを共有するかどうかを指定します。
  • use_cache (bool、任意、デフォルトは True) — モデルが最後のキー/バリューの注意を返すかどうか(すべてのモデルで利用されるわけではありません)。config.is_decoder=True の場合、またはモデルがデコーダー専用の生成モデルである場合にのみ関連します。
  • 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 と同様の設定が得られます。

設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。

例:

>>> from transformers import BltModel, BltConfig

>>> # Initializing a Blt configuration
>>> configuration = BltConfig()

>>> # Initializing a model from the configuration
>>> model = BltModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

class transformers.BltModel

< >

( config: BltConfig )

forward

< >

( 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.FloatTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> )

BltForCausalLM

クラス transformers.BltForCausalLM

< >

( config: BltConfig )

パラメータ

  • config (BltConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。

言語モデリングヘッドを上部に備えたBlt Text Model。

このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。

forward

< >

( 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.FloatTensor] = 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.FloatTensor)

パラメータ

  • input_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。

    インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。

    入力IDとは何ですか?

  • attention_mask (torch.Tensor の形状 (batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。 [0, 1]:
    • マスクされていないトークンに対して1
    • マスクされたトークンに対しては 0 です。

    アテンションマスクとは?

  • position_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、任意) — 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックス。範囲 [0, config.n_positions - 1].

    ポジションIDとは?

  • cross_attention_states (torch.FloatTensor, 任意) — ビジョンモデルの出力で、クロスアテンションに使用されます。このテンソルには、言語モデルがアテンションを向ける処理済みの画像特徴が含まれています。
  • cross_attention_mask (torch.Tensor の形状 (batch_size, seq_length, max_num_images, max_num_tiles), 、任意) — テキストトークンと画像タイル間の相互作用を制御するためのクロスアテンションマスク。 この4次元テンソルは、各テキストトークンがどの画像タイルにアテンションを向けるべきかを定義します。

    各テキストトークン(seq_lengthごと)について:

    • 1 は、対応する画像タイルに アテンションを行う トークンを示します
    • 0 は、対応する画像タイルに注意を払わないことを示します
  • full_text_row_masked_out_mask (tuple[torch.Tensor, torch.Tensor], 省略可能) — クロスアテンション機構内の行をマスクする2つのテンソルを含むタプルです:
    • 最初のテンソルの形状は(batch_size, 1, seq_length, 1)であり、値は0または1です。 値が0である場合、対応するテキストトークンのクロスアテンション行列の行全体がマスクされることを示します(すべての画像トークンを無視します)。
    • 2番目のテンソルは同じ形状を持ち、クロスアテンション層のフォワードパス中にマスキングを適用するために内部で使用されます。 このマスクは cross_attention_mask から導出され、テキストトークンがどの画像トークンにもアテンションすべきでないケースを処理するために使用されます。
  • past_key_values (~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返した past_key_values であり、 use_cache=True または config.use_cache=True.

    入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。 past_key_values が渡されない場合、デフォルトで DynamicCache が初期化されます。

    モデルは、入力として与えられたのと同じキャッシュ形式を出力します。

    past_key_values を使用する場合、すべての input_ids(形状 (batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理の input_ids(形状 (batch_size, unprocessed_length))のみを入力することになります。

  • inputs_embeds (torch.FloatTensor、形状 (batch_size, sequence_length, hidden_size)、任意) — input_ids を渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_ids のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。
  • labels (torch.LongTensor、shape (batch_size, sequence_length)、任意) — マスク言語モデリング損失を計算するためのラベルです。インデックスは [0, ..., config.vocab_size] の範囲内であるか、-100 である必要があります(input_ids の docstring を参照)。インデックスが -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.FloatTensor)

torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または CausalLMOutputWithPast。設定(BltConfig)や入力に応じて、さまざまな要素で構成されます。

BltForCausalLM の forward メソッドは、__call__ という特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなくModuleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。

  • loss (torch.FloatTensor、shape (1,)、optional、labels が指定された場合に返されます) — 言語モデリングの損失(次のトークン予測用)。

  • logits (torch.FloatTensor、shape (batch_size, sequence_length, config.vocab_size)) — 言語モデリングヘッドの予測スコア(SoftMax 適用前の各語彙トークンのスコア)。

  • past_key_values (Cache、任意、use_cache=True が渡された場合または config.use_cache=True の場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。

    逐次デコーディングを高速化するために使用できる(past_key_values 入力参照)、事前計算済みの隠れ状態(自己注意ブロックのキーとバリュー)が含まれます。

  • hidden_states (tuple(torch.FloatTensor)、optional、output_hidden_states=True が渡された場合または config.output_hidden_states=True の場合に返されます)— torch.FloatTensor のタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は (batch_size, sequence_length, hidden_size) です。

    各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。

  • attentions (tuple(torch.FloatTensor)、optional、output_attentions=True が渡された場合または config.output_attentions=True の場合に返されます)— torch.FloatTensor のタプル(各レイヤーごとに1つ)、形状は (batch_size, num_heads, sequence_length, sequence_length)。

    アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。

例:

>>> 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
Update on GitHub