

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

# SageMaker AI 分散データ並列処理ライブラリを使用して分散トレーニングを実行する
<a name="data-parallel"></a>

SageMaker AI 分散データ並列処理 (SMDDP) ライブラリは、 AWS インフラストラクチャに最適化された集合通信オペレーションの実装を提供することで、深層学習モデルの SageMaker トレーニング機能をほぼ線形のスケーリング効率で拡張します。

大規模言語モデル (LLM) や拡散モデルなどの大規模機械学習 (ML) モデルを膨大なトレーニングデータセットでトレーニングする際、機械学習の実務者はアクセラレーターのクラスターや分散トレーニング手法を活用して、トレーニング時間を短縮したり、各 GPU メモリに収まりきらないモデルのメモリ制約を解消したりします。通常は、単一のインスタンス上で複数のアクセラレーターを使い始め、ワークロード要件の増加に応じてインスタンスのクラスターにスケールアップしていきます。クラスターのサイズが大きくなるにつれて、複数のノード間の通信オーバーヘッドも大きくなり、全体的な計算性能が低下します。

このようなオーバーヘッドやメモリの問題に対処するために、SMDDP ライブラリには以下の機能があります。
+ SMDDP ライブラリは、 AWS ネットワークインフラストラクチャと Amazon SageMaker AI ML インスタンストポロジのトレーニングジョブを最適化します。
+ SMDDP ライブラリは、 の実装`AllReduce`と、 AWS インフラストラクチャ用に最適化された`AllGather`集合通信オペレーションにより、ノード間の通信を改善します。

SMDDP ライブラリの機能の詳細については、「[SageMaker AI 分散データ並列処理ライブラリの概要](data-parallel-intro.md)」を参照してください。

SageMaker AI が提供するモデル並列戦略によるトレーニングの詳細については、「[(アーカイブ済み) SageMaker モデル並列処理ライブラリ v1.x](model-parallel.md)」も参照してください。

**Topics**
+ [SageMaker AI 分散データ並列処理ライブラリの概要](data-parallel-intro.md)
+ [サポートされているフレームワーク、 AWS リージョンおよびインスタンスタイプ](distributed-data-parallel-support.md)
+ [SageMaker AI 分散データ並列処理ライブラリを使用した分散トレーニング](data-parallel-modify-sdp.md)
+ [Amazon SageMaker AI データ並列処理ライブラリの例](distributed-data-parallel-v2-examples.md)
+ [SageMaker AI 分散データ並列処理ライブラリの設定のヒント](data-parallel-config.md)
+ [Amazon SageMaker AI 分散データ並列処理ライブラリに関するよくある質問](data-parallel-faq.md)
+ [Amazon SageMaker AI の分散トレーニングのトラブルシューティング](distributed-troubleshooting-data-parallel.md)
+ [SageMaker AI データ並列処理ライブラリのリリースノート](data-parallel-release-notes.md)

# SageMaker AI 分散データ並列処理ライブラリの概要
<a name="data-parallel-intro"></a>

SageMaker AI 分散データ並列処理 (SMDDP) ライブラリは、分散データ並列トレーニングの計算性能を向上させる集合通信ライブラリです。SMDDP ライブラリは次の機能を提供し、主要な集合通信演算の通信オーバーヘッドに対処します。

1. このライブラリは、 向けに`AllReduce`最適化されています AWS。 `AllReduce`は、分散データトレーニング中の各トレーニング反復の終了時に GPUs 間で勾配を同期するために使用される主要なオペレーションです。

1. このライブラリは、 向けに`AllGather`最適化されています AWS。 `AllGather`は、シャーディングデータ並列トレーニングで使用されるもう 1 つのキーオペレーションです。これは、SageMaker AI モデル並列処理 (SMP) ライブラリ、DeepSpeed Zero Redundancy Optimizer (ZeRO)、PyTorch Fully Sharded Data Parallelism (FSDP) などの一般的なライブラリが提供するメモリ効率の高いデータ並列処理手法です。

1. このライブラリは、 AWS ネットワークインフラストラクチャと Amazon EC2 インスタンストポロジを最大限に活用することで、node-to-node通信を実行します。

SMDDP ライブラリは、トレーニングクラスターをスケールした際に、ほぼ線形のスケーリング効率でパフォーマンスを向上させることで、トレーニング速度を向上させることができます。

**注記**  
SageMaker AI 分散トレーニングライブラリは、SageMaker トレーニングプラットフォーム内の PyTorch と Hugging Face の AWS 深層学習コンテナから入手できます。ライブラリを使うには、SageMaker Python SDK を使うか、SDK for Python (boto3) または AWS Command Line Interfaceから SageMaker API を使う必要があります。このドキュメントの説明と例では、SageMaker Python SDK を使った分散トレーニングライブラリの使用方法に焦点を当てています。

## AWS コンピューティングリソースとネットワークインフラストラクチャ用に最適化された SMDDP 集合通信オペレーション
<a name="data-parallel-collective-operations"></a>

SMDDP ライブラリは、 AWS コンピューティングリソース`AllReduce`とネットワークインフラストラクチャに最適化された および `AllGather` 集合オペレーションの実装を提供します。

### SMDDP `AllReduce` 集合演算
<a name="data-parallel-allreduce"></a>

SMDDP ライブラリは、`AllReduce` 演算とバックワードパス (逆伝播) を最適にオーバーラップさせて、GPU の使用率を大幅に向上させます。CPU と GPU 間のカーネル操作を最適化することで、ほぼ線形のスケーリング効率とトレーニングの高速化を実現します。GPU が勾配を計算している間に `AllReduce` を並列で実行し、追加の GPU サイクルは不要なため、トレーニングをより迅速に行えるようになります。
+  *CPU の活用*: CPU を使って勾配の `AllReduce` を実行し、このタスクを GPU からオフロードします。
+ *GPU 使用率の向上*: クラスターの GPU は、勾配の計算に集中し、トレーニング全体における GPUの使用率を向上させます。

以下は、SMDDP `AllReduce` 演算のワークフローの概要図です。

1. ライブラリは GPU (ワーカー) にランクを与えます。

1. ライブラリは各反復で、各グローバルバッチをワーカーの総数 (ワールドサイズ) で割り、小さなバッチ (バッチシャード) をワーカーに割り当てます。
   + グローバルバッチのサイズは `(number of nodes in a cluster) * (number of GPUs per node) * (per batch shard)` です。
   + バッチシャード (小さなバッチ) とは、反復ごとに各 GPU (ワーカー) に割り当てられるデータセットのサブセットです。

1. ライブラリは、各ワーカーでトレーニングスクリプトを起動します。

1. ライブラリは、ワーカーからのモデルの重みと勾配のコピーを、各反復の終了時に管理します。

1. ライブラリは、ワーカー間でモデルの重みと勾配を同期させて、1 つのトレーニング済みモデルに集約します。

次のアーキテクチャ図は、ライブラリが 3 ノードからなるクラスターに対してどのようにデータ並列処理を設定するかの例を示しています。

 

