Transformers documentation

カスタムレイヤーとユーティリティ

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

カスタムレイヤーとユーティリティ

このページでは、ライブラリで使用されるすべてのカスタムレイヤー、およびモデリングのために提供されるユーティリティ関数とクラスをリストしています。

これらの多くは、ライブラリ内のモデルのコードを研究する場合にのみ有用です。

WeightRenaming

class transformers.GroupWeightRename

< >

( source_patterns: list[str]target_patterns: list[str] )

WeightRenaming の変換ペアのリストを適用し、最初の(「ガード」)ソースパターンによって遅延評価で有効化します。2つのリネームが中間名を共有する場合(例: norm0→norm1 と norm1→norm2)に使用してください。これにより、変換済みのチェックポイント(norm1 と norm2 はあるが norm0 はない)を読み込む際に、リネームが誤って再適用されるのを防げます。

NOTE: source_patterns は、変換済みのチェックポイントに存在しないものが先頭に来るように並べ替えてください。state dict はソートされたキー順に反復されるため、ガードパターンは依存するパターンよりも辞書順で小さい必要があります。そうしないと、依存するパターンは最初のパスでスキップされ、再試行されなくなります。

WeightConverter

class transformers.WeightConverter

< >

( source_patterns: str | list[str]target_patterns: str | list[str]operations: list[ConversionOps]force_cpu: bool = False )

変換操作

class transformers.ConversionOps

< >

( )

重み変換操作のベースクラス。

class transformers.Chunk

< >

( dim: int = 0num_shards_attribute: str | None = None )

テンソルをdimに沿って等しいサイズのチャンクに分割します。また、num_shards_attributeは、何個のテンソルに分割するかを読み取るための設定フィールドです。任意の数のテンソルを連結する場合に便利です。

class transformers.Concatenate

< >

( dim: int = 0num_shards_attribute: str | None = None )

dim 方向にテンソルを連結します。また、任意の数のテンソルを連結する場合、num_shards_attribute は、逆の Ops を使用してテンソルを再構築する際に、何個のテンソルを再構築すべきかを把握するために読み取る設定フィールドです。

class transformers.MergeModulelist

< >

( dim: int = 0 )

最初の次元に沿って、テンソルのリストを単一のテンソルにマージします。 EPまたはTPでは、何をしているのかを明確に把握しておく必要があるため、これを明示的に定義しています。

class transformers.SplitModulelist

< >

( dim: int = 0 )

各グループの明示的な分割サイズを使用してMergeModulelistの逆操作を行います。

class transformers.PermuteForRope

< >

( subconfig_key: str | None = Nonepermute_layer_names: list[str] | None = Noneinverse: bool = False )

複素数 RoPE 重みを分割された sin/cos 形式に変換するために必要な置換を適用します。

class transformers.VisionFuseAndPermuteForRope

< >

( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = True )

融合された QKV に対して、複素数 RoPE 重みを分割された sin/cos 形式に変換するために必要な置換を適用します。 PermuteForRope() + Concatenate() を呼び出すのと同じですが、チャンク化されたテンソルの一部に対してのみ Permute を呼び出すことができます。

注: この変換は、マルチモーダルモデルのビジョンバックボーンにのみ適用されます。これはconfig.vision_configを確認するためです。

class transformers.VisionUnfuseAndPermuteForRope

< >

( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = False )

融合された QKV に対して、複素数 RoPE 重みを分割された sin/cos 形式に変換するために必要な置換を適用します。 Chunk() + PermuteForRope() を呼び出すのと同じですが、チャンク化されたテンソルの一部に対してのみ Permute を呼び出すことができます。

注: この変換は、マルチモーダルモデルのビジョンバックボーンにのみ適用されます。これはconfig.vision_configを確認するためです。

レイヤー

class transformers.GradientCheckpointingLayer

< >

( *args**kwargs )

勾配チェックポイントを備えたレイヤーの基底クラス。

このクラスは、レイヤーに対して勾配チェックポイント機能を提供します。デフォルトでは、勾配チェックポイントは無効になっています(gradient_checkpointing = False)。model.set_gradient_checkpointing() が呼び出されると、gradient_checkpointing = True に設定し、_gradient_checkpointing_func にチェックポイント関数を割り当てることで、勾配チェックポイントが有効になります。

