

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

# 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)」を参照してください。