翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SageMaker モデル並列ライブラリ v2 リファレンス
以下は、 SageMaker モデル並列ライブラリ v2 (SMP v2) のリファレンスです。
SMP v2 コア機能設定パラメータ
以下は、 をアクティブ化して設定するためのパラメータの完全なリストです SageMaker モデル並列処理ライブラリ v2 のコア機能。これらは JSON形式で記述され、 SageMaker Python の PyTorch 推定器に渡されるか、 のJSONファイルとしてSDK保存される必要があります SageMaker HyperPod。
{ "hybrid_shard_degree":
Integer
, "sm_activation_offloading":Boolean
, "activation_loading_horizon":Integer
, "fsdp_cache_flush_warnings":Boolean
, "allow_empty_shards":Boolean
, "tensor_parallel_degree":Integer
, "context_parallel_degree":Integer
, "expert_parallel_degree":Integer
, "random_seed":Integer
}
-
hybrid_shard_degree
(整数) — シャーディング並列処理の度数を指定します。値は0
~ の整数である必要がありますworld_size
。デフォルト値は0
です。-
に設定すると
0
、ネイティブ実装にフォールバックし、 PyTorchtensor_parallel_degree
が 1 の場合はスクリプトAPIにフォールバックします。それ以外の場合は、tensor_parallel_degree
とhybrid_shard_degree
に基づいて可能な限り最大の を計算しますworld_size
。ネイティブ PyTorch FSDPユースケースにフォールバックする場合、FULL_SHARD
が使用する戦略であれば、 のクラスター全体にシャードされますGPUs。HYBRID_SHARD
または_HYBRID_SHARD_ZERO2
が戦略の場合、8hybrid_shard_degree
に相当します。テンソル並列処理を有効にすると、改訂された に基づいてシャードされますhybrid_shard_degree
。 -
に設定すると
1
、 が 1 の場合、スクリプトNO_SHARD
の とtensor_parallel_degree
APIのネイティブ PyTorch実装にフォールバックします。それ以外の場合は、特定のテンソル並列グループNO_SHARD
内で に相当します。 -
2 から までの整数に設定すると
world_size
、シャーディングは指定された数の で行われますGPUs。FSDP スクリプトsharding_strategy
で を設定しないと、 に上書きされますHYBRID_SHARD
。を設定すると_HYBRID_SHARD_ZERO2
、sharding_strategy
指定した が使用されます。
-
-
sm_activation_offloading
(ブール値) — SMPアクティベーションオフロード実装を有効にするかどうかを指定します。の場合False
、オフロードはネイティブ PyTorch 実装を使用します。の場合True
、SMPアクティベーションオフロードの実装を使用します。また、スクリプトで PyTorch アクティベーションオフロードラッパー (torch.distributed.algorithms._checkpoint.checkpoint_wrapper.offload_wrapper
) を使用する必要があります。詳細については、「アクティベーションオフロード」を参照してください。デフォルト値はTrue
です。 -
activation_loading_horizon
(整数) — のアクティベーションオフロード期間タイプを指定する整数FSDP。これは、入力が同時にGPUメモリ内に存在できるチェックポイントレイヤーまたはオフロードレイヤーの最大数です。詳細については、「アクティベーションオフロード」を参照してください。入力値は正の整数である必要があります。デフォルト値は2
です。 -
fsdp_cache_flush_warnings
(ブール値) — キャッシュフラッシュが PyTorch メモリマネージャーで発生した場合に検出して警告します。これは、計算パフォーマンスを低下させる可能性があるためです。デフォルト値はTrue
です。 -
allow_empty_shards
(ブール値) – テンソルが分割できない場合にテンソルをシャーディングするときに空のシャードを許可するかどうか。これは、特定のシナリオにおけるチェックポイント中のクラッシュの実験的な修正です。これを無効にすると、元の PyTorch 動作に戻ります。デフォルト値はFalse
です。 -
tensor_parallel_degree
(整数) — テンソル並列度を指定します。値は1
~ である必要がありますworld_size
。デフォルト値は1
です。1 より大きい値を渡すと、コンテキスト並列処理が自動的に有効になるわけではありません。またtorch.sagemaker.transformAPI、 を使用してトレーニングスクリプトでモデルをラップする必要もあります。詳細については、「テンソル並列性」を参照してください。 -
context_parallel_degree
(整数) — コンテキスト並列度を指定します。値は1
~world_size
で、 は である必要があります<= hybrid_shard_degree
。デフォルト値は1
です。値を 1 より大きく渡すと、コンテキスト並列処理が自動的に有効になるわけではありません。また、 torch.sagemaker.transform API を使用してトレーニングスクリプトでモデルをラップする必要もあります。詳細については、「コンテキスト並列処理」を参照してください。 -
expert_parallel_degree
(整数) - 専門家による並列処理の度合いを指定します。値は 1~ の間でなければなりませんworld_size
。デフォルト値は1
です。値を 1 より大きく渡すと、コンテキスト並列処理が自動的に有効になるわけではありません。また、 torch.sagemaker.transform API を使用してトレーニングスクリプトでモデルをラップする必要もあります。詳細については、「エキスパート並列処理」を参照してください。 -
random_seed
(整数) — SMPテンソル並列処理またはエキスパート並列処理による分散モジュールでのランダムオペレーションのシード番号。このシードはテンソル並列ランクまたはエキスパート並列ランクに追加され、ランクごとに実際のシードを設定します。これは、テンソル並列ランクとエキスパート並列ランクごとに一意です。SMP v2 は、テンソル並列ランクとエキスパート並列ランク間で生成された乱数をそれぞれ non-tensor-parallelism および non-expert-parallelism ケースと一致するようにします。
v2 SMP torch.sagemaker
パッケージのリファレンス
このセクションは、 v2 SMP が提供するtorch.sagemaker
パッケージのリファレンスです。
トピック
- torch.sagemaker.delayed_param.DelayedParamIniter
- torch.sagemaker.distributed.checkpoint.state_dict_saver.async_save
- torch.sagemaker.distributed.checkpoint.state_dict_saver.maybe_finalize_async_calls
- torch.sagemaker.distributed.checkpoint.state_dict_saver.save
- torch.sagemaker.distributed.checkpoint.state_dict_loader.load
- torch.sagemaker.moe.moe_config.MoEConfig
- torch.sagemaker.nn.attn.FlashSelfAttention
- torch.sagemaker.nn.attn.FlashGroupedQueryAttention
- torch.sagemaker.nn.huggingface.llama_flashattn.LlamaFlashAttention
- torch.sagemaker.transform
- torch.sagemaker util 関数とプロパティ
torch.sagemaker.delayed_param.DelayedParamIniter
モデル遅延パラメータの初期化に適用APIするための PyTorch。
class torch.sagemaker.delayed_param.DelayedParamIniter( model: nn.Module, init_method_using_config : Callable = None, verbose: bool = False, )
パラメータ
-
model
(nn.Module
) – SMPv2 の遅延パラメータ初期化機能をラップして適用する PyTorch モデル。 -
init_method_using_config
(呼び出し可能) – SMPv2 またはサポートされている のテンソル並列実装を使用する場合はSMP テンソル並列処理と互換性のあるHugging Face Transformer モデル、このパラメータをデフォルト値の のままにしますNone
。デフォルトでは、 は指定されたモデルを正しく初期化する方法DelayedParamIniter
APIを見つけます。その他のモデルでは、カスタムパラメータ初期化関数を作成し、スクリプトに追加する必要があります。次のコードスニペットは、v2 SMP が に実装したデフォルトのinit_method_using_config
関数ですSMP テンソル並列処理と互換性のあるHugging Face Transformer モデル。独自の初期化設定関数を作成し、スクリプトに追加して、 の SMPDelayedParamIniter
init_method_using_config
パラメータに渡すためのリファレンスとして、次のコードスニペットを使用しますAPI。from torch.sagemaker.utils.module_utils import empty_module_params, move_buffers_to_device # Define a custom init config function. def
custom_init_method_using_config
(module): d = torch.cuda.current_device() empty_module_params(module, device=d) if isinstance(module, (nn.Linear, Conv1D)): module.weight.data.normal_(mean=0.0, std=config.initializer_range) if module.bias is not None: module.bias.data.zero_() elif isinstance(module, nn.Embedding): module.weight.data.normal_(mean=0.0, std=config.initializer_range) if module.padding_idx is not None: module.weight.data[module.padding_idx].zero_() elif isinstance(module, nn.LayerNorm): module.weight.data.fill_(1.0) module.bias.data.zero_() elif isinstance(module, LlamaRMSNorm): module.weight.data.fill_(1.0) move_buffers_to_device(module, device=d) delayed_initer = DelayedParamIniter(model, init_method_using_config=custom_init_method_using_config
)前述のコードスニペットの
torch.sagemaker.module_util
関数の詳細については、「」を参照してくださいtorch.sagemaker util 関数とプロパティ。 -
verbose
(ブール値) — 初期化と検証中により詳細なログ記録を有効にするかどうか。デフォルト値はFalse
です。
方法
-
get_param_init_fn()
– PyTorch FSDPラッパークラスのparam_init_fn
引数に渡すことができるパラメータ初期化関数を返します。 -
get_post_param_init_fn()
– ラッパークラスのpost_param_init_fn
引 PyTorch FSDP数に渡すことができるパラメータ初期化関数を返します。これは、モデルで重みを結び付けている場合に必要です。モデルはメソッド を実装する必要がありますtie_weights
。詳細については、「」の「タイドウェイトに関する注意事項」を参照してください遅延パラメータの初期化。 -
count_num_params
(module: nn.Module, *args: Tuple[nn.Parameter]
) - パラメータ初期化関数によって初期化されているパラメータの数を追跡します。これにより、次のvalidate_params_and_buffers_inited
メソッドを実装できます。メソッドはバックエンドでこのvalidate_params_and_buffers_inited
メソッドを暗黙的に呼び出すため、通常、この関数を明示的に呼び出す必要はありません。 -
validate_params_and_buffers_inited
(enabled: bool=True
) – これは、初期化されたパラメータ数がモデル内のパラメータの総数と一致することを検証するためのコンテキストマネージャーです。また、すべてのパラメータとバッファがメタGPUデバイスではなくデバイス上にあることも検証します。これらの条件が満たされAssertionErrors
ない場合、 が発生します。このコンテキストマネージャーはオプションであり、このコンテキストマネージャーを使用してパラメータを初期化する必要はありません。
torch.sagemaker.distributed.checkpoint.state_dict_saver.async_save
非同期保存APIのエントリ。このメソッドを使用して、指定した にstate_dict
非同期的に保存しますcheckpoint_id
。
def async_save( state_dict: STATE_DICT_TYPE, *, checkpoint_id: Union[str, os.PathLike, None] = None, storage_writer: Optional[StorageWriter] = None, planner: Optional[SavePlanner] = None, process_group: Optional[dist.ProcessGroup] = None, coordinator_rank: int = 0, queue : AsyncCallsQueue = None, sharded_strategy: Union[SaveShardedStrategy, Tuple[str, int], None] = None, wait_error_handling: bool = True, force_check_all_plans: bool = True, s3_region: Optional[str] = None, s3client_config: Optional[S3ClientConfig] = None ) -> None:
パラメータ
-
state_dict
(dict) - 必須。保存する状態 dict。 -
checkpoint_id
(str) - 必須。チェックポイントを保存するストレージパス。 -
storage_writer
(StorageWriter) - オプション。書き込みオペレーションを実行する PyTorchStorageWriter
の インスタンス。これが指定されていない場合は、 のデフォルト設定 StorageWriter
が使用されます。 -
planner
(SavePlanner) - オプション。SavePlanner
の インスタンス PyTorch。これが指定されていない場合は、 のデフォルト設定 SavePlanner
が使用されます。 -
process_group
(ProcessGroup) - オプション。作業するプロセスグループ。の場合None
、デフォルトの (グローバル) プロセスグループが使用されます。 -
coordinator_rank
(int) - オプション。などの集合通信演算子を実行するときのコーディネーターのランクAllReduce
。 -
queue
(AsyncRequestQueue) - オプション。使用する非同期スケジューラ。デフォルトでは、グローバルパラメータ が使用されますDEFAULT_ASYNC_REQUEST_QUEUE
。 -
sharded_strategy
(PyTorchDistSaveShardedStrategy) - オプション。チェックポイントの保存に使用するシャード戦略。これが指定されていない場合、デフォルトでtorch.sagemaker.distributed.checkpoint.state_dict_saver.PyTorchDistSaveShardedStrategy
が使用されます。 -
wait_error_handling
(bool) - オプション。すべてのランクがエラー処理を完了するのを待つかどうかを指定するフラグ。デフォルト値はTrue
です。 -
force_check_all_plans
(bool) - オプション。キャッシュヒットの場合でも、ランク間で計画を強制的に同期するかどうかを決定するフラグ。デフォルト値はTrue
です。 -
s3_region
(str) - オプション。S3 バケットが配置されているリージョン。指定しない場合、リージョンは から推測されますcheckpoint_id
。 -
s3client_config
(S3ClientConfig) - オプション。S3 クライアントの設定可能なパラメータを公開するデータクラス。指定しない場合、S3ClientConfigのデフォルト設定が使用されます。 part_size
パラメータはデフォルトで 64MB に設定されています。
torch.sagemaker.distributed.checkpoint.state_dict_saver.maybe_finalize_async_calls
この関数を使用すると、トレーニングプロセスで複数の非同期リクエストをモニタリングできます。
def maybe_finalize_async_calls( blocking=True, process_group=None ) -> List[int]:
パラメータ
-
blocking
(bool) - オプション。の場合True
、アクティブなリクエストがすべて完了するまで待機します。それ以外の場合は、すでに完了した非同期リクエストのみを確定します。デフォルト値はTrue
です。 -
process_group
(ProcessGroup) - オプション。操作するプロセスグループ。に設定するとNone
、デフォルトの (グローバル) プロセスグループが使用されます。
戻り値
-
非同期呼び出しのインデックスを含むリストは正常に確定されます。
torch.sagemaker.distributed.checkpoint.state_dict_saver.save
このメソッドを使用して、指定された state_dict
に同期的に を保存しますcheckpoint_id
。
def save( state_dict: STATE_DICT_TYPE, *, checkpoint_id: Union[str, os.PathLike, None] = None, storage_writer: Optional[StorageWriter] = None, planner: Optional[SavePlanner] = None, process_group: Optional[dist.ProcessGroup] = None, coordinator_rank: int = 0, wait_error_handling: bool = True, force_check_all_plans: bool = True, s3_region: Optional[str] = None, s3client_config: Optional[S3ClientConfig] = None ) -> None:
パラメータ
-
state_dict
(dict) - 必須。保存する状態 dict。 -
checkpoint_id
(str) - 必須。チェックポイントを保存するストレージパス。 -
storage_writer
(StorageWriter) - オプション。書き込みオペレーションを実行する PyTorchStorageWriter
の インスタンス。これを指定しない場合、 のデフォルト設定 StorageWriter
が使用されます。 -
planner
(SavePlanner) - オプション。SavePlanner
の インスタンス PyTorch。これを指定しない場合、 のデフォルト設定 SavePlanner
が使用されます。 -
process_group
(ProcessGroup) - オプション。作業するプロセスグループ。の場合None
、デフォルトの (グローバル) プロセスグループが使用されます。 -
coordinator_rank
(int) - オプション。などの集合通信演算子を実行するときのコーディネーターのランクAllReduce
。 -
wait_error_handling
(bool) - オプション。すべてのランクがエラー処理を完了するのを待つかどうかを指定するフラグ。デフォルト値はTrue
です。 -
force_check_all_plans
(bool) - オプション。キャッシュヒットの場合でも、ランク間で計画を強制的に同期するかどうかを決定するフラグ。デフォルト値はTrue
です。 -
s3_region
(str) - オプション。S3 バケットが配置されているリージョン。指定しない場合、リージョンは から推測されますcheckpoint_id
。 -
s3client_config
(S3ClientConfig) - オプション。S3 クライアントの設定可能なパラメータを公開するデータクラス。指定しない場合、S3ClientConfigのデフォルト設定が使用されます。 part_size
パラメータはデフォルトで 64MB に設定されています。
torch.sagemaker.distributed.checkpoint.state_dict_loader.load
分散モデルの状態ディクショナリ () をロードしますstate_dict
。
def load( state_dict: Dict[str, Any], *, checkpoint_id: Union[str, os.PathLike, None] = None, storage_reader: Optional[StorageReader] = None, planner: Optional[LoadPlanner] = None, process_group: Optional[dist.ProcessGroup] = None, check_keys_matched: bool = True, coordinator_rank: int = 0, s3_region: Optional[str] = None, s3client_config: Optional[S3ClientConfig] = None ) -> None:
パラメータ
-
state_dict
(dict) - 必須。ロードstate_dict
する 。 -
checkpoint_id
(str) - 必須。チェックポイントの ID。の意味はストレージcheckpoint_id
によって異なります。フォルダまたはファイルへのパスを指定できます。ストレージがキーバリューストアである場合は、キーにすることもできます。 -
storage_reader
(StorageReader) - オプション。読み取りオペレーションを実行する PyTorchStorageReader
の インスタンス。指定しない場合、分散チェックポイントは に基づいてリーダーを自動的に推測します checkpoint_id
。checkpoint_id
も の場合None
、例外エラーが発生します。 -
planner
(StorageReader) - オプション。LoadPlanner
の インスタンス PyTorch。指定しない場合、 のデフォルト設定 LoadPlanner
が使用されます。 -
check_keys_matched
(bool) - オプション。有効にすると、すべてのランクのstate_dict
キーが を使用して一致しているかどうかをチェックしますAllGather
。 -
s3_region
(str) - オプション。S3 バケットが配置されているリージョン。指定しない場合、リージョンは から推測されますcheckpoint_id
。 -
s3client_config
(S3ClientConfig) - オプション。S3 クライアントの設定可能なパラメータを公開するデータクラス。指定しない場合、S3ClientConfigのデフォルト設定が使用されます。 part_size
パラメータはデフォルトで 64MB に設定されています。
torch.sagemaker.moe.moe_config.MoEConfig
Mixture-ofSMP-Experts (MoE) の 実装を設定するための設定クラス。このクラスで MoE 設定値を指定し、 torch.sagemaker.transform
API呼び出しに渡すことができます。MoE モデルのトレーニングにこのクラスを使用する方法の詳細については、「」を参照してくださいエキスパート並列処理。
class torch.sagemaker.moe.moe_config.MoEConfig( smp_moe=True, random_seed=12345, moe_load_balancing="sinkhorn", global_token_shuffle=False, moe_all_to_all_dispatcher=True, moe_aux_loss_coeff=0.001, moe_z_loss_coeff=0.001 )
パラメータ
-
smp_moe
(ブール値) - MoE の SMP-implementation を使用するかどうか。デフォルト値はTrue
です。 -
random_seed
(整数) - エキスパート並列分散モジュールのランダムオペレーションのシード番号。このシードはエキスパート並列ランクに追加され、各ランクの実際のシードを設定します。これは、エキスパートの並列ランクごとに一意です。デフォルト値は12345
です。 -
moe_load_balancing
(文字列) - MoE ルーターの負荷分散タイプを指定します。有効なオプションは、aux_loss
、sinkhorn
、balanced
、および ですnone
。デフォルト値はsinkhorn
です。 -
global_token_shuffle
(ブール値) - 同じ EP グループ内の EP ランク間でトークンをシャッフルするかどうか。デフォルト値はFalse
です。 -
moe_all_to_all_dispatcher
(ブール値) - MoE での通信にディス all-to-all パッチャを使用するかどうか。デフォルト値はTrue
です。 -
moe_aux_loss_coeff
(浮動小数点) - 補助負荷分散損失の係数。デフォルト値は0.001
です。 -
moe_z_loss_coeff
(浮動小数点) - z 損失の係数。デフォルト値は0.001
です。
torch.sagemaker.nn.attn.FlashSelfAttention
v2 FlashAttentionで を使用するAPIための SMP 。
class torch.sagemaker.nn.attn.FlashSelfAttention( attention_dropout_prob: float = 0.0, scale: Optional[float] = None, triton_flash_attention: bool = False, use_alibi: bool = False, )
パラメータ
-
attention_dropout_prob
(浮動小数点) — 注意に適用するドロップアウト確率。デフォルト値は0.0
です。 -
scale
(浮動小数点) – 合格すると、このスケール係数がソフトマックスに適用されます。(デフォルト値でもある) に設定すると、スケール係数None
は になります1 / sqrt(attention_head_size)
。デフォルト値はNone
です。 -
triton_flash_attention
(bool) – 合格すると、フラッシュアテンションの Triton 実装が使用されます。これは、線形バイアス (ALiBi) による注意をサポートするために必要です (次のuse_alibi
パラメータを参照)。このバージョンのカーネルはドロップアウトをサポートしていません。デフォルト値はFalse
です。 -
use_alibi
(bool) – 渡されると、提供されたマスクを使用して線形バイアス (ALiBi) による注意が有効になります。を使用する場合はALiBi、次のように準備されたアテンションマスクが必要です。デフォルト値はFalse
です。def generate_alibi_attn_mask(attention_mask, batch_size, seq_length, num_attention_heads, alibi_bias_max=8): device, dtype = attention_mask.device, attention_mask.dtype alibi_attention_mask = torch.zeros( 1, num_attention_heads, 1, seq_length, dtype=dtype, device=device ) alibi_bias = torch.arange(1 - seq_length, 1, dtype=dtype, device=device).view( 1, 1, 1, seq_length ) m = torch.arange(1, num_attention_heads + 1, dtype=dtype, device=device) m.mul_(alibi_bias_max / num_attention_heads) alibi_bias = alibi_bias * (1.0 / (2 ** m.view(1, num_attention_heads, 1, 1))) alibi_attention_mask.add_(alibi_bias) alibi_attention_mask = alibi_attention_mask[..., :seq_length, :seq_length] if attention_mask is not None and attention_mask.bool().any(): alibi_attention_mask.masked_fill( attention_mask.bool().view(batch_size, 1, 1, seq_length), float("-inf") ) return alibi_attention_mask
方法
-
forward(self, qkv, attn_mask=None, causal=False, cast_dtype=None, layout="b h s d")
– 通常の PyTorch モジュール関数。module(x)
が呼び出されると、 はこの関数を自動的にSMP実行します。-
qkv
–torch.Tensor
または(batch_size x seqlen x (3 x num_heads) x head_size)
の形式。torch.Tensors
それぞれのタプルは(batch_size, (3 x num_heads) x seqlen x head_size)
(batch_size x seqlen x num_heads x head_size)
、、または の形式になります(batch_size x num_heads x seqlen x head_size)
。形状に基づいて適切なレイアウト引数を渡す必要があります。 -
attn_mask
–torch.Tensor
次の形式の(batch_size x 1 x 1 x seqlen)
。このアテンションマスクパラメータを有効にするには、triton_flash_attention=True
と が必要ですuse_alibi=True
。この方法を使用してアテンションマスクを生成する方法については、「」のコード例を参照してくださいFlashAttention。デフォルト値はNone
です。 -
causal
– 引数のデフォルト値False
である に設定すると、マスクは適用されません。に設定するとTrue
、forward
メソッドは標準の下三角形マスクを使用します。デフォルト値はFalse
です。 -
cast_dtype
– 特定の に設定するとdtype
、テンソルはqkv
dtype
より前のテンソルにキャストされますattn
。これは、Hugging Face Transformer GPT-NeoX モデルなどの実装に便利です。このモデルには、引き継ぎ埋め込みq
k
とfp32
引き継ぎ埋め込みがあります。に設定するとNone
、キャストは適用されません。デフォルト値はNone
です。 -
layout
(文字列) – 使用できる値はb h s d
または ですb s h d
。これは、 に適切な変換を適用できるように、渡されたqkv
テンソルのレイアウトに設定する必要がありますattn
。デフォルト値はb h s d
です。
-
戻り値
シェイプ torch.Tensor
の 1 つの (batch_size x num_heads x seq_len x head_size)
。
torch.sagemaker.nn.attn.FlashGroupedQueryAttention
v2 FlashGroupedQueryAttention
で SMP を使用するAPIための 。この の使用の詳細については、API「」を参照してくださいグループクエリに注意するために FlashAttention カーネルを使用する。
class torch.sagemaker.nn.attn.FlashGroupedQueryAttention( attention_dropout_prob: float = 0.0, scale: Optional[float] = None, )
パラメータ
-
attention_dropout_prob
(浮動小数点) — 注意に適用するドロップアウト確率。デフォルト値は0.0
です。 -
scale
(浮動小数点) – 合格すると、このスケール係数がソフトマックスに適用されます。に設定するとNone
、1 / sqrt(attention_head_size)
がスケール係数として使用されます。デフォルト値はNone
です。
方法
-
forward(self, q, kv, causal=False, cast_dtype=None, layout="b s h d")
– 通常の PyTorch モジュール関数。module(x)
が呼び出されると、 はこの関数を自動的にSMP実行します。-
q
–torch.Tensor
次の形式(batch_size x seqlen x num_heads x head_size)
または の(batch_size x num_heads x seqlen x head_size)
。形状に基づいて適切なレイアウト引数を渡す必要があります。 -
kv
–torch.Tensor
次の形式(batch_size x seqlen x (2 x num_heads) x head_size)
または の(batch_size, (2 x num_heads) x seqlen x head_size)
、または 2 つの のタプルtorch.Tensor
。それぞれが(batch_size x seqlen x num_heads x head_size)
または の形になります(batch_size x num_heads x seqlen x head_size)
。また、シェイプに基づいて適切なlayout
引数を渡す必要があります。 -
causal
– 引数のデフォルト値False
である に設定すると、マスクは適用されません。に設定するとTrue
、forward
メソッドは標準の下三角形マスクを使用します。デフォルト値はFalse
です。 -
cast_dtype
– 特定の dtype に設定すると、qkv
の前にテンソルをその dtype にキャストしますattn
。これは、Hugging Face Transformers GPT-NeoX などの実装に便利です。これは、fp32
q,k
にポストアセンブルメント埋め込みを備えています。に設定するとNone
、キャストは適用されません。デフォルト値はNone
です。 -
layout (文字列) – 使用できる値は
"b h s d"
または です"b s h d"
。これは、 に適切な変換を適用できるように、渡されたqkv
テンソルのレイアウトに設定する必要がありますattn
。デフォルト値は"b h s d"
です。
-
戻り値
注意計算の出力torch.Tensor (batch_size x num_heads x seq_len x head_size)
を表す単一の を返します。
torch.sagemaker.nn.huggingface.llama_flashattn.LlamaFlashAttention
が Llama モデル FlashAttention でサポートAPIする 。これは、低レベルで torch.sagemaker.nn.attn.FlashGroupedQueryAttention API APIを使用します。これを使用する方法については、「」を参照してくださいグループクエリに注意するために FlashAttention カーネルを使用する。
class torch.sagemaker.nn.huggingface.llama_flashattn.LlamaFlashAttention( config: LlamaConfig )
パラメータ
-
config
– Llama モデル FlashAttention の設定。
方法
-
forward(self, hidden_states, attention_mask, position_ids, past_key_value, output_attentions, use_cache)
-
hidden_states
(torch.Tensor
) - テンソルの非表示状態。(batch_size x seq_len x num_heads x head_size)
-
attention_mask
(torch.LongTensor
) - パディングトークンインデックスに の形式で注意を払わないようにマスクします(batch_size x seqlen)
。デフォルト値はNone
です。 -
position_ids
(torch.LongTensor
) – でない場合None
、 の形式で(batch_size x seqlen)
、位置埋め込みの各入力シーケンストークンの位置のインデックスを示します。デフォルト値はNone
です。 -
past_key_value
(キャッシュ) – 事前に計算された隠し状態 (自己注意ブロックと交差注意ブロックのキーと値)。デフォルト値はNone
です。 -
output_attentions
(bool) – すべてのアテンションレイヤーのアテンションテンソルを返すかどうかを示します。デフォルト値はFalse
です。 -
use_cache
(bool) –past_key_values
キー値の状態を返すかどうかを示します。デフォルト値はFalse
です。
-
戻り値
注意計算の出力torch.Tensor (batch_size x num_heads x seq_len x head_size)
を表す単一の を返します。
torch.sagemaker.transform
SMP v2 は、Hugging Face Transformer モデルをSMPモデル実装に変換し、SMPテンソル並列処理を有効にするtorch.sagemaker.transform()
APIためにこれを提供します。
torch.sagemaker.transform( model: nn.Module, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None, config: Optional[Dict] = None, load_state_dict_from_rank0: bool = False )
SMP v2 は、Hugging Face Transformer モデルの設定をトランスフォーマー設定に変換SMP テンソル並列処理と互換性のあるHugging Face Transformer モデルすることで、 のSMP変換ポリシーを維持します。
パラメータ
-
model
(torch.nn.Module
) – SMPライブラリのテンソル並列処理機能を変換して適用SMP テンソル並列処理と互換性のあるHugging Face Transformer モデルするための からのモデル。 -
device
(torch.device
) – 渡されると、このデバイスに新しいモデルが作成されます。元のモジュールにメタデバイスにパラメータがある場合 (「」を参照遅延パラメータの初期化)、変換されたモジュールはここで渡された引数を無視してメタデバイスにも作成されます。デフォルト値はNone
です。 -
dtype
(torch.dtype
) – 渡されると、モデルを作成するための dtype コンテキストマネージャーとして設定し、この dtype でモデルを作成します。を使用するfp32
ときに でモデルを作成するため、これは通常不要でありMixedPrecision
、 のデフォルトの dtypefp32
です PyTorch。デフォルト値はNone
です。 -
config
(dict) – これはトランスSMPフォーマーを設定するためのディクショナリです。デフォルト値はNone
です。 -
load_state_dict_from_rank0
(ブール値) – デフォルトでは、このモジュールは新しい重みを持つモデルの新しいインスタンスを作成します。この引数を に設定するとTrue
、 SMP は元の PyTorch モデルの状態ディクショナリを 0 ランクから、0 ランクが属するテンソル並列グループの変換されたモデルにロードしようとします。これを に設定するとTrue
、ランク 0 はメタデバイスにパラメータを持つことができません。この変換呼び出しの後、最初のテンソル並列グループのみが 0 ランクの重みを入力します。これらの重みを最初のテンソル並列グループから他のすべてのプロセスに取得するには、FSDPラッパーTrue
で をsync_module_states
に設定する必要があります。有効にすると、SMPライブラリは元のモデルから状態ディクショナリをロードします。SMP ライブラリは変換前にstate_dict
モデルの を受け取り、変換されたモデルの構造と一致するように変換し、テンソル並列ランクごとにシャードし、この状態を 0 番目のランクから 0 番目のランクが属するテンソル並列グループの他のランクに通信してロードします。デフォルト値はFalse
です。
戻り値
でラップできる変換されたモデルを返します PyTorch FSDP。load_state_dict_from_rank0
が に設定されている場合True
、ランク 0 を含むテンソル並列グループには、ランク 0 の元の状態ディクショナリからロードされた重みがあります。元のモデル遅延パラメータの初期化で を使用する場合、変換されたモデルのパラメータとバッファCPUsの実際のテンソルがオンになっているのは、これらのランクのみです。残りのランクには、メモリを節約するために、引き続きメタデバイスにパラメータとバッファがあります。
torch.sagemaker
util 関数とプロパティ
torch.sagemaker util 関数
-
torch.sagemaker.init(config: Optional[Union[str, Dict[str, Any]]] = None) -> None
– で PyTorch トレーニングジョブを初期化しますSMP。 -
torch.sagemaker.is_initialized() -> bool
– トレーニングジョブが で初期化されているかどうかを確認しますSMP。ジョブが で初期化されている PyTorch ときにネイティブにフォールバックするとSMP、次のプロパティリストに示すように、一部のプロパティは関連せずNone
、 になります。 -
torch.sagemaker.utils.module_utils.empty_module_params(module: nn.Module, device: Optional[torch.device] = None, recurse: bool = False) -> nn.Module
– 指定された に空のパラメータdevice
があれば作成し、指定すればすべてのネストされたモジュールで再帰できます。 -
torch.sagemaker.utils.module_utils.move_buffers_to_device(module: nn.Module, device: torch.device, recurse: bool = False) -> nn.Module
– モジュールバッファを特定の に移動しdevice
、指定すればすべてのネストされたモジュールを再帰的に設定できます。
プロパティ
torch.sagemaker.state
は、 SMPで を初期化した後、複数の有用なプロパティを保持しますtorch.sagemaker.init
。
-
torch.sagemaker.state.hybrid_shard_degree
(int) – シャーディングデータ並列処理度、 に渡されたSMP設定のユーザー入力からのコピーtorch.sagemaker.init()
。詳細については、「 SageMaker モデル並列処理ライブラリ v2 を使用する」を参照してください。 -
torch.sagemaker.state.rank
(int) – の範囲にあるデバイスのグローバルランク[0, world_size)
。 -
torch.sagemaker.state.rep_rank_process_group
(torch.distributed.ProcessGroup
) – 同じレプリケーションランクのすべてのデバイスを含むプロセスグループ。との微妙ではあるが根本的な違いに注意してくださいtorch.sagemaker.state.tp_process_group
。ネイティブ にフォールバックすると PyTorch、 が返されますNone
。 -
torch.sagemaker.state.tensor_parallel_degree
(int) – テンソル並列処理度、 に渡されたSMP設定のユーザー入力からのコピーtorch.sagemaker.init()
。詳細については、「 SageMaker モデル並列処理ライブラリ v2 を使用する」を参照してください。 -
torch.sagemaker.state.tp_size
(int) – へのエイリアスtorch.sagemaker.state.tensor_parallel_degree
。 -
torch.sagemaker.state.tp_rank
(int) – テンソル並列処理の度合いとランク付けメカニズムによって決定される[0, tp_size)
、 の範囲内のデバイスのテンソル並列処理ランク。 -
torch.sagemaker.state.tp_process_group
(torch.distributed.ProcessGroup
) – 他のディメンションで同じランクを持つすべてのデバイス (シャーディングデータ並列処理やレプリケーションなど) を含むテンソル並列プロセスグループ。ネイティブ にフォールバックすると PyTorch、 が返されますNone
。 -
torch.sagemaker.state.world_size
(int) — トレーニングで使用されるデバイスの総数。
v1 SMP から v2 SMP へのアップグレード
v1 から SMP v2 SMP に移行するには、スクリプトを変更して v1 SMP を削除APIsし、v2 SMP を適用する必要がありますAPIs。v1 SMP スクリプトから開始する代わりに、スクリプトから PyTorch FSDP開始し、「」の手順に従うことをお勧めします SageMaker モデル並列処理ライブラリ v2 を使用する。
SMP v1 モデルを SMP v2 に持ち込むには、v1 SMP で完全なモデル状態ディクショナリを収集し、モデル状態ディクショナリに翻訳関数を適用して Hugging Face Transformers モデルチェックポイント形式に変換する必要があります。その後、SMP「」で説明されているようにを使用したチェックポイント SMP、v2 で Hugging Face Transformers モデルチェックポイントをロードし、v2 SMP APIsで PyTorch チェックポイントの使用を続行できます。モデルSMP PyTorch FSDPで を使用するには、 v2 SMP に移動し、 およびその他の最新機能を使用する PyTorch FSDPようにトレーニングスクリプトを変更してください。
import smdistributed.modelparallel.torch as smp # Create model model = ... model = smp.DistributedModel(model) # Run training ... # Save v1 full checkpoint if smp.rdp_rank() == 0: model_dict = model.state_dict(gather_to_rank0=True) # save the full model # Get the corresponding translation function in smp v1 and translate if model_type == "gpt_neox": from smdistributed.modelparallel.torch.nn.huggingface.gptneox import translate_state_dict_to_hf_gptneox translated_state_dict = translate_state_dict_to_hf_gptneox(state_dict, max_seq_len=None) # Save the checkpoint checkpoint_path = "checkpoint.pt" if smp.rank() == 0: smp.save( {"model_state_dict": translated_state_dict}, checkpoint_path, partial=False, )
v1 で使用可能な翻訳関数を見つけるには、SMP「」を参照してくださいHugging Face Transformer モデルのサポート。
v2 でモデルチェックポイントを保存およびロードする手順については、SMP「」を参照してくださいを使用したチェックポイント SMP。