

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

# オプティマイザ状態シャーディング
<a name="model-parallel-extended-features-pytorch-optimizer-state-sharding"></a>

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

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

## オプティマイザ状態シャーディングの使用方法
<a name="model-parallel-extended-features-pytorch-optimizer-state-sharding-how-to-use"></a>

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

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

**ヒント**  
オプティマイザ状態のシャーディングは、データ並列度が 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 トレーニングスクリプトを適合させる](model-parallel-extended-features-pytorch-tensor-parallelism-examples.md#model-parallel-extended-features-pytorch-tensor-and-pipeline-parallelism-script)」を参照してください。このスクリプトに必要な追加の修正はありません。