![\[SMDDP AllReduce とデータ並列処理アーキテクチャの図\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/distributed/data-parallel/sdp-architecture.png)


### SMDDP `AllGather` 集合演算
<a name="data-parallel-allgather"></a>

`AllGather` は、各ワーカーがまず入力バッファを処理した後、他のすべてのワーカーからの入力バッファを連結 (*gather*) して 1 つの出力バッファにまとめる集合演算です。

**注記**  
SMDDP `AllGather`集合オペレーションは、PyTorch v2.0.1 以降の `smdistributed-dataparallel>=2.0.1`および AWS Deep Learning Containers (DLC) で使用できます。

`AllGather` は、個々のワーカーがモデルの一部 (シャーディングされた層) を保持するシャーディングデータ並列処理など、分散トレーニング手法で多用されます。ワーカーは、フォワードパス (順伝播) とバックワードパス (逆伝播) の前に `AllGather` を呼び出して、シャーディング (分割) された層を再構築します。パラメータがすべて収集 (*all gather*) された後、フォワードパスとバックワードパスが続行されます。バックワードパス中、各ワーカーは `ReduceScatter` を呼び出して勾配を集約 (reduce) し、勾配シャードに分割 (scatter) して、対応するシャーディングされた層を更新します。シャーディングデータ並列処理におけるこれらの集合演算の役割の詳細については、[SMP ライブラリのシャーディングデータ並列処理の実装](https://docs.aws.amazon.com/sagemaker/latest/dg/model-parallel-extended-features-pytorch-sharded-data-parallelism.html)、DeepSpeed ドキュメントの「[ZeRO](https://deepspeed.readthedocs.io/en/latest/zero3.html#)」、および [PyTorch Fully Sharded Data Parallelism に関するブログ](https://engineering.fb.com/2021/07/15/open-source/fsdp/)を参照してください。

AllGather のような集合演算はすべてのイテレーションで呼び出されるため、GPU 通信オーバーヘッドの主な要因となります。これらの集合演算の計算速度が上がれば、収束に支障をきたすことなく、トレーニング時間の短縮に直結します。これを実現するために、SMDDP ライブラリは [P4d インスタンス](https://aws.amazon.com/ec2/instance-types/p4/)向けに最適化された `AllGather` を提供しています。

SMDDP `AllGather` は、次の手法を使用して P4d インスタンス上で計算性能を向上させます。

1. インスタンス間 (ノード間) のデータ転送は、メッシュトポロジーを用いた [Elastic Fabric Adapter (EFA) ネットワーク](https://aws.amazon.com/hpc/efa/)を介して行われます。EFA は AWS 、低レイテンシーで高スループットのネットワークソリューションです。ノード間ネットワーク通信のメッシュトポロジは、EFA と AWS ネットワークインフラストラクチャの特性により適しています。NCCL のリングトポロジーやツリートポロジーは複数のパケットホップを伴いますが、それと比較して SMDDP は 1 回のホップで済むため、複数のホップによるレイテンシーの蓄積を回避します。SMDDP は、メッシュトポロジー内の各通信ピアに負荷を分散させるネットワーク速度制御アルゴリズムを実装し、全体的なネットワークスループットを向上させます。

1. [NVIDIA GPUDirect RDMA テクノロジー (GDRCopy) に基づく低レイテンシーの GPU メモリコピーライブラリ](https://github.com/NVIDIA/gdrcopy)を採用して、ローカル NVLink と EFA ネットワークトラフィックを調整します。GDRCopy は、NVIDIA が提供する低レイテンシーの GPU メモリコピーライブラリです。CPU プロセスと GPU CUDA カーネル間の低レイテンシー通信を実現します。このテクノロジーを利用することで、SMDDP ライブラリはノード内およびノード間のデータ移動をパイプライン化できます。

1. GPU ストリーミングマルチプロセッサの使用を減らし、モデルカーネルを実行するための計算能力を増強します。P4d インスタンスと P4de インスタンスは NVIDIA A100 GPU を搭載し、それぞれに 108 のストリーミングマルチプロセッサがあります。NCCL は、集合演算を実行するために最大 24 のストリーミングマルチプロセッサを使用しますが、SMDDP が使用するストリーミングマルチプロセッサ数は 9 未満です。モデルの計算カーネルは、空いた分のストリーミングマルチプロセッサを使用して、より迅速に計算を処理します。

# サポートされているフレームワーク、 AWS リージョンおよびインスタンスタイプ
<a name="distributed-data-parallel-support"></a>

SageMaker AI 分散データ並列処理 (SMDDP) ライブラリを使用する前に、サポートされている ML フレームワークとインスタンスタイプを確認し、 AWS アカウントと に十分なクォータがあるかどうかを確認してください AWS リージョン。

## サポートされるフレームワーク
<a name="distributed-data-parallel-supported-frameworks"></a>

次の表には、SageMaker AI と SMDDP がサポートしている深層学習フレームワークとそのバージョンをまとめています。SMDDP ライブラリは [SageMaker AI フレームワークコンテナ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only)で利用でき、[SageMaker モデル並列処理 (SMP) ライブラリ v2 によって分散される Docker コンテナ](distributed-model-parallel-support-v2.md#distributed-model-parallel-supported-frameworks-v2)に統合されています。また、バイナリファイルとしてダウンロード可能です。

**注記**  
SMDDP ライブラリの最新の更新情報とリリースノートを確認するには、「[SageMaker AI データ並列処理ライブラリのリリースノート](data-parallel-release-notes.md)」を参照してください。

**Topics**
+ [PyTorch](#distributed-data-parallel-supported-frameworks-pytorch)
+ [PyTorch Lightning](#distributed-data-parallel-supported-frameworks-lightning)
+ [Hugging Face Transformer](#distributed-data-parallel-supported-frameworks-transformers)
+ [TensorFlow (非推奨)](#distributed-data-parallel-supported-frameworks-tensorflow)

### PyTorch
<a name="distributed-data-parallel-supported-frameworks-pytorch"></a>


| PyTorch バージョン | SMDDP ライブラリのバージョン | SMDDP がプリインストールされた SageMaker AI フレームワークコンテナイメージ | SMDDP がプリインストールされた SMP Docker イメージ | バイナリファイルの URL\$1\$1 | 
| --- | --- | --- | --- | --- | 
| v2.3.1 | smdistributed-dataparallel==v2.5.0 | 利用不可 | 658645717510.dkr.ecr.<us-west-2>.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.4.1/cu121/2024-10-09/smdistributed\$1dataparallel-2.5.0-cp311-cp311-linux\$1x86\$164.whl | 
| v2.3.0 | smdistributed-dataparallel==v2.3.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.3.0-gpu-py311-cu121-ubuntu20.04-sagemaker | 現時点では利用不可 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.3.0/cu121/2024-05-23/smdistributed\$1dataparallel-2.3.0-cp311-cp311-linux\$1x86\$164.whl | 
| v2.2.0 | smdistributed-dataparallel==v2.2.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.2.0-gpu-py310-cu121-ubuntu20.04-sagemaker | 658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.2.0-gpu-py310-cu121 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.2.0/cu121/2024-03-04/smdistributed\$1dataparallel-2.2.0-cp310-cp310-linux\$1x86\$164.whl | 
| 「v2.1.0」 | smdistributed-dataparallel==v2.1.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.1.0-gpu-py310-cu121-ubuntu20.04-sagemaker | 658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.1.2-gpu-py310-cu121 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.1.0/cu121/2024-02-04/smdistributed\$1dataparallel-2.1.0-cp310-cp310-linux\$1x86\$164.whl | 
| v2.0.1 | smdistributed-dataparallel==v2.0.1 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.0.1-gpu-py310-cu118-ubuntu20.04-sagemaker | 利用不可 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.0.1/cu118/2023-12-07/smdistributed\$1dataparallel-2.0.2-cp310-cp310-linux\$1x86\$164.whl | 
| v2.0.0 | smdistributed-dataparallel==v1.8.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.0.0-gpu-py310-cu118-ubuntu20.04-sagemaker | 利用不可 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.0.0/cu118/2023-03-20/smdistributed\$1dataparallel-1.8.0-cp310-cp310-linux\$1x86\$164.whl | 
| v1.13.1 | smdistributed-dataparallel==v1.7.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:1.13.1-gpu-py39-cu117-ubuntu20.04-sagemaker | 利用不可 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.13.1/cu117/2023-01-09/smdistributed\$1dataparallel-1.7.0-cp39-cp39-linux\$1x86\$164.whl | 
| v1.12.1 | smdistributed-dataparallel==v1.6.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:1.12.1-gpu-py38-cu113-ubuntu20.04-sagemaker | 利用不可 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.12.1/cu113/2022-12-05/smdistributed\$1dataparallel-1.6.0-cp38-cp38-linux\$1x86\$164.whl | 
| v1.12.0 | smdistributed-dataparallel==v1.5.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:1.12.0-gpu-py38-cu113-ubuntu20.04-sagemaker | 利用不可 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.12.0/cu113/2022-07-01/smdistributed\$1dataparallel-1.5.0-cp38-cp38-linux\$1x86\$164.whl | 
| v1.11.0 | smdistributed-dataparallel==v1.4.1 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:1.11.0-gpu-py38-cu113-ubuntu20.04-sagemaker | 利用不可 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.11.0/cu113/2022-04-14/smdistributed\$1dataparallel-1.4.1-cp38-cp38-linux\$1x86\$164.whl | 

\$1\$1 バイナリファイルの URL は、カスタムコンテナに SMDDP をインストールする場合に使用します。詳細については、「[SageMaker AI 分散データ並列ライブラリを使用して独自の Docker コンテナを作成する](data-parallel-bring-your-own-container.md)」を参照してください。

**注記**  
SMDDP ライブラリは、[SageMaker AI Framework Containers ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only)と [SMP Docker イメージ](distributed-model-parallel-support-v2.md) AWS リージョン が稼働している で使用できます。

**注記**  
SMDDP ライブラリ v1.4.0 以降は、PyTorch 分散 (torch.distributed) データ並列処理 (torch.parallel.DistributedDataParallel) のバックエンドとして機能します。この変更に伴い、PyTorch 分散パッケージの以下の [smdistributed API](https://sagemaker.readthedocs.io/en/stable/api/training/sdp_versions/latest/smd_data_parallel_pytorch.html#pytorch-api) は非推奨となります。  
`smdistributed.dataparallel.torch.distributed` を廃止しました。代わりに [torch.distributed](https://pytorch.org/docs/stable/distributed.html) パッケージを使用してください。
`smdistributed.dataparallel.torch.parallel.DistributedDataParallel` を廃止しました。代わりに「[torch.nn.parallel.DistributedDataParallel](https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html)」API を使用してください。
以前のバージョンのライブラリ (v1.3.0 以前) を使用する必要がある場合は、*SageMaker AI Python SDK ドキュメント*で [SageMaker AI 分散データ並列処理に関するアーカイブ済みドキュメント](https://sagemaker.readthedocs.io/en/stable/api/training/sdp_versions/latest.html#documentation-archive)を参照してください。

### PyTorch Lightning
<a name="distributed-data-parallel-supported-frameworks-lightning"></a>

SMDDP ライブラリは PyTorch Lightning に対応しており、次の PyTorch 用の SageMaker AI フレームワークコンテナと SMP Docker コンテナで使用できます。

**PyTorch Lightning v2**


| PyTorch Lightning バージョン | PyTorch バージョン | SMDDP ライブラリのバージョン | SMDDP がプリインストールされた SageMaker AI フレームワークコンテナイメージ | SMDDP がプリインストールされた SMP Docker イメージ | バイナリファイルの URL\$1\$1 | 
| --- | --- | --- | --- | --- | --- | 
| 2.2.5 | 2.3.0 | smdistributed-dataparallel==v2.3.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.3.0-gpu-py311-cu121-ubuntu20.04-sagemaker | 現時点では利用不可 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.3.0/cu121/2024-05-23/smdistributed\$1dataparallel-2.3.0-cp311-cp311-linux\$1x86\$164.whl | 
| 2.2.0 | 2.2.0 | smdistributed-dataparallel==v2.2.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.2.0-gpu-py310-cu121-ubuntu20.04-sagemaker | 658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.2.0-gpu-py310-cu121 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.2.0/cu121/2024-03-04/smdistributed\$1dataparallel-2.2.0-cp310-cp310-linux\$1x86\$164.whl | 
| 2.1.2 | 2.1.0 | smdistributed-dataparallel==v2.1.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.1.0-gpu-py310-cu121-ubuntu20.04-sagemaker | 658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.1.2-gpu-py310-cu121 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.1.0/cu121/2024-02-04/smdistributed\$1dataparallel-2.1.0-cp310-cp310-linux\$1x86\$164.whl | 
| 2.1.0 | 2.0.1 | smdistributed-dataparallel==v2.0.1 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.0.1-gpu-py310-cu118-ubuntu20.04-sagemaker | 利用不可 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.0.1/cu118/2023-12-07/smdistributed\$1dataparallel-2.0.2-cp310-cp310-linux\$1x86\$164.whl | 

**PyTorch Lightning v1**


| PyTorch Lightning バージョン | PyTorch バージョン | SMDDP ライブラリのバージョン | SMDDP がプリインストールされた SageMaker AI フレームワークコンテナイメージ | バイナリファイルの URL \$1\$1 | 
| --- | --- | --- | --- | --- | 
|  1.7.2 1.7.0 1.6.4 1.6.3 1.5.10  | 1.12.0 | smdistributed-dataparallel==v1.5.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:1.12.0-gpu-py38-cu113-ubuntu20.04-sagemaker | https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.12.0/cu113/2022-07-01/smdistributed\$1dataparallel-1.5.0-cp38-cp38-linux\$1x86\$164.whl | 

\$1\$1 バイナリファイルの URL は、カスタムコンテナに SMDDP をインストールする場合に使用します。詳細については、「[SageMaker AI 分散データ並列ライブラリを使用して独自の Docker コンテナを作成する](data-parallel-bring-your-own-container.md)」を参照してください。

**注記**  
PyTorch Lightning と Lightning Bolts などのユーティリティライブラリは、PyTorch DLC にはプリインストールされていません。[Step 2](https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-use-api.html#data-parallel-framework-estimator) で SageMaker AI PyTorch 推定器を作成してトレーニングジョブリクエストを送信する場合、SageMaker AI PyTorch トレーニングコンテナに `pytorch-lightning` および `lightning-bolts` をインストールするために `requirements.txt` を指定する必要があります。  

```
# requirements.txt
pytorch-lightning
lightning-bolts
```
トレーニングスクリプトやジョブ送信と一緒に `requirements.txt` ファイルを配置するソースディレクトリを指定する方法の詳細については、Amazon SageMaker AI Python SDK ドキュメントの「[Using third-party libraries](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#id12)」を参照してください。

### Hugging Face Transformer
<a name="distributed-data-parallel-supported-frameworks-transformers"></a>

Hugging Face の AWS 深層学習コンテナは、PyTorch と TensorFlow の SageMaker トレーニングコンテナをベースイメージとして使用します。Hugging Face Transformers ライブラリのバージョンとペアになる PyTorch と TensorFlow のバージョンを調べるには、最新の [Hugging Face コンテナ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#huggingface-training-containers)と[以前の Hugging Face コンテナバージョン](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#prior-hugging-face-container-versions)を参照してください。

### TensorFlow (非推奨)
<a name="distributed-data-parallel-supported-frameworks-tensorflow"></a>

**重要**  
SMDDP ライブラリは TensorFlow のサポートを終了し、v2.11.0 より新しい TensorFlow の DLC では使用できなくなりました。次の表には、SMDDP ライブラリがインストールされている以前の TensorFlow 用 DLC をまとめています。


| TensorFlow バージョン | SMDDP ライブラリのバージョン | 
| --- | --- | 
| 2.9.1、2.10.1、2.11.0 |  smdistributed-dataparallel==v1.4.1  | 
| 2.8.3 |  smdistributed-dataparallel==v1.3.0  | 

## AWS リージョン
<a name="distributed-data-parallel-availablity-zone"></a>

SMDDP ライブラリは、 AWS リージョン [AWS Deep Learning Containers for SageMaker AI ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only)と [SMP Docker イメージ](distributed-model-parallel-support-v2.md)が稼働しているすべての で使用できます。

## サポートされるインスタンスタイプ
<a name="distributed-data-parallel-supported-instance-types"></a>

SMDDP ライブラリには、次のいずれかのインスタンスタイプが必要です。


| インスタンスタイプ | 
| --- | 
| ml.p3dn.24xlarge\$1 | 
| ml.p4d.24xlarge | 
| ml.p4de.24xlarge | 

**ヒント**  
EFA 対応のインスタンスタイプで分散トレーニングを適切に実行するには、VPC のセキュリティグループとの間のインバウンドトラフィックとアウトバウンドトラフィックをすべて許可するように設定し、インスタンス間のトラフィックを有効にする必要があります。セキュリティグループのルールを設定する方法については、「*Amazon EC2 ユーザーガイド*」の「[ステップ 1: EFA 対応のセキュリティグループを準備する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-security)」を参照してください。

**重要**  
\$1 SMDDP ライブラリは、P3 インスタンスにおける集合通信演算の最適化のサポートを終了しました。SMDDP の最適化した `AllReduce` 集合演算を引き続き `ml.p3dn.24xlarge` インスタンスで使用できますが、このインスタンスタイプにおけるパフォーマンス向上のための開発サポートは今後は提供されません。SMDDP の最適化した `AllGather` 集合演算は P4 インスタンスでのみ使用できます。

インスタンスタイプの仕様については、**「Amazon EC2 インスタンスタイプ」ページ**の[「高速コンピューティング」](https://aws.amazon.com/ec2/instance-types/)のセクションを参照してください。インスタンスの料金の詳細については、[「Amazon SageMaker の料金」](https://aws.amazon.com/sagemaker/pricing/)を参照してください。

次のようなエラーメッセージが表示された場合は、「[Request a service quota increase for SageMaker AI resources](https://docs.aws.amazon.com/sagemaker/latest/dg/regions-quotas.html#service-limit-increase-request-procedure)」の手順に従います。

```
ResourceLimitExceeded: An error occurred (ResourceLimitExceeded) when calling
the CreateTrainingJob operation: The account-level service limit 'ml.p3dn.24xlarge
for training job usage' is 0 Instances, with current utilization of 0 Instances
and a request delta of 1 Instances.
Please contact AWS support to request an increase for this limit.
```

# SageMaker AI 分散データ並列処理ライブラリを使用した分散トレーニング
<a name="data-parallel-modify-sdp"></a>

SageMaker AI 分散データ並列処理 (SMDDP) ライブラリは、使いやすさと PyTorch とのシームレスな統合を目指して設計されています。

SageMaker AI の SMDDP ライブラリを使用して深層学習モデルをトレーニングする場合、トレーニングスクリプトの記述とモデルのトレーニングに専念できます。

まず、 AWS向けに最適化された集合演算を使用するために、SMDDP ライブラリをインポートしてください。以下のトピックでは、最適化したい集合演算に応じて、トレーニングスクリプトに何を追加すればよいかを説明します。

**Topics**
+ [SMDDP 集合演算を使用するようにトレーニングスクリプトを適応させる](data-parallel-modify-sdp-select-framework.md)
+ [SageMaker Python SDK を使用して SMDDP で分散トレーニングジョブを開始する](data-parallel-use-api.md)

# SMDDP 集合演算を使用するようにトレーニングスクリプトを適応させる
<a name="data-parallel-modify-sdp-select-framework"></a>

このセクションで紹介するトレーニングスクリプトのサンプルは簡略化されており、SageMaker AI 分散データ並列処理 (SMDDP) ライブラリをトレーニングスクリプトで有効にするために必要な変更点だけを取り上げています。SMDDP ライブラリを使用して分散トレーニングジョブを実行する方法を示すエンドツーエンドの Jupyter Notebook の例については、「[Amazon SageMaker AI データ並列処理ライブラリの例](distributed-data-parallel-v2-examples.md)」を参照してください。

**Topics**
+ [PyTorch トレーニングスクリプトで SMDDP ライブラリを使用する](data-parallel-modify-sdp-pt.md)
+ [PyTorch Lightning トレーニングスクリプトで SMDDP ライブラリを使用する](data-parallel-modify-sdp-pt-lightning.md)
+ [TensorFlow トレーニングスクリプトで SMDDP ライブラリを使用する (非推奨)](data-parallel-modify-sdp-tf2.md)

# PyTorch トレーニングスクリプトで SMDDP ライブラリを使用する
<a name="data-parallel-modify-sdp-pt"></a>

SageMaker AI 分散データ並列処理 (SMDDP) ライブラリ v1.4.0 以降は、[PyTorch の分散パッケージ](https://pytorch.org/tutorials/beginner/dist_overview.html)用のバックエンドオプションとして使用できます。SMDDP の `AllReduce` および `AllGather` 集合演算を使用するには、トレーニングスクリプトの冒頭で SMDDP ライブラリをインポートし、プロセスグループの初期化中に SMDDP を PyTorch 分散モジュールのバックエンドとして設定するだけで済みます。1 行でバックエンドを指定するだけで、ネイティブの PyTorch 分散モジュールはすべてそのまま残すことができ、トレーニングスクリプト全体を変更する必要はありません。次のコードスニペットは、PyTorch ベースの分散トレーニングパッケージ ([PyTorch Distributed Data Parallel (DDP)](https://pytorch.org/docs/stable/notes/ddp.html)、[PyTorch Fully Sharded Data Parallelism (FSDP)](https://pytorch.org/docs/stable/fsdp.html)、[DeepSpeed](https://github.com/microsoft/DeepSpeed)、[Megatron-DeepSpeed](https://github.com/microsoft/Megatron-DeepSpeed)) のバックエンドとして SMDDP ライブラリを使用する方法を示しています。

## PyTorch DDP または FSDP の場合
<a name="data-parallel-enable-for-ptddp-ptfsdp"></a>

プロセスグループを次のように初期化します。

```
import torch.distributed as dist
import smdistributed.dataparallel.torch.torch_smddp

dist.init_process_group(backend="smddp")
```

**注記**  
(PyTorch DDP ジョブのみ) `smddp` バックエンドは、現時点では、`torch.distributed.new_group()` API によるサブプロセスグループの作成には対応していません。`smddp` バックエンドは、`NCCL` や `Gloo` などの他のプロセスグループバックエンドと同時に使用することはできません。

## DeepSpeed または Megatron-DeepSpeed の場合
<a name="data-parallel-enable-for-deepspeed"></a>

プロセスグループを次のように初期化します。

```
import deepspeed
import smdistributed.dataparallel.torch.torch_smddp

deepspeed.init_distributed(dist_backend="smddp")
```

**注記**  
SMDDP の `AllGather` を [SageMaker Python SDK を使用して SMDDP で分散トレーニングジョブを開始する](data-parallel-use-api.md) の `mpirun` ベースのランチャー (`smdistributed` と `pytorchddp`) で使用するには、トレーニングスクリプトで次の環境変数を設定する必要があります。  

```
export SMDATAPARALLEL_OPTIMIZE_SDP=true
```

PyTorch FSDP トレーニングスクリプトの記述に関する一般的なガイダンスについては、PyTorch ドキュメントの「[Advanced Model Training with Fully Sharded Data Parallel (FSDP)](https://pytorch.org/tutorials/intermediate/FSDP_adavnced_tutorial.html)」を参照してください。

PyTorch DDP トレーニングスクリプトの記述に関する一般的なガイダンスについては、PyTorch ドキュメントの「[Getting started with distributed data parallel](https://pytorch.org/tutorials/intermediate/ddp_tutorial.html)」を参照してください。

トレーニングスクリプトの調整が完了したら、[SageMaker Python SDK を使用して SMDDP で分散トレーニングジョブを開始する](data-parallel-use-api.md) に進みます。

# PyTorch Lightning トレーニングスクリプトで SMDDP ライブラリを使用する
<a name="data-parallel-modify-sdp-pt-lightning"></a>

[PyTorch Lightning](https://pytorch-lightning.readthedocs.io/en/latest/starter/introduction.html) トレーニングスクリプトを持ち込んで SageMaker AI で分散データ並列トレーニングジョブを実行したい場合は、トレーニングスクリプトに最小限の変更を加えてトレーニングジョブを実行できます。必要な変更として、例えば、`smdistributed.dataparallel` ライブラリの PyTorch モジュールをインポートし、SageMaker トレーニングツールキットによって事前設定された SageMaker AI 環境変数を受け入れるように PyTorch Lightning の環境変数を設定して、プロセスグループのバックエンドを `"smddp"` に設定して SMDDP をライブラリを有効にします。詳細については、コード例を使って各ステップごとに説明します。

**注記**  
PyTorch Lightning サポートは SageMaker AI データ並列ライブラリ v1.5.0 以降で利用できます。

## PyTorch Lightning == v2.1.0 および PyTorch == 2.0.1
<a name="smddp-pt-201-lightning-210"></a>

1. `pytorch_lightning` ライブラリと `smdistributed.dataparallel.torch` モジュールをインポートします。

   ```
   import lightning as pl
   import smdistributed.dataparallel.torch.torch_smddp
   ```

1. [LightningEnvironment](https://pytorch-lightning.readthedocs.io/en/stable/api/pytorch_lightning.plugins.environments.LightningEnvironment.html) をインスタンス化します。

   ```
   from lightning.fabric.plugins.environments.lightning import LightningEnvironment
   
   env = LightningEnvironment()
   env.world_size = lambda: int(os.environ["WORLD_SIZE"])
   env.global_rank = lambda: int(os.environ["RANK"])
   ```

1. **PyTorch DDP の場合** – [DDPStrategy](https://lightning.ai/docs/pytorch/stable/api/lightning.pytorch.strategies.DDPStrategy.html) クラスのオブジェクトを作成し、`process_group_backend` には `"smddp"`、`accelerator` には `"gpu"` を指定します。このオブジェクトを [Trainer](https://pytorch-lightning.readthedocs.io/en/stable/common/trainer.html) クラスに渡します。

   ```
   import lightning as pl
   from lightning.pytorch.strategies import DDPStrategy
   
   ddp = DDPStrategy(
       cluster_environment=env, 
       process_group_backend="smddp", 
       accelerator="gpu"
   )
   
   trainer = pl.Trainer(
       max_epochs=200, 
       strategy=ddp, 
       devices=num_gpus, 
       num_nodes=num_nodes
   )
   ```

   **PyTorch FSDP の場合** – [FSDPStrategy](https://lightning.ai/docs/pytorch/stable/api/lightning.pytorch.strategies.FSDPStrategy.html) クラスのオブジェクトを (選択した[ラッピングポリシー](https://pytorch.org/docs/stable/fsdp.html)で) 作成し、`process_group_backend` には `"smddp"`、`accelerator` には `"gpu"` を指定します。このオブジェクトを [Trainer](https://pytorch-lightning.readthedocs.io/en/stable/common/trainer.html) クラスに渡します。

   ```
   import lightning as pl
   from lightning.pytorch.strategies import FSDPStrategy
   
   from functools import partial
   from torch.distributed.fsdp.wrap import size_based_auto_wrap_policy
   
   policy = partial(
       size_based_auto_wrap_policy, 
       min_num_params=10000
   )
   
   fsdp = FSDPStrategy(
       auto_wrap_policy=policy,
       process_group_backend="smddp", 
       cluster_environment=env
   )
   
   trainer = pl.Trainer(
       max_epochs=200, 
       strategy=fsdp, 
       devices=num_gpus, 
       num_nodes=num_nodes
   )
   ```

トレーニングスクリプトの調整が完了したら、[SageMaker Python SDK を使用して SMDDP で分散トレーニングジョブを開始する](data-parallel-use-api.md) に進みます。

**注記**  
[SageMaker Python SDK を使用して SMDDP で分散トレーニングジョブを開始する](data-parallel-use-api.md) で SageMaker AI PyTorch 推定器を作成してトレーニングジョブリクエストを送信する場合、SageMaker AI PyTorch トレーニングコンテナに `pytorch-lightning` および `lightning-bolts` をインストールするために `requirements.txt` を指定する必要があります。  

```
# requirements.txt
pytorch-lightning
lightning-bolts
```
トレーニングスクリプトやジョブ送信と一緒に `requirements.txt` ファイルを配置するソースディレクトリを指定する方法の詳細については、Amazon SageMaker AI Python SDK ドキュメントの「[Using third-party libraries](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#id12)」を参照してください。

# TensorFlow トレーニングスクリプトで SMDDP ライブラリを使用する (非推奨)
<a name="data-parallel-modify-sdp-tf2"></a>

**重要**  
SMDDP ライブラリは TensorFlow のサポートを終了し、v2.11.0 より新しい TensorFlow の DLC では使用できなくなりました。SMDDP ライブラリがインストールされている以前の TensorFlow DLC を調べるには、「[サポートされるフレームワーク](distributed-data-parallel-support.md#distributed-data-parallel-supported-frameworks)」を参照してください。

次のステップは、TensorFlow トレーニングスクリプトを変更して SageMaker AI の分散データ並列ライブラリを利用する方法を示しています。  

ライブラリの API は Horovod の API と同様になるように設計されています。ライブラリが TensorFlow に提供する各 API の詳細については、[SageMaker AI 分散データ並列 TensorFlow API ドキュメント](https://sagemaker.readthedocs.io/en/stable/api/training/smd_data_parallel.html#api-documentation)を参照してください。

**注記**  
SageMaker AI 分散データ並列は、`tf.keras` モジュールを除く `tf` コアモジュールで構成される TensorFlow トレーニングスクリプトに適応可能です。SageMaker AI 分散データ並列は、Keras 実装を使った TensorFlow はサポートしていません。

**注記**  
SageMaker AI の分散データ並列処理ライブラリは、Automatic Mixed Precision (AMP) に標準対応しています。AMP を有効にするには、トレーニングスクリプトにフレームワークレベルの変更を加える以外、特別なアクションは必要ありません。勾配が FP16 の場合、SageMaker AI データ並列処理ライブラリは、FP16 で `AllReduce` オペレーションを実行します。トレーニングスクリプトへの AMP API の実装に関する詳細は、次のリソースを参照してください。  
「[Frameworks - TensorFlow](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html#tensorflow)」(「NVIDIA Deep Learning Performance ドキュメント」)
[深層学習の自動混合精度](https://developer.nvidia.com/automatic-mixed-precision) (NVIDIA デベロッパードキュメント)**
[TensorFlow 混合精度 API](https://www.tensorflow.org/guide/mixed_precision) (TensorFlow ドキュメント)**

1. ライブラリの TensorFlow クライアントをインポートし、初期化します。

   ```
   import smdistributed.dataparallel.tensorflow as sdp 
   sdp.init()
   ```

1. 各 GPU を 1 つの `smdistributed.dataparallel` プロセスに `local_rank` を付けて固定します。これは、特定のノード内のプロセスの相対ランクを参照します。`sdp.tensorflow.local_rank()` API により、デバイスのローカルランクを取得できます。リーダーノードはランク 0 で、ワーカーノードはランク 1、2、3 などとなります。これは、次のコードブロックで `sdp.local_rank()` として呼び出されます。`set_memory_growth` は SageMaker AI 分散とは直接関係ありませんが、TensorFlow を使用した分散トレーニングのために設定する必要があります。

   ```
   gpus = tf.config.experimental.list_physical_devices('GPU')
   for gpu in gpus:
       tf.config.experimental.set_memory_growth(gpu, True)
   if gpus:
       tf.config.experimental.set_visible_devices(gpus[sdp.local_rank()], 'GPU')
   ```

1. 学習レートをワーカー数でスケールします。`sdp.tensorflow.size()` API により、クラスター内のワーカー数を取得できます。これは、次のコードブロックで `sdp.size()` として呼び出されます。

   ```
   learning_rate = learning_rate * sdp.size()
   ```

1. ライブラリの `DistributedGradientTape` を使用して、トレーニング中の `AllReduce` オペレーションを最適化します。これは `tf.GradientTape` をラップします。  

   ```
   with tf.GradientTape() as tape:
         output = model(input)
         loss_value = loss(label, output)
       
   # SageMaker AI data parallel: Wrap tf.GradientTape with the library's DistributedGradientTape
   tape = sdp.DistributedGradientTape(tape)
   ```

1. 初期モデル変数をリーダーノード (ランク 0) からすべてのワーカーノード (ランク 1～n) にブロードキャストします。これは、すべてのワーカーランクにわたる一貫した初期化を保証するために必要です。モデル変数とオプティマイザ変数が初期化された後、`sdp.tensorflow.broadcast_variables` API を使用します。これは、次のコードブロックで `sdp.broadcast_variables()` として呼び出されます。

   ```
   sdp.broadcast_variables(model.variables, root_rank=0)
   sdp.broadcast_variables(opt.variables(), root_rank=0)
   ```

1. 最後に、チェックポイントをリーダーノードのみに保存するようにスクリプトを変更します。リーダーノードには同期されたモデルがあります。これにより、ワーカーノードがチェックポイントを上書きしてチェックポイントを破損する可能性を回避できます。

   ```
   if sdp.rank() == 0:
       checkpoint.save(checkpoint_dir)
   ```

次に、ライブラリを使用した分散トレーニングの TensorFlow トレーニングスクリプトの例を示します。

```
import tensorflow as tf

# SageMaker AI data parallel: Import the library TF API
import smdistributed.dataparallel.tensorflow as sdp

# SageMaker AI data parallel: Initialize the library
sdp.init()

gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus:
    tf.config.experimental.set_memory_growth(gpu, True)
if gpus:
    # SageMaker AI data parallel: Pin GPUs to a single library process
    tf.config.experimental.set_visible_devices(gpus[sdp.local_rank()], 'GPU')

# Prepare Dataset
dataset = tf.data.Dataset.from_tensor_slices(...)

# Define Model
mnist_model = tf.keras.Sequential(...)
loss = tf.losses.SparseCategoricalCrossentropy()

# SageMaker AI data parallel: Scale Learning Rate
# LR for 8 node run : 0.000125
# LR for single node run : 0.001
opt = tf.optimizers.Adam(0.000125 * sdp.size())

@tf.function
def training_step(images, labels, first_batch):
    with tf.GradientTape() as tape:
        probs = mnist_model(images, training=True)
        loss_value = loss(labels, probs)

    # SageMaker AI data parallel: Wrap tf.GradientTape with the library's DistributedGradientTape
    tape = sdp.DistributedGradientTape(tape)

    grads = tape.gradient(loss_value, mnist_model.trainable_variables)
    opt.apply_gradients(zip(grads, mnist_model.trainable_variables))

    if first_batch:
       # SageMaker AI data parallel: Broadcast model and optimizer variables
       sdp.broadcast_variables(mnist_model.variables, root_rank=0)
       sdp.broadcast_variables(opt.variables(), root_rank=0)

    return loss_value

...

# SageMaker AI data parallel: Save checkpoints only from master node.
if sdp.rank() == 0:
    checkpoint.save(checkpoint_dir)
```

トレーニングスクリプトの調整が完了したら、「[SageMaker Python SDK を使用して SMDDP で分散トレーニングジョブを開始する](data-parallel-use-api.md)」に進みます。

# SageMaker Python SDK を使用して SMDDP で分散トレーニングジョブを開始する
<a name="data-parallel-use-api"></a>

「[SMDDP 集合演算を使用するようにトレーニングスクリプトを適応させる](data-parallel-modify-sdp-select-framework.md)」で適応させたスクリプトを使用して分散トレーニングジョブを実行するには、SageMaker Python SDK のフレームワークや汎用推定器を使用し、準備したトレーニングスクリプトをエントリポイントスクリプトおよび分散トレーニング設定として指定します。

このページでは、[SageMaker AI Python SDK](https://sagemaker.readthedocs.io/en/stable/api/training/index.html)の 2 とおりの使い方を説明します。
+ SageMaker AI で分散型トレーニングジョブを迅速に導入したい場合は、SageMaker AI の [PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html#sagemaker.pytorch.estimator.PyTorch) または [TensorFlow](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator) フレームワーク推定クラスを設定します。フレームワーク推定器はトレーニングスクリプトを取得し、`framework_version` パラメータに指定された値を指定し、[pre-built PyTorch or TensorFlow Deep Learning Containers (DLC)](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) の適切な画像 URI を自動的に照合します。
+ 事前構築済みコンテナのいずれかの拡張や、カスタムコンテナを構築し SageMaker AI で独自の ML 環境を作成する場合は、SageMaker AI 汎用 `Estimator` クラスを使用して、Amazon Elastic Container Registry (Amazon ECR) でホストされているカスタム Docker コンテナのイメージ URI を指定します。

トレーニングデータセットは、トレーニングジョブを起動する の Amazon S3  [または Amazon FSx for Lustre](https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html) AWS リージョン に保存する必要があります。Jupyter Notebook を使用する場合は、SageMaker ノートブックインスタンスまたは SageMaker Studio Classic アプリケーションが同じ AWS リージョンで実行されている必要があります。トレーニングデータの保存の詳細については、「[SageMaker Python SDK data inputs](https://sagemaker.readthedocs.io/en/stable/overview.html#use-file-systems-as-training-input)」ドキュメントを参照してください。

**ヒント**  
トレーニングのパフォーマンスを向上させるために、Amazon S3 の代わりに Amazon FSx for Lustre を使用することをお勧めします。Amazon FSx は Amazon S3 よりも高スループットで、低レイテンシーです。

**ヒント**  
EFA 対応のインスタンスタイプで分散トレーニングを適切に実行するには、VPC のセキュリティグループとの間のインバウンドトラフィックとアウトバウンドトラフィックをすべて許可するように設定し、インスタンス間のトラフィックを有効にする必要があります。セキュリティグループのルールを設定する方法については、「*Amazon EC2 ユーザーガイド*」の「[ステップ 1: EFA 対応のセキュリティグループを準備する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-security)」を参照してください。

トレーニングスクリプトの分散トレーニングジョブを実行する方法については、以下のトピックの中から選択して手順を確認してください。トレーニングジョブを起動した後、[Amazon SageMaker デバッガー](train-debugger.md) または Amazon CloudWatch を使ってシステム使用率とモデルパフォーマンスをモニタリングできます。

技術的な詳細については、次のトピックの手順に従ってください。また、開始するには「[Amazon SageMaker AI データ並列処理ライブラリの例](distributed-data-parallel-v2-examples.md)」を試してみることをお勧めします。

**Topics**
+ [SageMaker Python SDK で PyTorch フレームワーク推定器を使用する](data-parallel-framework-estimator.md)
+ [SageMaker AI 汎用推定器を使用して構築済みの DLC コンテナを拡張する](data-parallel-use-python-skd-api.md)
+ [SageMaker AI 分散データ並列ライブラリを使用して独自の Docker コンテナを作成する](data-parallel-bring-your-own-container.md)

# SageMaker Python SDK で PyTorch フレームワーク推定器を使用する
<a name="data-parallel-framework-estimator"></a>

分散トレーニングを開始するには、SageMaker AI フレームワーク推定器 ([https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html#sagemaker.pytorch.estimator.PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html#sagemaker.pytorch.estimator.PyTorch) または [https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator)) に `distribution` 引数を追加します。詳細については、次の選択肢から、SageMaker AI 分散データ並列処理 (SMDDP) ライブラリでサポートされているフレームワークのいずれかを選択してください。

------
#### [ PyTorch ]

PyTorch 分散トレーニングを開始するには、次のランチャーオプションを使用できます。
+ `pytorchddp` – このオプションは、`mpirun` を実行し、SageMaker AI で PyTorch 分散トレーニングを実行するために必要な環境変数を設定します。このオプションを使用するには、次のディクショナリを `distribution` パラメータに渡してください。

  ```
  { "pytorchddp": { "enabled": True } }
  ```
+ `torch_distributed` – このオプションは、`torchrun` を実行し、SageMaker AI で PyTorch 分散トレーニングを実行するために必要な環境変数を設定します。このオプションを使用するには、次のディクショナリを `distribution` パラメータに渡してください。

  ```
  { "torch_distributed": { "enabled": True } }
  ```
+ `smdistributed` – このオプションも `mpirun` を実行しますが、`smddprun` を使用して、SageMaker AI で PyTorch 分散トレーニングを実行するために必要な環境変数を設定します。

  ```
  { "smdistributed": { "dataparallel": { "enabled": True } } }
  ```

NCCL の `AllGather` を SMDDP の `AllGather` に置き換えることにした場合は、3 つのオプションすべてを使用できます。ユースケースに合ったオプションを選択してください。

NCCL の `AllReduce` を SMDDP の `AllReduce` に置き換えることにした場合は、`mpirun` ベースのオプションのいずれか (`smdistributed` または `pytorchddp`)を選択する必要があります。次のように MPI オプションを追加することもできます。

```
{ 
    "pytorchddp": {
        "enabled": True, 
        "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"
    }
}
```

```
{ 
    "smdistributed": { 
        "dataparallel": {
            "enabled": True, 
            "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"
        }
    }
}
```

次のコード例は、分散トレーニングのオプションを指定した PyTorch 推定器の基本構造を示しています。

```
from sagemaker.pytorch import PyTorch

pt_estimator = PyTorch(
    base_job_name="training_job_name_prefix",
    source_dir="subdirectory-to-your-code",
    entry_point="adapted-training-script.py",
    role="SageMakerRole",
    py_version="py310",
    framework_version="2.0.1",

    # For running a multi-node distributed training job, specify a value greater than 1
    # Example: 2,3,4,..8
    instance_count=2,

    # Instance types supported by the SageMaker AI data parallel library: 
    # ml.p4d.24xlarge, ml.p4de.24xlarge
    instance_type="ml.p4d.24xlarge",

    # Activate distributed training with SMDDP
    distribution={ "pytorchddp": { "enabled": True } }  # mpirun, activates SMDDP AllReduce OR AllGather
    # distribution={ "torch_distributed": { "enabled": True } }  # torchrun, activates SMDDP AllGather
    # distribution={ "smdistributed": { "dataparallel": { "enabled": True } } }  # mpirun, activates SMDDP AllReduce OR AllGather
)

pt_estimator.fit("s3://bucket/path/to/training/data")
```

**注記**  
PyTorch Lightning と Lightning Bolts などのユーティリティライブラリは、SageMaker AI PyTorch DLC にはプリインストールされていません。次の `requirements.txt` ファイルを作成し、トレーニングスクリプトを保存するソースディレクトリに保存します。  

```
# requirements.txt
pytorch-lightning
lightning-bolts
```
例えば、ツリー構造のディレクトリは次のようになります。  

```
├── pytorch_training_launcher_jupyter_notebook.ipynb
└── sub-folder-for-your-code
    ├──  adapted-training-script.py
    └──  requirements.txt
```
トレーニングスクリプトやジョブ送信と一緒に `requirements.txt` ファイルを配置するソースディレクトリを指定する方法の詳細については、Amazon SageMaker AI Python SDK ドキュメントの「[Using third-party libraries](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#id12)」を参照してください。

**SMDDP 集合演算を有効にし、適切な分散トレーニングランチャーオプションを使用するための考慮事項**
+ SMDDP の `AllReduce` と SMDDP の `AllGather` は、現時点では相互互換性がありません。
+ SMDDP の `AllReduce` は、`mpirun` ベースのランチャーである `smdistributed` または `pytorchddp` を使用する場合はデフォルトで有効になり、NCCL の `AllGather` が使用されます。
+ SMDDP の `AllGather` は `torch_distributed` ランチャーの使用時にデフォルトで有効になり、`AllReduce` は NCCL にフォールバックされます。
+ SMDDP の `AllGather` は、`mpirun` ベースのランチャーを使用する場合も、次のように追加の環境変数を設定することで有効化できます。

  ```
  export SMDATAPARALLEL_OPTIMIZE_SDP=true
  ```

------
#### [ TensorFlow ]

**重要**  
SMDDP ライブラリは TensorFlow のサポートを終了し、v2.11.0 より新しい TensorFlow の DLC では使用できなくなりました。SMDDP ライブラリがインストールされている以前の TensorFlow DLC を調べるには、「[TensorFlow (非推奨)](distributed-data-parallel-support.md#distributed-data-parallel-supported-frameworks-tensorflow)」を参照してください。

```
from sagemaker.tensorflow import TensorFlow

tf_estimator = TensorFlow(
    base_job_name = "training_job_name_prefix",
    entry_point="adapted-training-script.py",
    role="SageMakerRole",
    framework_version="2.11.0",
    py_version="py38",

    # For running a multi-node distributed training job, specify a value greater than 1
    # Example: 2,3,4,..8
    instance_count=2,

    # Instance types supported by the SageMaker AI data parallel library: 
    # ml.p4d.24xlarge, ml.p3dn.24xlarge, and ml.p3.16xlarge
    instance_type="ml.p3.16xlarge",

    # Training using the SageMaker AI data parallel distributed training strategy
    distribution={ "smdistributed": { "dataparallel": { "enabled": True } } }
)

tf_estimator.fit("s3://bucket/path/to/training/data")
```

------

# SageMaker AI 汎用推定器を使用して構築済みの DLC コンテナを拡張する
<a name="data-parallel-use-python-skd-api"></a>

SageMaker AI の構築済みコンテナはカスタマイズまたは拡張が可能で、構築済み SageMaker AI Docker イメージではサポートされていないアルゴリズムやモデルに対するどのような追加の機能要件でも扱うことができます。構築済みコンテナを拡張する方法の例については、「[構築済みコンテナを拡張する](https://docs.aws.amazon.com/sagemaker/latest/dg/prebuilt-containers-extend.html)」を参照してください。

ビルド済みコンテナの拡張や、独自のコンテナをライブラリを使用するよう適応させるには、「[サポートされるフレームワーク](distributed-data-parallel-support.md#distributed-data-parallel-supported-frameworks)」に記載されているイメージのいずれかを使用する必要があります。

**注記**  
TensorFlow 2.4.1 および PyTorch 1.8.1 から、SageMaker AI フレームワーク DLC は EFA 対応のインスタンスタイプをサポートしています。TensorFlow 2.4.1 以降および PyTorch 1.8.1 以降を含む DLC イメージを使用することをお勧めします。

例えば、PyTorch を使用している場合、Dockerfile には次のような `FROM` ステートメントを記述する必要があります。

```
# SageMaker AI PyTorch image
FROM 763104351884.dkr.ecr.<aws-region>.amazonaws.com/pytorch-training:<image-tag>

ENV PATH="/opt/ml/code:${PATH}"

# this environment variable is used by the SageMaker AI PyTorch container to determine our user code directory.
ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code

# /opt/ml and all subdirectories are utilized by SageMaker AI, use the /code subdirectory to store your user code.
COPY train.py /opt/ml/code/train.py

# Defines cifar10.py as script entrypoint
ENV SAGEMAKER_PROGRAM train.py
```

[SageMaker Training toolkit](https://github.com/aws/sagemaker-training-toolkit) と SageMaker AI 分散データ並列ライブラリのバイナリファイルを使用して、SageMaker AI で動作するように独自の Docker コンテナをさらにカスタマイズできます。詳細については、次のセクションを参照してください。

# SageMaker AI 分散データ並列ライブラリを使用して独自の Docker コンテナを作成する
<a name="data-parallel-bring-your-own-container"></a>

トレーニング用に独自の Docker コンテナを構築して SageMaker AI データ並列ライブラリを使用するには、SageMaker AI 分散並列ライブラリの正しい依存関係とバイナリファイルを Dockerfile に含める必要があります。このセクションでは、データ並列ライブラリを使用して SageMaker AI の分散トレーニングを行うための最小限に依存関係を含む完全な Dockerfile を作成する方法について説明します。

**注記**  
SageMaker AI データ並列ライブラリをバイナリとして使用するこのカスタム Docker オプションは PyTorch でのみ使用できます。

**SageMaker トレーニングツールキットとデータ並列ライブラリを使用して Dockerfile を作成する**

1. [NVIDIA CUDA](https://hub.docker.com/r/nvidia/cuda) の Docker イメージから始めます。CUDA ランタイムと開発ツール (ヘッダーとライブラリ) を含む cuDNN 開発者バージョンを使用し、[PyTorch source code](https://github.com/pytorch/pytorch#from-source) からビルドします。

   ```
   FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04
   ```
**ヒント**  
公式の AWS Deep Learning Container (DLC) イメージは、[NVIDIA CUDA ベースイメージ](https://hub.docker.com/r/nvidia/cuda)から構築されています。残りの手順を実行しながら、ビルド済みの DLC イメージをリファレンスとして使用する場合は、「[AWS Deep Learning Containers for PyTorch Dockerfiles](https://github.com/aws/deep-learning-containers/tree/master/pytorch)」をご覧ください。

1. 以下の引数を追加して PyTorch と他のパッケージのバージョンを指定します。SageMaker AI のデータ並列ライブラリや Amazon S3 プラグインなどの AWS リソースを使用するソフトウェアの Amazon S3 バケットパスも指定します。

   次のコード例で提供されているバージョン以外のサードパーティーライブラリを使用するには、[PyTorch 用の AWS Deep Learning Container の公式 Dockerfiles](https://github.com/aws/deep-learning-containers/tree/master/pytorch/training/docker) を調べて、テスト済み、互換性があり、アプリケーションに適したバージョンを見つけることをお勧めします。

   `SMDATAPARALLEL_BINARY` 引数に指定する URL を調べるには、「[サポートされるフレームワーク](distributed-data-parallel-support.md#distributed-data-parallel-supported-frameworks)」のルックアップテーブルを参照してください。

   ```
   ARG PYTORCH_VERSION=1.10.2
   ARG PYTHON_SHORT_VERSION=3.8
   ARG EFA_VERSION=1.14.1
   ARG SMDATAPARALLEL_BINARY=https://smdataparallel.s3.amazonaws.com/binary/pytorch/${PYTORCH_VERSION}/cu113/2022-02-18/smdistributed_dataparallel-1.4.0-cp38-cp38-linux_x86_64.whl
   ARG PT_S3_WHL_GPU=https://aws-s3-plugin.s3.us-west-2.amazonaws.com/binaries/0.0.1/1c3e69e/awsio-0.0.1-cp38-cp38-manylinux1_x86_64.whl
   ARG CONDA_PREFIX="/opt/conda"
   ARG BRANCH_OFI=1.1.3-aws
   ```

1. SageMaker トレーニングコンポーネントを適切にビルドしてデータ並列ライブラリを実行するには、以下の環境変数を設定します。以降のステップでは、これらの変数をコンポーネントに使用します。

   ```
   # Set ENV variables required to build PyTorch
   ENV TORCH_CUDA_ARCH_LIST="7.0+PTX 8.0"
   ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
   ENV NCCL_VERSION=2.10.3
   
   # Add OpenMPI to the path.
   ENV PATH /opt/amazon/openmpi/bin:$PATH
   
   # Add Conda to path
   ENV PATH $CONDA_PREFIX/bin:$PATH
   
   # Set this enviroment variable for SageMaker AI to launch SMDDP correctly.
   ENV SAGEMAKER_TRAINING_MODULE=sagemaker_pytorch_container.training:main
   
   # Add enviroment variable for processes to be able to call fork()
   ENV RDMAV_FORK_SAFE=1
   
   # Indicate the container type
   ENV DLC_CONTAINER_TYPE=training
   
   # Add EFA and SMDDP to LD library path
   ENV LD_LIBRARY_PATH="/opt/conda/lib/python${PYTHON_SHORT_VERSION}/site-packages/smdistributed/dataparallel/lib:$LD_LIBRARY_PATH"
   ENV LD_LIBRARY_PATH=/opt/amazon/efa/lib/:$LD_LIBRARY_PATH
   ```

1. `curl`、`wget`、`git` をインストールまたは更新し、以降のステップでパッケージをダウンロードしてビルドします。

   ```
   RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \
       apt-get update && apt-get install -y  --no-install-recommends \
           curl \
           wget \
           git \
       && rm -rf /var/lib/apt/lists/*
   ```

1. Amazon EC2 ネットワーク通信用の [Elastic Fabric Adapter (EFA)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) ソフトウェアをインストールします。

   ```
   RUN DEBIAN_FRONTEND=noninteractive apt-get update
   RUN mkdir /tmp/efa \
       && cd /tmp/efa \
       && curl --silent -O https://efa-installer.amazonaws.com/aws-efa-installer-${EFA_VERSION}.tar.gz \
       && tar -xf aws-efa-installer-${EFA_VERSION}.tar.gz \
       && cd aws-efa-installer \
       && ./efa_installer.sh -y --skip-kmod -g \
       && rm -rf /tmp/efa
   ```

1. [Conda](https://docs.conda.io/en/latest/) をインストールしてパッケージ管理を行います。

   ```
   RUN curl -fsSL -v -o ~/miniconda.sh -O  https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh  && \
       chmod +x ~/miniconda.sh && \
       ~/miniconda.sh -b -p $CONDA_PREFIX && \
       rm ~/miniconda.sh && \
       $CONDA_PREFIX/bin/conda install -y python=${PYTHON_SHORT_VERSION} conda-build pyyaml numpy ipython && \
       $CONDA_PREFIX/bin/conda clean -ya
   ```

1. PyTorch とその依存関係を取得し、ビルドおよびインストールします。NCCL のバージョンを管理して [AWS OFI NCCL plug-in](https://github.com/aws/aws-ofi-nccl) との互換性を保証するために、[PyTorch from the source code](https://github.com/pytorch/pytorch#from-source) をビルドします。

   1. [PyTorch official dockerfile](https://github.com/pytorch/pytorch/blob/master/Dockerfile) の手順に従って、ビルドの依存関係をインストールし、再コンパイルを高速化するために [ccache](https://ccache.dev/) を設定します。

      ```
      RUN DEBIAN_FRONTEND=noninteractive \
          apt-get install -y --no-install-recommends \
              build-essential \
              ca-certificates \
              ccache \
              cmake \
              git \
              libjpeg-dev \
              libpng-dev \
          && rm -rf /var/lib/apt/lists/*
        
      # Setup ccache
      RUN /usr/sbin/update-ccache-symlinks
      RUN mkdir /opt/ccache && ccache --set-config=cache_dir=/opt/ccache
      ```

   1. [PyTorch’s common and Linux dependencies](https://github.com/pytorch/pytorch#install-dependencies) をインストールします。

      ```
      # Common dependencies for PyTorch
      RUN conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses
      
      # Linux specific dependency for PyTorch
      RUN conda install -c pytorch magma-cuda113
      ```

   1. [PyTorch GitHub repository](https://github.com/pytorch/pytorch) のクローンを作成します。

      ```
      RUN --mount=type=cache,target=/opt/ccache \
          cd / \
          && git clone --recursive https://github.com/pytorch/pytorch -b v${PYTORCH_VERSION}
      ```

   1. 特定の [NCCL](https://developer.nvidia.com/nccl) バージョンをインストールしてビルドします。これを行うには、PyTorch のデフォルトの NCCL フォルダ (`/pytorch/third_party/nccl`) の内容を、NVIDIA リポジトリの特定の NCCL バージョンに置き換えます。NCCL のバージョンは、このガイドのステップ 3 で設定しました。

      ```
      RUN cd /pytorch/third_party/nccl \
          && rm -rf nccl \
          && git clone https://github.com/NVIDIA/nccl.git -b v${NCCL_VERSION}-1 \
          && cd nccl \
          && make -j64 src.build CUDA_HOME=/usr/local/cuda NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_80,code=sm_80" \
          && make pkg.txz.build \
          && tar -xvf build/pkg/txz/nccl_*.txz -C $CONDA_PREFIX --strip-components=1
      ```

   1. PyTorch をビルドしてインストールします。このプロセスが完了するまで、通常は 1 時間強かかります。前のステップでダウンロードした NCCL バージョンを使用してビルドされます。

      ```
      RUN cd /pytorch \
          && CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" \
          python setup.py install \
          && rm -rf /pytorch
      ```

1. [AWS OFI NCCL プラグイン](https://github.com/aws/aws-ofi-nccl)をビルドしてインストールします。これにより、SageMaker AI 分散データ並列ライブラリの [libfabric](https://github.com/ofiwg/libfabric) サポートが有効になります。

   ```
   RUN DEBIAN_FRONTEND=noninteractive apt-get update \
       && apt-get install -y --no-install-recommends \
           autoconf \
           automake \
           libtool
   RUN mkdir /tmp/efa-ofi-nccl \
       && cd /tmp/efa-ofi-nccl \
       && git clone https://github.com/aws/aws-ofi-nccl.git -b v${BRANCH_OFI} \
       && cd aws-ofi-nccl \
       && ./autogen.sh \
       && ./configure --with-libfabric=/opt/amazon/efa \
       --with-mpi=/opt/amazon/openmpi \
       --with-cuda=/usr/local/cuda \
       --with-nccl=$CONDA_PREFIX \
       && make \
       && make install \
       && rm -rf /tmp/efa-ofi-nccl
   ```

1. [TorchVision](https://github.com/pytorch/vision.git) をビルドしてインストールします。

   ```
   RUN pip install --no-cache-dir -U \
       packaging \
       mpi4py==3.0.3
   RUN cd /tmp \
       && git clone https://github.com/pytorch/vision.git -b v0.9.1 \
       && cd vision \
       && BUILD_VERSION="0.9.1+cu111" python setup.py install \
       && cd /tmp \
       && rm -rf vision
   ```

1. OpenSSH をインストールおよび設定します。MPI がコンテナ間で通信するには OpenSSH が必要です。確認なしに OpenSSH がコンテナと通信できるようになります。

   ```
   RUN apt-get update \
       && apt-get install -y  --allow-downgrades --allow-change-held-packages --no-install-recommends \
       && apt-get install -y --no-install-recommends openssh-client openssh-server \
       && mkdir -p /var/run/sshd \
       && cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new \
       && echo "    StrictHostKeyChecking no" >> /etc/ssh/ssh_config.new \
       && mv /etc/ssh/ssh_config.new /etc/ssh/ssh_config \
       && rm -rf /var/lib/apt/lists/*
   
   # Configure OpenSSH so that nodes can communicate with each other
   RUN mkdir -p /var/run/sshd && \
    sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
   RUN rm -rf /root/.ssh/ && \
    mkdir -p /root/.ssh/ && \
    ssh-keygen -q -t rsa -N '' -f /root/.ssh/id_rsa && \
    cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys \
    && printf "Host *\n StrictHostKeyChecking no\n" >> /root/.ssh/config
   ```

1. PT S3 プラグインをインストールして、Amazon S3 のデータセットに効率的にアクセスします。

   ```
   RUN pip install --no-cache-dir -U ${PT_S3_WHL_GPU}
   RUN mkdir -p /etc/pki/tls/certs && cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt
   ```

1. [libboost](https://www.boost.org/) ライブラリをインストールします。本パッケージは SageMaker AI データ並列ライブラリの非同期 IO 機能をネットワーク化するために必要です。

   ```
   WORKDIR /
   RUN wget https://sourceforge.net/projects/boost/files/boost/1.73.0/boost_1_73_0.tar.gz/download -O boost_1_73_0.tar.gz \
       && tar -xzf boost_1_73_0.tar.gz \
       && cd boost_1_73_0 \
       && ./bootstrap.sh \
       && ./b2 threading=multi --prefix=${CONDA_PREFIX} -j 64 cxxflags=-fPIC cflags=-fPIC install || true \
       && cd .. \
       && rm -rf boost_1_73_0.tar.gz \
       && rm -rf boost_1_73_0 \
       && cd ${CONDA_PREFIX}/include/boost
   ```

1. PyTorch トレーニング用に次の SageMaker AI ツールをインストールしてください。

   ```
   WORKDIR /root
   RUN pip install --no-cache-dir -U \
       smclarify \
       "sagemaker>=2,<3" \
       sagemaker-experiments==0.* \
       sagemaker-pytorch-training
   ```

1. 最後に、SageMaker AI データ並列ライブラリと残りの依存関係をインストールします。

   ```
   RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \
     apt-get update && apt-get install -y  --no-install-recommends \
     jq \
     libhwloc-dev \
     libnuma1 \
     libnuma-dev \
     libssl1.1 \
     libtool \
     hwloc \
     && rm -rf /var/lib/apt/lists/*
   
   RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
   ```

1. Dockerfile の作成が完了したら、「[Adapting Your Own Training Container](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html)」を参照し、Docker コンテナを構築する方法、Amazon ECR でホストする方法、および SageMaker Python SDK を使用してトレーニングジョブを実行する方法を確認してください。

以下のサンプルコードは、前述のコードブロックをすべて組み合わせた後の Dockerfile 全体を示しています。

```
# This file creates a docker image with minimum dependencies to run SageMaker AI data parallel training
FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04

# Set appropiate versions and location for components
ARG PYTORCH_VERSION=1.10.2
ARG PYTHON_SHORT_VERSION=3.8
ARG EFA_VERSION=1.14.1
ARG SMDATAPARALLEL_BINARY=https://smdataparallel.s3.amazonaws.com/binary/pytorch/${PYTORCH_VERSION}/cu113/2022-02-18/smdistributed_dataparallel-1.4.0-cp38-cp38-linux_x86_64.whl
ARG PT_S3_WHL_GPU=https://aws-s3-plugin.s3.us-west-2.amazonaws.com/binaries/0.0.1/1c3e69e/awsio-0.0.1-cp38-cp38-manylinux1_x86_64.whl
ARG CONDA_PREFIX="/opt/conda"
ARG BRANCH_OFI=1.1.3-aws

# Set ENV variables required to build PyTorch
ENV TORCH_CUDA_ARCH_LIST="3.7 5.0 7.0+PTX 8.0"
ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
ENV NCCL_VERSION=2.10.3

# Add OpenMPI to the path.
ENV PATH /opt/amazon/openmpi/bin:$PATH

# Add Conda to path
ENV PATH $CONDA_PREFIX/bin:$PATH

# Set this enviroment variable for SageMaker AI to launch SMDDP correctly.
ENV SAGEMAKER_TRAINING_MODULE=sagemaker_pytorch_container.training:main

# Add enviroment variable for processes to be able to call fork()
ENV RDMAV_FORK_SAFE=1

# Indicate the container type
ENV DLC_CONTAINER_TYPE=training

# Add EFA and SMDDP to LD library path
ENV LD_LIBRARY_PATH="/opt/conda/lib/python${PYTHON_SHORT_VERSION}/site-packages/smdistributed/dataparallel/lib:$LD_LIBRARY_PATH"
ENV LD_LIBRARY_PATH=/opt/amazon/efa/lib/:$LD_LIBRARY_PATH

# Install basic dependencies to download and build other dependencies
RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \
  apt-get update && apt-get install -y  --no-install-recommends \
  curl \
  wget \
  git \
  && rm -rf /var/lib/apt/lists/*

# Install EFA.
# This is required for SMDDP backend communication
RUN DEBIAN_FRONTEND=noninteractive apt-get update
RUN mkdir /tmp/efa \
    && cd /tmp/efa \
    && curl --silent -O https://efa-installer.amazonaws.com/aws-efa-installer-${EFA_VERSION}.tar.gz \
    && tar -xf aws-efa-installer-${EFA_VERSION}.tar.gz \
    && cd aws-efa-installer \
    && ./efa_installer.sh -y --skip-kmod -g \
    && rm -rf /tmp/efa

# Install Conda
RUN curl -fsSL -v -o ~/miniconda.sh -O  https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh  && \
    chmod +x ~/miniconda.sh && \
    ~/miniconda.sh -b -p $CONDA_PREFIX && \
    rm ~/miniconda.sh && \
    $CONDA_PREFIX/bin/conda install -y python=${PYTHON_SHORT_VERSION} conda-build pyyaml numpy ipython && \
    $CONDA_PREFIX/bin/conda clean -ya

# Install PyTorch.
# Start with dependencies listed in official PyTorch dockerfile
# https://github.com/pytorch/pytorch/blob/master/Dockerfile
RUN DEBIAN_FRONTEND=noninteractive \
    apt-get install -y --no-install-recommends \
        build-essential \
        ca-certificates \
        ccache \
        cmake \
        git \
        libjpeg-dev \
        libpng-dev && \
    rm -rf /var/lib/apt/lists/*

# Setup ccache
RUN /usr/sbin/update-ccache-symlinks
RUN mkdir /opt/ccache && ccache --set-config=cache_dir=/opt/ccache

# Common dependencies for PyTorch
RUN conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses

# Linux specific dependency for PyTorch
RUN conda install -c pytorch magma-cuda113

# Clone PyTorch
RUN --mount=type=cache,target=/opt/ccache \
    cd / \
    && git clone --recursive https://github.com/pytorch/pytorch -b v${PYTORCH_VERSION}
# Note that we need to use the same NCCL version for PyTorch and OFI plugin.
# To enforce that, install NCCL from source before building PT and OFI plugin.

# Install NCCL.
# Required for building OFI plugin (OFI requires NCCL's header files and library)
RUN cd /pytorch/third_party/nccl \
    && rm -rf nccl \
    && git clone https://github.com/NVIDIA/nccl.git -b v${NCCL_VERSION}-1 \
    && cd nccl \
    && make -j64 src.build CUDA_HOME=/usr/local/cuda NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_80,code=sm_80" \
    && make pkg.txz.build \
    && tar -xvf build/pkg/txz/nccl_*.txz -C $CONDA_PREFIX --strip-components=1

# Build and install PyTorch.
RUN cd /pytorch \
    && CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" \
    python setup.py install \
    && rm -rf /pytorch

RUN ccache -C

# Build and install OFI plugin. \
# It is required to use libfabric.
RUN DEBIAN_FRONTEND=noninteractive apt-get update \
    && apt-get install -y --no-install-recommends \
        autoconf \
        automake \
        libtool
RUN mkdir /tmp/efa-ofi-nccl \
    && cd /tmp/efa-ofi-nccl \
    && git clone https://github.com/aws/aws-ofi-nccl.git -b v${BRANCH_OFI} \
    && cd aws-ofi-nccl \
    && ./autogen.sh \
    && ./configure --with-libfabric=/opt/amazon/efa \
        --with-mpi=/opt/amazon/openmpi \
        --with-cuda=/usr/local/cuda \
        --with-nccl=$CONDA_PREFIX \
    && make \
    && make install \
    && rm -rf /tmp/efa-ofi-nccl

# Build and install Torchvision
RUN pip install --no-cache-dir -U \
    packaging \
    mpi4py==3.0.3
RUN cd /tmp \
    && git clone https://github.com/pytorch/vision.git -b v0.9.1 \
    && cd vision \
    && BUILD_VERSION="0.9.1+cu111" python setup.py install \
    && cd /tmp \
    && rm -rf vision

# Install OpenSSH.
# Required for MPI to communicate between containers, allow OpenSSH to talk to containers without asking for confirmation
RUN apt-get update \
    && apt-get install -y  --allow-downgrades --allow-change-held-packages --no-install-recommends \
    && apt-get install -y --no-install-recommends openssh-client openssh-server \
    && mkdir -p /var/run/sshd \
    && cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new \
    && echo "    StrictHostKeyChecking no" >> /etc/ssh/ssh_config.new \
    && mv /etc/ssh/ssh_config.new /etc/ssh/ssh_config \
    && rm -rf /var/lib/apt/lists/*
# Configure OpenSSH so that nodes can communicate with each other
RUN mkdir -p /var/run/sshd && \
    sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
RUN rm -rf /root/.ssh/ && \
    mkdir -p /root/.ssh/ && \
    ssh-keygen -q -t rsa -N '' -f /root/.ssh/id_rsa && \
    cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys \
    && printf "Host *\n StrictHostKeyChecking no\n" >> /root/.ssh/config

# Install PT S3 plugin.
# Required to efficiently access datasets in Amazon S3
RUN pip install --no-cache-dir -U ${PT_S3_WHL_GPU}
RUN mkdir -p /etc/pki/tls/certs && cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt

# Install libboost from source.
# This package is needed for smdataparallel functionality (for networking asynchronous IO).
WORKDIR /
RUN wget https://sourceforge.net/projects/boost/files/boost/1.73.0/boost_1_73_0.tar.gz/download -O boost_1_73_0.tar.gz \
    && tar -xzf boost_1_73_0.tar.gz \
    && cd boost_1_73_0 \
    && ./bootstrap.sh \
    && ./b2 threading=multi --prefix=${CONDA_PREFIX} -j 64 cxxflags=-fPIC cflags=-fPIC install || true \
    && cd .. \
    && rm -rf boost_1_73_0.tar.gz \
    && rm -rf boost_1_73_0 \
    && cd ${CONDA_PREFIX}/include/boost

# Install SageMaker AI PyTorch training.
WORKDIR /root
RUN pip install --no-cache-dir -U \
    smclarify \
    "sagemaker>=2,<3" \
    sagemaker-experiments==0.* \
    sagemaker-pytorch-training

# Install SageMaker AI data parallel binary (SMDDP)
# Start with dependencies
RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \
    apt-get update && apt-get install -y  --no-install-recommends \
        jq \
        libhwloc-dev \
        libnuma1 \
        libnuma-dev \
        libssl1.1 \
        libtool \
        hwloc \
    && rm -rf /var/lib/apt/lists/*

# Install SMDDP
RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
```

**ヒント**  
SageMaker AI でのトレーニング用のカスタム Dockerfile の作成に関する一般的な情報については、「[Use Your Own Training Algorithms](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo.html)」を参照してください。

**ヒント**  
カスタム Dockerfile を拡張して SageMaker AI モデル並列ライブラリを組み込む場合は、「[SageMaker 分散モデル並列ライブラリを使用した独自の Docker コンテナの作成](model-parallel-sm-sdk.md#model-parallel-bring-your-own-container)」を参照してください。

# Amazon SageMaker AI データ並列処理ライブラリの例
<a name="distributed-data-parallel-v2-examples"></a>

このページでは、SageMaker AI 分散データ並列処理 (SMDDP) ライブラリを実装して、SageMaker AI で分散トレーニングジョブを実行する例を示す Jupyter Notebook を紹介します。

## ブログと導入事例
<a name="distributed-data-parallel-v2-examples-blog"></a>

以下のブログでは、SMDDP ライブラリの導入事例について説明しています。

**SMDDP v2 ブログ**
+ [Enable faster training with Amazon SageMaker AI data parallel library](https://aws.amazon.com/blogs/machine-learning/enable-faster-training-with-amazon-sagemaker-data-parallel-library/), *AWS Machine Learning Blog* (2023 年 12 月 5 日)

**SMDDP v1 ブログ**
+ [How I trained 10TB for Stable Diffusion on SageMaker AI](https://medium.com/@emilywebber/how-i-trained-10tb-for-stable-diffusion-on-sagemaker-39dcea49ce32)、Medium (2022 年 11 月 29 日)**
+ [Run PyTorch Lightning and native PyTorch DDP on Amazon SageMaker Training, featuring Amazon Search](https://aws.amazon.com/blogs/machine-learning/run-pytorch-lightning-and-native-pytorch-ddp-on-amazon-sagemaker-training-featuring-amazon-search/)、*AWS Machine Learning ブログ* (2022 年 8 月 18 日)
+ [PyTorch と SageMaker AI 分散データ並列ライブラリ AWS を使用した での YOLOv5 のトレーニング](https://medium.com/@sitecao/training-yolov5-on-aws-with-pytorch-and-sagemaker-distributed-data-parallel-library-a196ab01409b)、*中* (2022 年 5 月 6 日)
+ [Speed up EfficientNet model training on SageMaker AI with PyTorch and the SageMaker AI distributed data parallel library](https://medium.com/@dangmz/speed-up-efficientnet-model-training-on-amazon-sagemaker-with-pytorch-and-sagemaker-distributed-dae4b048c01a)、*Medium* (2022 年 3 月 21 日)
+ [SageMaker AI 分散データ並列ライブラリ、Towards Data Science (2022 年 1 月 12 日) AWS を使用して、 での EfficientNet トレーニングを高速化](https://towardsdatascience.com/speed-up-efficientnet-training-on-aws-by-up-to-30-with-sagemaker-distributed-data-parallel-library-2dbf6d1e18e8)する ** 
+ [Hyundai reduces ML model training time for autonomous driving models using Amazon SageMaker AI](https://aws.amazon.com/blogs/machine-learning/hyundai-reduces-training-time-for-autonomous-driving-models-using-amazon-sagemaker/)、*AWS Machine Learning ブログ* (2021 年 6 月 25 日)
+ [Distributed Training: Train BART/T5 for Summarization using Transformers and Amazon SageMaker AI](https://huggingface.co/blog/sagemaker-distributed-training-seq2seq)、Hugging Face ウェブサイト (2021 年 4 月 8 日)**

## サンプルノートブックの例
<a name="distributed-data-parallel-v2-examples-pytorch"></a>

サンプルノートブックは、[SageMaker AI サンプル GitHub リポジトリ](https://github.com/aws/amazon-sagemaker-examples/tree/master/training/distributed_training/)で提供されています。サンプルをダウンロードするには、次のコマンドを実行してリポジトリをクローンし、`training/distributed_training/pytorch/data_parallel` に移動してください。

**注記**  
次の SageMaker AI ML IDE でサンプルノートブックをクローンし、実行してください。  
[SageMaker AI JupyterLab](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-jl.html) (2023 年 12 月以降に作成された [Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html) で利用可能)
[SageMaker AI Code Editor](https://docs.aws.amazon.com/sagemaker/latest/dg/code-editor.html) (2023 年 12 月以降に作成された [Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html) で利用可能)
[Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) (2023 年 12 月以降に作成された [Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html) でアプリケーションとして利用可能)
[SageMaker ノートブックインスタンス](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html)

```
git clone https://github.com/aws/amazon-sagemaker-examples.git
cd amazon-sagemaker-examples/training/distributed_training/pytorch/data_parallel
```

**SMDDP v2 のサンプル**
+ [SageMaker AI 分散データ並列ライブラリ (SMDDP) と DeepSpeed を使用して Llama 2 をトレーニングする](https://github.com/aws/amazon-sagemaker-examples/blob/main/training/distributed_training/pytorch/data_parallel/deepspeed/llama2/smddp_deepspeed_example.ipynb)
+ [SageMaker AI 分散データ並列処理ライブラリ (SMDDP) と PyTorch Fully Sharded Data Parallelism (FSDP) を使用して Falcon をトレーニングする](https://github.com/aws/amazon-sagemaker-examples/blob/main/training/distributed_training/pytorch/data_parallel/fully_sharded_data_parallel/falcon/smddp_fsdp_example.ipynb)

**SMDDP v1 のサンプル**
+ [SageMaker AI データ並列処理ライブラリと PyTorch を使用した CNN](https://github.com/aws/amazon-sagemaker-examples/blob/main/training/distributed_training/pytorch/data_parallel/mnist/pytorch_smdataparallel_mnist_demo.ipynb)
+ [SageMaker AI データ並列処理ライブラリと PyTorch を使用した BERT](https://github.com/aws/amazon-sagemaker-examples/blob/main/training/distributed_training/pytorch/data_parallel/bert/pytorch_smdataparallel_bert_demo.ipynb)
+ [TensorFlow 2.3.1 と SageMaker AI データ並列処理ライブラリを使用した CNN](https://sagemaker-examples.readthedocs.io/en/latest/training/distributed_training/tensorflow/data_parallel/mnist/tensorflow2_smdataparallel_mnist_demo.html)
+ [TensorFlow 2.3.1 と SageMaker AI データ並列処理ライブラリを使用した BERT](https://sagemaker-examples.readthedocs.io/en/latest/training/distributed_training/tensorflow/data_parallel/bert/tensorflow2_smdataparallel_bert_demo.html)
+ [SageMaker AI 上の PyTorch での HuggingFace 分散データ並列トレーニング - 分散質問回答](https://github.com/huggingface/notebooks/blob/master/sagemaker/03_distributed_training_data_parallelism/sagemaker-notebook.ipynb)
+ [SageMaker AI 上の PyTorch での HuggingFace 分散データ並列トレーニング - 分散テキスト要約](https://github.com/huggingface/notebooks/blob/master/sagemaker/08_distributed_summarization_bart_t5/sagemaker-notebook.ipynb)
+ [SageMaker AI 上の TensorFlow での HuggingFace 分散データ並列トレーニング](https://github.com/huggingface/notebooks/blob/master/sagemaker/07_tensorflow_distributed_training_data_parallelism/sagemaker-notebook.ipynb)

# SageMaker AI 分散データ並列処理ライブラリの設定のヒント
<a name="data-parallel-config"></a>

SageMaker AI 分散データ並列処理 (SMDDP) ライブラリを使う前に、次のヒントを確認してください。このリストには、すべてのフレームワークに通じるヒントが含まれています。

**Topics**
+ [データの前処理](#data-parallel-config-dataprep)
+ [単一ノードと複数ノード](#data-parallel-config-multi-node)
+ [Debugger でスケーリング効率をデバッグする](#data-parallel-config-debug)
+ [バッチサイズ](#data-parallel-config-batch-size)
+ [カスタム MPI オプション](#data-parallel-config-mpi-custom)
+ [Amazon FSx を使って最適なストレージとスループット容量を設定する](#data-parallel-config-fxs)

## データの前処理
<a name="data-parallel-config-dataprep"></a>

CPU を利用する外部ライブラリを使ってトレーニング中にデータを前処理すると、SageMaker AI 分散データ並列は `AllReduce` オペレーションに CPU を使用するため、CPU のボトルネックが発生する可能性があります。前処理ステップを GPU を使うライブラリに移動するか、トレーニングの前にすべての前処理を完了することで、トレーニング時間を短縮できる場合があります。

## 単一ノードと複数ノード
<a name="data-parallel-config-multi-node"></a>

このライブラリは、複数のノードを使用して使うことをお勧めします。ライブラリは、シングルホスト、マルチデバイスの設定 (例えば、複数の GPU を持つ 1 つの機械学習コンピューティングインスタンス) で使用できますが、2 つ以上のノードを使う場合、ライブラリの `AllReduce` オペレーションにより、パフォーマンスが大幅に向上します。また、単一ホストでは、NVLink が既にノード内の `AllReduce` の効率に影響しています。

## Debugger でスケーリング効率をデバッグする
<a name="data-parallel-config-debug"></a>

Amazon SageMaker デバッガーを使って、トレーニング中に CPU と GPU の使用率およびその他の関心のあるメトリクスをモニタリングおよび視覚化できます。デバッガーの[組み込みルール](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html)を使用して、`CPUBottleneck`、`LoadBalancing`、`LowGPUUtilization` などのコンピューティング性能の問題をモニタリングできます。これらのルールは、Amazon SageMaker Python SDK 推定器を定義するときに、[デバッガー設定](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-configuration-for-debugging.html)で指定できます。SageMaker AI でのトレーニングに AWS CLI と AWS SDK for Python (Boto3) を使用する場合は、[「Amazon SageMaker API を使用した Amazon SageMaker デバッガーの設定」に示すように、デバッガー](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-createtrainingjob-api.html)を有効にできます。

SageMaker トレーニングジョブでデバッガーを使用した例を見るには、[SageMaker ノートブックサンプル GitHub リポジトリ](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger)にあるノートブックサンプルの 1 つを参照できます。デバッガーの詳細については、「[Amazon SageMaker デバッガー](https://docs.aws.amazon.com/sagemaker/latest/dg/train-debugger.html)」を参照してください。

## バッチサイズ
<a name="data-parallel-config-batch-size"></a>

分散トレーニングでは、ノードを追加するにつれて、バッチサイズも比例して増加します。トレーニングジョブにノードを追加し、グローバルバッチサイズを増やすなかで、収束速度を向上させるには、学習レートを上げます。

これを達成する 1 つの方法は、トレーニングジョブの進行に応じて、学習レートを小さな値から大きな値へと一定比率で上げていく、段階的学習レートウォームアップを使うことです。これにより、学習レートの急激な上昇が回避でき、トレーニング開始時の正常な収束が可能になります。例えば、ミニバッチサイズが k 倍されるたびに、学習レートも k 倍される*線形スケーリングルール*を使用できます。この手法の詳細については、研究論文「[正確で大規模なミニバッチ SGD: 1 時間で ImageNet をトレーニングする](https://arxiv.org/pdf/1706.02677.pdf)」のセクション 2 および 3 を参照してください。

## カスタム MPI オプション
<a name="data-parallel-config-mpi-custom"></a>

SageMaker AI 分散データ並列ライブラリは、高性能クラスター内のノード間の通信を管理する一般的な標準である Message Passing Interface (MPI) を採用し、GPU レベルの通信に NVIDIA の NCCL ライブラリを使っています。TensorFlow または Pytorch `Estimator` でデータ並列ライブラリを使う場合、それぞれのコンテナは MPI 環境を設定し、`mpirun` コマンドを実行して、クラスターノードでジョブを開始します。

カスタム MPI オペレーションは、`Estimator` の `custom_mpi_options` パラメータを使って設定できます。このフィールドに渡された `mpirun` フラグは、どれも `mpirun` コマンドに追加され、トレーニングのために SageMaker AI によって実行されます。例えば次を使って、`Estimator` の `distribution` パラメータを以下のように定義すると、[https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html#nccl-debug](https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html#nccl-debug) 変数を使って、プログラムの開始時に NCCL バージョンを出力できます。

```
distribution = {'smdistributed':{'dataparallel':{'enabled': True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"}}}
```

## Amazon FSx を使って最適なストレージとスループット容量を設定する
<a name="data-parallel-config-fxs"></a>

分散データ並列処理を使って複数のノードでモデルをトレーニングする場合は、[FSx for Lustre](https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html) を使用することを強くお勧めします。Amazon FSx は、より高速なスループットで共有ファイルストレージをサポートするスケーラブルで高性能のストレージサービスです。Amazon FSx ストレージを大規模に使うと、すべてのコンピューティングノードでデータロード速度を向上させることができます。

通常、分散データ並列処理では、トレーニングの合計スループットが GPU の数に応じてほぼ直線的にスケールすると期待されます。ただし、最適ではない Amazon FSx ストレージを使うと、Amazon FSx スループットが低いため、トレーニングのパフォーマンスが低下する可能性があります。

例えば、最小 1.2 TiB のストレージ容量を持つ [Amazon FSx ファイルシステムの **SCRATCH\$12** デプロイタイプ](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf)を使う場合、I/O スループット容量は 240 MB/秒です。Amazon FSx ストレージは、物理ストレージデバイスを割り当てできるように機能し、割り当てられるデバイスが多いほど、スループットが向上します。SRATCH\$12 タイプの最小ストレージ増分は 1.2 TiB で、対応するスループットゲインは 240 MB/秒です。

100 GB のデータセットを扱う 4 ノードクラスターでトレーニングするモデルがあると仮定します。このクラスターに最適化された特定のバッチサイズで、モデルが約 30 秒で 1 つのエポックを完了できると仮定します。この場合、必要な最小 I/O 速度は約 3 GB/秒 (100 GB/30 秒) です。これは明らかに、240 MB/秒よりもはるかに高いスループット要件です。そのような限られた Amazon FSx の能力では、分散トレーニングジョブをより大きなクラスターにスケールすると、I/O のボトルネックの問題が悪化する可能性があります。モデルトレーニングのスループットは、キャッシュの蓄積につれて後の方のエポックでは向上する可能性がありますが、Amazon FSx のスループットは依然としてボトルネックになる可能性があります。

このような I/O のボトルネックの問題を軽減するには、Amazon FSx ストレージのサイズを大きくして、スループット容量を高めてください。通常、最適な I/O スループットを見つけるには、I/O のボトルネックの問題を解決するのに十分であることがわかるまで、さまざまな Amazon FSx スループット能力を試して、推定値と同等またはわずかに低いスループットを与えます。前述の例の場合、2.4 GB/秒のスループットと 67 GB の RAM キャッシュを持つ Amazon FSx ストレージで十分です。ファイルシステムのスループットが最適になった場合、モデルトレーニングのスループットは、即座に、あるいはキャッシュの蓄積に応じて最初のエポックの後に、最大値に達するはずです。

Amazon FSx ストレージを増やす方法およびデプロイタイプの詳細については、Amazon FSx for Lustre ドキュメントの次のページを参照してください。**
+  [ストレージ容量を増やす方法](https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-storage-capacity.html#increase-storage-capacity) 
+  [ファイルシステムのパフォーマンスの集計](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf) 

# Amazon SageMaker AI 分散データ並列処理ライブラリに関するよくある質問
<a name="data-parallel-faq"></a>

SMDDP ライブラリに関するよくある質問とその回答を以下でご確認ください。

**Q: このライブラリを使う場合、`allreduce` をサポートする CPU インスタンスはどのように管理されますか。異種の CPU-GPU クラスターを作成する必要がありますか、または SMDDP ライブラリを使うジョブに対して SageMaker AI サービスで追加の C5 が作成されますか。**

SMDDP ライブラリは GPU インスタンスのみをサポートしています。具体的には、NVIDIA A100 GPU を搭載した EFA 対応の P4d および P4de インスタンスのみがサポートされています。追加の C5 または CPU インスタンスは起動されません。SageMaker AI トレーニングジョブが 8 ノードの P4d クラスターで実行される場合、使用されるのは 8 つの `ml.p4d.24xlarge` インスタンスのみです。追加のインスタンスはプロビジョンされません。

**Q: ハイパーパラメータ H1 (学習レート、バッチサイズ、オプティマイザなど) のセットを使って、1 つの `ml.p3.24xlarge` インスタンスで 5 日間かかるトレーニングジョブがあります。SageMaker AI のデータ並列処理ライブラリと 5 倍大きいクラスターを使用すると、約 5 倍のスピードアップを実現できますか。それとも、SMDDP ライブラリを有効にした後、トレーニングハイパーパラメータを再調整する必要がありますか。**

このライブラリは全体的なバッチサイズを変更します。新しい全体的なバッチサイズは、使用されるトレーニングインスタンスの数に応じて直線的にスケールされます。その結果、収束を確実にするために、学習レートなどのハイパーパラメータを変更する必要があります。

**Q: SMDDP ライブラリはスポットに対応していますか。**

はい。マネージドスポットトレーニングを利用できます。SageMaker トレーニングジョブのチェックポイントファイルへのパスを指定します。「[TensorFlow トレーニングスクリプトで SMDDP ライブラリを使用する (非推奨)](data-parallel-modify-sdp-tf2.md)」と「[PyTorch トレーニングスクリプトで SMDDP ライブラリを使用する](data-parallel-modify-sdp-pt.md)」の最後のステップで説明したとおり、トレーニングスクリプトでチェックポイントを保存および復元します。

**Q: SMDDP ライブラリは、シングルホスト、マルチデバイスの設定に適していますか。**

このライブラリはシングルホストのマルチデバイストレーニングに使用できますが、パフォーマンスの向上をもたらすのはマルチホストトレーニングの場合のみです。

**Q: トレーニングデータセットはどこに保存すべきですか。**

トレーニングデータセットは、Amazon S3 バケットまたは Amazon FSx ドライブに保存できます。[こちらの「document for various supported input file systems for a training job」](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html#sagemaker.inputs.FileSystemInput)を参照してください。

**Q: SMDDP ライブラリを使う場合、FSx for Lustre にトレーニングデータを用意するのが必須ですか。Amazon EFS と Amazon S3 は使えますか。**

低レイテンシーで高スループットな Amazon FSx を一般的に使用することをお勧めします。ご希望の場合は、Amazon EFS または Amazon S3 を使用できます。

**Q: このライブラリは CPU ノードで使用できますか。**

いいえ。SMDDP ライブラリでサポートされているインスタンスタイプを確認するには、「[サポートされるインスタンスタイプ](distributed-data-parallel-support.md#distributed-data-parallel-supported-instance-types)」を参照してください。

**Q: SMDDP ライブラリが現時点で起動時にサポートしているフレームワークとフレームワークバージョンは何ですか。**

SMDDP ライブラリは、現時点では、PyTorch v1.6.0 以降と TensorFlow v2.3.0 以降をサポートしています。TensorFlow 1.x はサポートしていません。AWS Deep Learning Containers にパッケージ化されている SMDDP ライブラリのバージョンについては、「[Deep Learning Containers のリリースノート](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/dlc-release-notes.html)」を参照してください。

**Q: このライブラリは AMP をサポートしていますか。**

はい。SMDDP ライブラリは、自動混合精度 (AMP) を標準でサポートしています。AMP を使用するには、トレーニングスクリプトにフレームワークレベルの変更を加える以外、特別なアクションは必要ありません。勾配が FP16 の場合、SageMaker AI データ並列処理ライブラリは、FP16 で `AllReduce` オペレーションを実行します。トレーニングスクリプトへの AMP API の実装に関する詳細は、次のリソースを参照してください。
+ [フレームワーク - PyTorch](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html#pytorch) (NVIDIA 深層学習パフォーマンスドキュメント)**
+ [フレームワーク - TensorFlow](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html#tensorflow) (NVIDIA 深層学習パフォーマンスドキュメント)**
+ [深層学習の自動混合精度](https://developer.nvidia.com/automatic-mixed-precision) (NVIDIA デベロッパードキュメント)**
+ [NVIDIA GPUでの高速トレーニングのためのネイティブ PyTorch 自動混合精度の導入](https://pytorch.org/blog/accelerating-training-on-nvidia-gpus-with-pytorch-automatic-mixed-precision/) (PyTorch ブログ)**
+ [TensorFlow 混合精度 API](https://www.tensorflow.org/guide/mixed_precision) (TensorFlow ドキュメント)**

**Q: 自分の分散トレーニングジョブが I/O ボトルネックが原因で速度低下しているかどうかを確認するにはどうすればよいですか。**

クラスターが大きくなると、トレーニングジョブにはより多くの I/O スループットが必要になるため、トレーニングスループットが最大パフォーマンスに達するまでに時間がかかる (エポック数が増える) 可能性があります。これは、I/O がボトルネックになっており、ノードのスケールアップに従いキャッシュの蓄積が難しくなる (スループット要件がより高くなり、ネットワークトポロジがより複雑になる) ことを示しています。CloudWatch での Amazon FSx スループットのモニタリングの詳細については、*FSx for Lustre ユーザーガイド*の「[FSx for Lustre をモニタリングする](https://docs.aws.amazon.com/fsx/latest/LustreGuide/monitoring_overview.html)」を参照してください。

**Q: データ並列処理で分散トレーニングジョブを実行している場合、I/O ボトルネックを解決するにはどうすればよいですか。**

Amazon S3 を使用している場合、データチャネルとして Amazon FSx を使用することを強くお勧めします。既に Amazon FSx を使っているにもかかわらず I/O ボトルネックの問題がある場合は、Amazon FSx ファイルシステムを低い I/O スループットと小さなストレージ容量で設定している可能性があります。I/O スループット容量の適切なサイズを見積もり、選択する方法の詳細については、「[Amazon FSx を使って最適なストレージとスループット容量を設定する](data-parallel-config.md#data-parallel-config-fxs)」を参照してください。

**Q: (ライブラリ v1.4.0 以降用) プロセスグループを初期化する際の `Invalid backend` エラーを解決するにはどうすればよいですか。**

`init_process_group` の呼び出し時にエラーメッセージ `ValueError: Invalid backend: 'smddp'` が表示される場合、これは v1.4.0 以降の SMDDP ライブラリで大幅な変更が加えられたことが原因です。このライブラリの PyTorch クライアント `smdistributed.dataparallel.torch.torch_smddp` をインポートする必要があります。これは、`smddp` を PyTorch のバックエンドとして登録します。詳細については[PyTorch トレーニングスクリプトで SMDDP ライブラリを使用する](data-parallel-modify-sdp-pt.md)を参照してください。

*Q: (v1.4.0 以降のライブラリの場合) [https://pytorch.org/docs/stable/distributed.html](https://pytorch.org/docs/stable/distributed.html) インターフェイスの集合演算プリミティブを呼び出したいです。`smddp` バックエンドは、どのプリミティブをサポートしていますか。*

v1.4.0 では、SMDDP ライブラリは `torch.distributed` インターフェイスの `all_reduce`、`broadcast`、`reduce`、`all_gather`、`barrier` をサポートしています。

**Q: (v1.4.0 以降の SMDDP ライブラリの場合) この新しい API は、Apex DDP のような他のカスタム DDP クラスやライブラリでも動作しますか。**

SMDDP ライブラリは、`torch.distribtued` モジュールを使用する他のサードパーティーの分散データ並列処理ライブラリやフレームワーク実装でテストされています。カスタム DDP クラスで使用される集合演算が SMDDP ライブラリでサポートされている限り、そのカスタム DDP クラスで SMDDP ライブラリを使用できます。サポートされている集合体のリストについては、前の質問を参照してください。これらのユースケースがあり、さらにサポートが必要な場合は、[AWS サポートセンター](https://console.aws.amazon.com/support/)または [Amazon SageMaker AI の AWS デベロッパーフォーラム](https://forums.aws.amazon.com/forum.jspa?forumID=285)を通して、SageMaker AI チームに連絡してください。

**Q: SMDDP ライブラリはコンテナ持ち込み (BYOC) オプションをサポートしていますか。その場合、カスタム Dockerfile を作成してライブラリをインストールし、分散型トレーニングジョブを実行するにはどうすればよいですか。**

SMDDP ライブラリとその最小限の依存関係を独自の Docker コンテナに統合したい場合は、BYOC が適切なアプローチです。このライブラリのバイナリファイルを使用して独自のコンテナを構築できます。推奨されるプロセスは、このライブラリとその依存関係を含むカスタム Dockerfile を作成し、Docker コンテナを構築して Amazon ECR でホストし、ECR イメージの URI を使用し SageMaker AI 汎用推定器クラスでトレーニングジョブを起動することです。SMDDP ライブラリを使用して SageMaker AI で分散トレーニングを実行するためのカスタム Dockerfile を準備する方法については、「[SageMaker AI 分散データ並列ライブラリを使用して独自の Docker コンテナを作成する](data-parallel-bring-your-own-container.md)」を参照してください。

# Amazon SageMaker AI の分散トレーニングのトラブルシューティング
<a name="distributed-troubleshooting-data-parallel"></a>

ライブラリを使用するトレーニングジョブの実行中に問題が発生した場合は、次のリストを使用してトラブルシュートを試みることができます。さらにサポートが必要な場合は、[AWS サポートセンター](https://console.aws.amazon.com/support/)または [Amazon SageMaker AI のAWS デベロッパーフォーラム](https://forums.aws.amazon.com/forum.jspa?forumID=285)を通して、SageMaker AI チームに連絡してください。

**Topics**
+ [SageMaker AI 分散データ並列を Amazon SageMaker Debugger およびチェックポイントと共に使う](#distributed-ts-data-parallel-debugger)
+ [モデルパラメータキーに予期しないプレフィックスが添付される](#distributed-ts-data-parallel-pytorch-prefix)
+ [SageMaker AI 分散トレーニングジョブが初期化中に停止する](#distributed-ts-data-parallel-efa-sg)
+ [SageMaker AI 分散トレーニングジョブがトレーニング終了時に停止する](#distributed-ts-data-parallel-stall-at-the-end)
+ [Amazon FSx スループットのボトルネックによるスケーリング効率の低下のモニタリング](#distributed-ts-data-parallel-fxs-bottleneck)
+ [PyTorch を使用した SageMaker AI 分散トレーニングジョブが非推奨の警告を返す](#distributed-ts-data-parallel-deprecation-warnings)

## SageMaker AI 分散データ並列を Amazon SageMaker Debugger およびチェックポイントと共に使う
<a name="distributed-ts-data-parallel-debugger"></a>

SageMaker AI 分散データ並列を使ったトレーニングジョブに関わる、システムボトルネックのモニタリング、フレームワークオペレーションのプロファイリング、モデル出力テンソルのデバッグには、Amazon SageMaker Debugger を使います。

ただし、SageMaker Debugger、SageMaker AI 分散データ並列、SageMaker AI チェックポイントを使うと、次の例のようなエラーが表示されることがあります。

```
SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled
```

これは、SageMaker AI 分散データ並列を有効にした場合に発生する、デバッガーとチェックポイントの間の内部エラーが原因です。
+ 3 つの機能をすべて有効にした場合、SageMaker Python SDK は、`debugger_hook_config=False` を渡すことでデバッガーを自動的にオフにします。これは、次のフレームワーク `estimator` の例と同じです。

  ```
  bucket=sagemaker.Session().default_bucket()
  base_job_name="sagemaker-checkpoint-test"
  checkpoint_in_bucket="checkpoints"
  
  # The S3 URI to store the checkpoints
  checkpoint_s3_bucket="s3://{}/{}/{}".format(bucket, base_job_name, checkpoint_in_bucket)
  
  estimator = TensorFlow(
      ...
  
      distribution={"smdistributed": {"dataparallel": { "enabled": True }}},
      checkpoint_s3_uri=checkpoint_s3_bucket,
      checkpoint_local_path="/opt/ml/checkpoints",
      debugger_hook_config=False
  )
  ```
+ SageMaker AI 分散データ並列と SageMaker デバッガーの両方を使い続ける場合の回避策としては、推定器から `checkpoint_s3_uri` と `checkpoint_local_path` のパラメータを指定する代わりに、トレーニングスクリプトにチェックポイント関数を手動で追加します。トレーニングスクリプトにチェックポイントを手動で設定する方法の詳細については、「[チェックポイントを保存する](distributed-troubleshooting-model-parallel.md#distributed-ts-model-parallel-checkpoints)」を参照してください。

## モデルパラメータキーに予期しないプレフィックスが添付される
<a name="distributed-ts-data-parallel-pytorch-prefix"></a>

PyTorch 分散トレーニングジョブの場合、予期しないプレフィックス (例えば `model`) が `state_dict` キー (モデルパラメータ) に添付される場合があります。SageMaker AI データ並列ライブラリは、PyTorch トレーニングジョブがモデルアーティファクトを保存するときに、モデルパラメータ名を直接変更したり先頭に追加したりすることはありません。PyTorch の分散トレーニングは、ネットワークに行き渡るよう `state_dict` にある名前を変更して、プレフィックスを付加します。SageMaker AI データ並列ライブラリと PyTorch トレーニング用のチェックポイントを使っている間に、パラメータ名が異なるためにモデル障害の問題が発生した場合は、次のサンプルコードを適応させて、トレーニングスクリプトでチェックポイントをロードするステップでプレフィックスを削除します。

```
state_dict = {k.partition('model.')[2]:state_dict[k] for k in state_dict.keys()}
```

これは、各 `state_dict` キーを文字列値として受け取り、最初に `'model.'` が現れた時点で文字列を分割し、分割された文字列の 3 番目のリスト項目 (インデックス 2) を取り出します。

プレフィックスの問題の詳細については、PyTorch ディスカッションフォーラムのディスカッションスレッド「[マルチ GPU でトレーニングした場合、保存したモデルのパラメータ名にプレフィックスが付きますか?](https://discuss.pytorch.org/t/prefix-parameter-names-in-saved-model-if-trained-by-multi-gpu/494)」を参照してください。**

モデルの保存とロードを行う PyTorch メソッドの詳細については、PyTorch ドキュメントの「[デバイス間でのモデルの保存とロード](https://pytorch.org/tutorials/beginner/saving_loading_models.html#saving-loading-model-across-devices)」を参照してください。**

## SageMaker AI 分散トレーニングジョブが初期化中に停止する
<a name="distributed-ts-data-parallel-efa-sg"></a>

EFA 対応インスタンスを使っているときに、SageMaker AI 分散データ並列トレーニングジョブが初期化中に停止した場合、トレーニングジョブに使用されている VPC サブネットのセキュリティグループの設定ミスが原因である可能性があります。EFA では、ノード間のトラフィックを有効にするために、適切なセキュリティグループ設定が必要です。

**セキュリティグループのインバウンドルールとアウトバウンドルールを設定するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) で Amazon VPC コンソールを開きます。

1. 左側のナビゲーションペインで **[Security Groups]** (セキュリティグループ) を選択します。

1. トレーニングに使う VPC サブネットに紐付けられているセキュリティグループを選択します。

1. **[Details]** (詳細) セクションで、**[Security group ID]** (セキュリティグループ ID) をコピーします。

1. [**インバウンドルール**] タブで、[**インバウンドルールの編集**] を選択します。

1. [**インバウンドルールの編集**] ページで、次の操作を行います。

   1. [**Add rule**] を選択してください。

   1. [**タイプ**] で、[**すべてのトラフィック**] を選択します。

   1. **[Source]** (ソース) で、**[Custom]** (カスタム) を選択し、セキュリティグループ ID を検索ボックスに貼り付けて、ポップアップ表示されるセキュリティグループを選択します。

1. **[Save rules]** (ルールの保存) を選択して、セキュリティグループのインバウンドルールの設定を完了します。

1. **[Outbound rules]** (アウトバウンドルール) タブで **[Edit outbound rules]** (アウトバウンドルールの編集) を選択します。

1. ステップ 6 と 7 を繰り返して、アウトバウンドルールと同じルールを追加します。

インバウンドとアウトバウンドのルールでセキュリティグループを設定する上記ステップが完了したら、トレーニングジョブを再実行し、停止の問題が解決したかどうかを確認します。

VPC および EFA のためのセキュリティグループの設定の詳細については、「[VPC のセキュリティグループ](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)」と「[Elastic Fabric Adapter](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html)」を参照してください。

## SageMaker AI 分散トレーニングジョブがトレーニング終了時に停止する
<a name="distributed-ts-data-parallel-stall-at-the-end"></a>

トレーニング終了時の停止問題の根本原因の 1 つは、異なるランク間での、エポックごとに処理されるバッチ数の不一致です。すべてのワーカー (GPU) はバックワードパスの中でローカル勾配を同期させ、バッチ反復の終了時点ですべてのワーカーがモデルの同じコピーを持つようにします。トレーニングの最終エポック中に、異なるワーカーグループにバッチサイズが不均等に割り当てられると、トレーニングジョブが停止します。例えば、あるワーカーグループ (グループ A) がすべてのバッチ処理を終了し、トレーニングループを出る間、別のワーカーグループ (グループ B) が別のバッチ処理を開始し、グループ A からの勾配を同期させる通信を期待している場合です。これにより、グループ B はグループ A を待機しますが、グループ A は既にトレーニングを完了しており、同期させる勾配がありません。

したがって、トレーニングデータセットを設定するときは、各ワーカーがトレーニング中に同じ数のバッチを処理するように、各ワーカーが同じ数のデータサンプルを取得することが重要です。この停止問題を回避するために、各ランクが同じ数のバッチを取得するようにしてください。

## Amazon FSx スループットのボトルネックによるスケーリング効率の低下のモニタリング
<a name="distributed-ts-data-parallel-fxs-bottleneck"></a>

スケーリング効率低下の考えられる原因の 1 つは、FSx のスループット制限です。大規模なトレーニングクラスターに切り替えたときにスケーリング効率が突然低下する場合は、スループット制限の大きい FSx for Lustre ファイルシステムを使用してみてください。詳細については、「*Amazon FSx for Lustre ユーザーガイド*」の「[ファイルシステムのパフォーマンスの集計](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf)」と「[ストレージとスループット容量の管理](https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-storage-capacity.html)」を参照してください。

## PyTorch を使用した SageMaker AI 分散トレーニングジョブが非推奨の警告を返す
<a name="distributed-ts-data-parallel-deprecation-warnings"></a>

v1.4.0 以降、SageMaker AI の分散データ並列処理ライブラリは PyTorch 分散のバックエンドとして機能します。PyTorch でライブラリを使用するという重大な変更により、PyTPyTorch 分散パッケージの `smdistributed` API が非推奨になったという警告メッセージが表示される場合があります。警告メッセージは次の例のようになります。

```
smdistributed.dataparallel.torch.dist is deprecated in the SageMaker AI distributed data parallel library v1.4.0+.
Please use torch.distributed and specify 'smddp' as a backend when initializing process group as follows:
torch.distributed.init_process_group(backend='smddp')
For more information, see the library's API documentation at
https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-modify-sdp-pt.html
```

v1.4.0 以降では、ライブラリをトレーニングスクリプトの先頭で一度インポートし、PyTorch の分散初期化中にバックエンドとして設定するだけで済みます。バックエンド仕様を 1 行記述するだけで、PyTorch トレーニングスクリプトを変更せずに、PyTorch の分散モジュールを直接使用できます。重大な変更点と、PyTorch でライブラリを使用する新しい方法については、「[PyTorch トレーニングスクリプトで SMDDP ライブラリを使用する](data-parallel-modify-sdp-pt.md)」を参照してください。

# SageMaker AI データ並列処理ライブラリのリリースノート
<a name="data-parallel-release-notes"></a>

SageMaker AI 分散データ並列処理 (SMDDP) ライブラリの最新の更新情報を確認するには、次のリリースノートを参照してください。

## SageMaker AI 分散データ並列処理ライブラリ v2.5.0
<a name="data-parallel-release-notes-20241017"></a>

*日付: 2024 年 10 月 17 日*

**新しい特徴**
+ PyTorch v2.4.1 と CUDA v12.1 のサポートが追加されました。

**SageMaker AI モデル並列処理 (SMP) ライブラリによって分散された Docker コンテナとの統合**

このバージョンの SMDDP ライブラリは [SageMaker モデル並列処理ライブラリ v2.6.0](model-parallel-release-notes.md#model-parallel-release-notes-20241017) に移行されます。

```
658645717510.dkr.ecr.<us-west-2>.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121
```

SMP Docker イメージが利用可能なリージョンについては、「[AWS リージョン](distributed-model-parallel-support-v2.md#distributed-model-parallel-availablity-zone-v2)」を参照してください。

**このリリースのバイナリファイル**

次の URL を使用して、ライブラリをダウンロードまたはインストールできます。

```
https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.4.1/cu121/2024-10-09/smdistributed_dataparallel-2.5.0-cp311-cp311-linux_x86_64.whl
```

## SageMaker AI 分散データ並列処理ライブラリ v2.3.0
<a name="data-parallel-release-notes-20240611"></a>

*日付: 2024 年 6 月 11 日*

**新しい特徴**
+ PyTorch v2.3.0、CUDA v12.1、Python v3.11 のサポートが追加されました。
+ PyTorch Lightning v2.2.5 のサポートが追加されました。これは、PyTorch v2.3.0 用の SageMaker AI フレームワークコンテナに統合されています。
+ インポート中のインスタンスタイプの検証を追加しました。サポート対象外のインスタンスタイプで SMDDP ライブラリがロードされないように防止します。SMDDP ライブラリと互換性のあるインスタンスタイプのリストについては、「[サポートされているフレームワーク、 AWS リージョンおよびインスタンスタイプ](distributed-data-parallel-support.md)」を参照してください。

**SageMaker AI フレームワークコンテナとの統合**

このバージョンの SMDDP ライブラリは、次の [SageMaker AI フレームワークコンテナ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only)に移行されます。
+ PyTorch v2.3.0

  ```
  763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.3.0-gpu-py311-cu121-ubuntu20.04-sagemaker
  ```

SMDDP ライブラリのバージョンと構築済みコンテナをすべて網羅したリストについては、「[サポートされているフレームワーク、 AWS リージョンおよびインスタンスタイプ](distributed-data-parallel-support.md)」を参照してください。

**このリリースのバイナリファイル**

次の URL を使用して、ライブラリをダウンロードまたはインストールできます。

```
https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.3.0/cu121/2024-05-23/smdistributed_dataparallel-2.3.0-cp311-cp311-linux_x86_64.whl
```

**その他の変更**
+ SMDDP ライブラリ v2.2.0 は、PyTorch v2.2.0 用の SageMaker AI フレームワークコンテナに統合されています。

## SageMaker AI 分散データ並列処理ライブラリ v2.2.0
<a name="data-parallel-release-notes-20240304"></a>

*日付: 2024 年 3 月 4 日*

**新しい特徴**
+ PyTorch v2.2.0 と CUDA v12.1 のサポートが追加されました。

**SageMaker AI モデル並列処理 (SMP) ライブラリによって分散された Docker コンテナとの統合**

このバージョンの SMDDP ライブラリは [SageMaker モデル並列処理ライブラリ v2.2.0](model-parallel-release-notes.md#model-parallel-release-notes-20240307) に移行されます。

```
658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.2.0-gpu-py310-cu121
```

SMP Docker イメージが利用可能なリージョンについては、「[AWS リージョン](distributed-model-parallel-support-v2.md#distributed-model-parallel-availablity-zone-v2)」を参照してください。

**このリリースのバイナリファイル**

次の URL を使用して、ライブラリをダウンロードまたはインストールできます。

```
https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.2.0/cu121/2024-03-04/smdistributed_dataparallel-2.2.0-cp310-cp310-linux_x86_64.whl
```

## SageMaker AI 分散データ並列処理ライブラリ v2.1.0
<a name="data-parallel-release-notes-20240301"></a>

*日付: 2024 年 3 月 1 日*

**新しい特徴**
+ PyTorch v2.1.0 と CUDA v12.1 のサポートが追加されました。

**バグ修正**
+ [SMDDP v2.0.1](#data-parallel-release-notes-20231207) の CPU メモリリークの問題を修正しました。

**SageMaker AI フレームワークコンテナとの統合**

このバージョンの SMDDP ライブラリはベンチマークテストに合格し、次の [SageMaker AI フレームワークコンテナ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only)に移行されます。
+ PyTorch v2.1.0

  ```
  763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.1.0-gpu-py310-cu121-ubuntu20.04-sagemaker
  ```

**SageMaker AI モデル並列処理 (SMP) ライブラリによって分散された Docker コンテナとの統合**

このバージョンの SMDDP ライブラリは [SageMaker モデル並列処理ライブラリ v2.1.0](model-parallel-release-notes.md#model-parallel-release-notes-20240206) に移行されます。

```
658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.1.2-gpu-py310-cu121
```

SMP Docker イメージが利用可能なリージョンについては、「[AWS リージョン](distributed-model-parallel-support-v2.md#distributed-model-parallel-availablity-zone-v2)」を参照してください。

**このリリースのバイナリファイル**

次の URL を使用して、ライブラリをダウンロードまたはインストールできます。

```
https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.1.0/cu121/2024-02-04/smdistributed_dataparallel-2.1.0-cp310-cp310-linux_x86_64.whl
```

## SageMaker AI 分散データ並列処理ライブラリ v2.0.1
<a name="data-parallel-release-notes-20231207"></a>

*日付: 2023 年 12 月 7 日*

**新しい特徴**
+  AWS コンピューティングリソースとネットワークインフラストラクチャに最適化された`AllGather`集合演算の新しい SMDDP 実装を追加しました。詳細については[SMDDP `AllGather` 集合演算](data-parallel-intro.md#data-parallel-allgather)を参照してください。
+ SMDDP `AllGather` 集合演算は、PyTorch FSDP および DeepSpeed と互換性があります。詳細については[PyTorch トレーニングスクリプトで SMDDP ライブラリを使用する](data-parallel-modify-sdp-pt.md)を参照してください。
+ PyTorch v2.0.1 のサポートが追加されました。

**既知の問題**
+ DDP モードで SMDDP `AllReduce` を使用したトレーニング中に、CPU メモリの使用量が徐々に増える CPU メモリリークの問題が発生します。

**SageMaker AI フレームワークコンテナとの統合**

このバージョンの SMDDP ライブラリはベンチマークテストに合格し、次の [SageMaker AI フレームワークコンテナ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only)に移行されます。
+ PyTorch v2.0.1

  ```
  763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.0.1-gpu-py310-cu118-ubuntu20.04-sagemaker
  ```

**このリリースのバイナリファイル**

次の URL を使用して、ライブラリをダウンロードまたはインストールできます。

```
https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.0.1/cu118/2023-12-07/smdistributed_dataparallel-2.0.2-cp310-cp310-linux_x86_64.whl
```

**その他の変更**
+ このリリース以降、SMDDP ライブラリのドキュメントはすべて *Amazon SageMaker AI デベロッパーガイド*に掲載されます。SMDDP v2 のデベロッパーガイドの全文が *Amazon SageMaker AI デベロッパーガイド*に掲載されるようになったことを受けて、*SageMaker AI Python SDK ドキュメント*の [SMDDP v1.x の追加リファレンス](https://sagemaker.readthedocs.io/en/stable/api/training/smd_data_parallel.html)に関するドキュメントはサポート対象外になりました。SMP v1.x のドキュメントが引き続き必要な場合は、[SageMaker Python SDK v2.212.0 のドキュメント](https://sagemaker.readthedocs.io/en/v2.212.0/api/training/distributed.html#the-sagemaker-distributed-data-parallel-library)のスナップショットを参照してください。