Transformers documentation
カスタムレイヤーとユーティリティ
カスタムレイヤーとユーティリティ
このページでは、ライブラリで使用されるすべてのカスタムレイヤー、およびモデリングのために提供されるユーティリティ関数とクラスをリストしています。
これらの多くは、ライブラリ内のモデルのコードを研究する場合にのみ有用です。
WeightRenaming
class transformers.GroupWeightRename
< source >( 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 >( source_patterns: str | list[str]target_patterns: str | list[str]operations: list[ConversionOps]force_cpu: bool = False )
変換操作
重み変換操作のベースクラス。
テンソルをdimに沿って等しいサイズのチャンクに分割します。また、num_shards_attributeは、何個のテンソルに分割するかを読み取るための設定フィールドです。任意の数のテンソルを連結する場合に便利です。
dim 方向にテンソルを連結します。また、任意の数のテンソルを連結する場合、num_shards_attribute は、逆の Ops を使用してテンソルを再構築する際に、何個のテンソルを再構築すべきかを把握するために読み取る設定フィールドです。
最初の次元に沿って、テンソルのリストを単一のテンソルにマージします。 EPまたはTPでは、何をしているのかを明確に把握しておく必要があるため、これを明示的に定義しています。
各グループの明示的な分割サイズを使用してMergeModulelistの逆操作を行います。
class transformers.PermuteForRope
< source >( subconfig_key: str | None = Nonepermute_layer_names: list[str] | None = Noneinverse: bool = False )
複素数 RoPE 重みを分割された sin/cos 形式に変換するために必要な置換を適用します。
class transformers.VisionFuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = True )
融合された QKV に対して、複素数 RoPE 重みを分割された sin/cos 形式に変換するために必要な置換を適用します。
PermuteForRope() + Concatenate() を呼び出すのと同じですが、チャンク化されたテンソルの一部に対してのみ Permute を呼び出すことができます。
注: この変換は、マルチモーダルモデルのビジョンバックボーンにのみ適用されます。これはconfig.vision_configを確認するためです。
class transformers.VisionUnfuseAndPermuteForRope
< source >( dim: int = 0permute_layer_names: list[str] | None = Noneinverse: bool = False )
融合された QKV に対して、複素数 RoPE 重みを分割された sin/cos 形式に変換するために必要な置換を適用します。
Chunk() + PermuteForRope() を呼び出すのと同じですが、チャンク化されたテンソルの一部に対してのみ Permute を呼び出すことができます。
注: この変換は、マルチモーダルモデルのビジョンバックボーンにのみ適用されます。これはconfig.vision_configを確認するためです。
レイヤー
勾配チェックポイントを備えたレイヤーの基底クラス。
このクラスは、レイヤーに対して勾配チェックポイント機能を提供します。デフォルトでは、勾配チェックポイントは無効になっています(gradient_checkpointing = False)。model.set_gradient_checkpointing() が呼び出されると、gradient_checkpointing = True に設定し、_gradient_checkpointing_func にチェックポイント関数を割り当てることで、勾配チェックポイントが有効になります。
重要:
use_reentrant=True を使用して勾配チェックポイントを実行する場合、勾配を必要とする入力(例: 隠れ状態)は、勾配を正しく伝播させるために、キーワード引数ではなく位置引数(*args)として渡す必要があります。
アテンション関数
許可されたアテンション関数を管理する辞書のようなオブジェクトです。register()を呼び出すことで、新しいアテンション関数を簡単に追加できます。モデルが既存のアテンション関数、例えばsdpaをローカルで上書きする必要がある場合は、modeling_<model>.py内でこのクラスの新しいインスタンスを宣言し、そのインスタンス上で宣言する必要があります。
アテンションマスク関数
Rotary Position Embedding 関数
transformers.dynamic_rope_update
< source >( rope_forward )
モデルが動的RoPE(つまり、forward pass中に周波数を再計算する可能性のあるRoPE実装)を使用している場合、forward pass内でRoPEパラメータを更新するためのデコレーター関数です。
Pytorchのカスタムモジュール
OpenAI GPT(およびGPT-2でも使用)において、Radford らによって定義された1次元畳み込み層。
基本的には線形層と同様に動作しますが、重みが転置されています。
PyTorch ヘルパー関数
transformers.apply_chunking_to_forward
< source >( 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
< source >( layer: nn.Linearindex: torch.LongTensordim: int = 0 ) → torch.nn.Linear
index のエントリのみを保持するように、線形層を剪定します。
ヘッドを削除するために使用されます。