オプティマイザ状態シャーディング - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

オプティマイザ状態シャーディング

オプティマイザ状態シャーディングは、データ並列デバイスグループ間でオプティマイザ状態 (オプティマイザ状態を記述する重みのセット) をシャードする便利なメモリ節約手法です。オプティマイザ状態シャーディングは、ステートフルオプティマイザ (Adam など) または FP16 オプティマイザ (パラメータの FP16 と FP32 の両方のコピーを保存) を使用する場合はいつでも使用できます。

注記

オプティマイザー状態のシャーディングは、 SageMaker モデル並列処理ライブラリ PyTorch v1.6.0 以降で使用できます。

オプティマイザ状態シャーディングの使用方法

オプティマイザ状態のシャーディングは、"shard_optimizer_state": Truemodelparallel 設定で設定することで有効にできます。

この機能をオンにすると、ライブラリはデータ並列度に基づいてモデルパラメータのセットをパーティション化します。第 i パーティションに対応する勾配は、第 i データ並列ランクでのみ縮小します。smp.step デコレータ関数の最初の呼び出しの最後に、smp.DistributedOptimizer でラップされたオプティマイザは、現在のデータ並列ランクのパーティションに対応するパラメータのみに制限されるようにパラメータを再定義します。再定義されたパラメータは仮想パラメータと呼ばれ、基礎となるストレージを元のパラメータと共有します。optimizer.step を初めて呼び出すとき、これらの再定義されたパラメータに基づいてオプティマイザ状態が作成されます。これらのパラメータは、元のパーティションのためにシャードされます。オプティマイザーの更新後、 AllGather操作は (optimizer.step呼び出しの一部として) データのparallel ランクにわたって実行され、パラメーターの状態が一貫したものになります。

ヒント

オプティマイザ状態のシャーディングは、データ並列度が 1 より大きく、モデルに 10 億を超えるパラメータがある場合に役立ちます。

データ並列処理度は (processes_per_host * instance_count / pipeline_parallel_degree) によって計算され、smp.dp_size() 関数はバックグラウンドでサイジングを処理します。

推定器を設定します。 SageMaker PyTorch

mpi_options = { "enabled" : True, "processes_per_host" : 8, # 8 processes "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none " } smp_options = { "enabled":True, "parameters": { "microbatches": 4, "pipeline_parallel_degree": 2, # alias for "partitions" "placement_strategy": "cluster", "tensor_parallel_degree": 2, # tp over 2 devices "ddp": True, "shard_optimizer_state": True } }

トレーニングスクリプトを調整してください。 PyTorch

Tensor 並列処理とパイプライン並列処理の組み合わせ」セクションの「 PyTorch トレーニングスクリプトの調整」を参照してください。このスクリプトに必要な追加の修正はありません。