重要:

use_reentrant=True を使用して勾配チェックポイントを実行する場合、勾配を必要とする入力(例: 隠れ状態)は、勾配を正しく伝播させるために、キーワード引数ではなく位置引数(*args)として渡す必要があります。

例:

>>> # Correct - hidden_states passed as positional arg
>>> out = self.layer(hidden_states, attention_mask=attention_mask)

>>> # Incorrect - hidden_states passed as keyword arg
>>> out = self.layer(hidden_states=hidden_states, attention_mask=attention_mask)

アテンション関数

クラス transformers.AttentionInterface

< >

( )

許可されたアテンション関数を管理する辞書のようなオブジェクトです。register()を呼び出すことで、新しいアテンション関数を簡単に追加できます。モデルが既存のアテンション関数、例えばsdpaをローカルで上書きする必要がある場合は、modeling_<model>.py内でこのクラスの新しいインスタンスを宣言し、そのインスタンス上で宣言する必要があります。

register

< >

( key: strvalue: Callable )

アテンションマスク関数

class transformers.AttentionMaskInterface

< >

( )

register

< >

( key: strvalue: Callable )

Rotary Position Embedding 関数

transformers.dynamic_rope_update

< >

( rope_forward )

パラメータ

  • rope_forward (Callable) — RoPE 実装のフォワードパスです。

モデルが動的RoPE(つまり、forward pass中に周波数を再計算する可能性のあるRoPE実装)を使用している場合、forward pass内でRoPEパラメータを更新するためのデコレーター関数です。

Pytorchのカスタムモジュール

class transformers.Conv1D

< >

( nfnx )

パラメータ

  • nf (int) — 出力特徴量の数。
  • nx (int) — 入力特徴の数を指定します。

OpenAI GPT(およびGPT-2でも使用)において、Radford らによって定義された1次元畳み込み層。

基本的には線形層と同様に動作しますが、重みが転置されています。

PyTorch ヘルパー関数

transformers.apply_chunking_to_forward

< >

( forward_fn: Callable[..., torch.Tensor]chunk_size: intchunk_dim: int*input_tensors ) → torch.Tensor

パラメータ

  • forward_fn (Callable[..., torch.Tensor]) — モデルのフォワード関数です。
  • chunk_size (int) — チャンク化されたテンソルのチャンクサイズ: num_chunks = len(input_tensors[0]) / chunk_size。
  • chunk_dim (int) — input_tensors をチャンク分割する次元。
  • input_tensors (tuple[torch.Tensor]) — forward_fn の入力テンソル。チャンク分割の対象となります。

戻り値

torch.Tensor

forward_fnを適用した場合に得られるのと同じ形状を持つテンソル。

この関数は、input_tensorsを、次元chunk_dimに沿ってサイズchunk_sizeの小さな入力テンソルに分割します。その後、メモリを節約するために、各チャンクに対してレイヤーforward_fnを独立して適用します。

forward_fnがchunk_dimに対して独立している場合、この関数はinput_tensorsにforward_fnを直接適用した場合と同一の結果を返します。

例:

# rename the usual forward() fn to forward_chunk()
def forward_chunk(self, hidden_states):
    hidden_states = self.decoder(hidden_states)
    return hidden_states


# implement a chunked forward function
def forward(self, hidden_states):
    return apply_chunking_to_forward(self.forward_chunk, self.chunk_size_lm_head, self.seq_len_dim, hidden_states)

transformers.pytorch_utils.prune_linear_layer

< >

( layer: nn.Linearindex: torch.LongTensordim: int = 0 ) → torch.nn.Linear

パラメータ

  • layer (torch.nn.Linear) — 剪定するレイヤーです。
  • index (torch.LongTensor) — レイヤー内で保持するインデックス。
  • dim (int、任意、デフォルトは 0) — インデックスを保持する次元。

戻り値

torch.nn.Linear

requires_grad=True を設定した新しいレイヤーとして、プルーニングされたレイヤーを扱います。

index のエントリのみを保持するように、線形層を剪定します。

ヘッドを削除するために使用されます。

Update on GitHub