

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 L PyTorch ightning 训练脚本中使用 SMDDP 库
<a name="data-parallel-modify-sdp-pt-lightning"></a>

如果您想使用 [PyTorchLightning](https://pytorch-lightning.readthedocs.io/en/latest/starter/introduction.html) 训练脚本并在 SageMaker AI 中运行分布式数据并行训练作业，则只需对训练脚本进行最少更改即可运行训练作业。必要的更改包括：导入`smdistributed.dataparallel`库的 PyTorch 模块，设置 L PyTorch ightning 的环境变量以接受 SageMaker 训练工具包预设的 SageMaker AI 环境变量，以及通过将流程组后端设置为来激活 SMDDP 库。`"smddp"`要了解详情，请仔细阅读以下分别介绍了各个步骤并提供代码示例的说明。

**注意**  
 PyTorch Lightning 支持在 SageMaker AI 数据并行库 v1.5.0 及更高版本中可用。

## PyTorch Lightning == v2.1.0 和 == 2.0.1 PyTorch
<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** — 使用 for `process_group_backend` 和 `"gpu"` for 创建[DDPStrategy](https://lightning.ai/docs/pytorch/stable/api/lightning.pytorch.strategies.DDPStrategy.html)类`"smddp"`的对象`accelerator`，然后将其传递给 T [rainer](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** — 使用 for `process_group_backend` 和 `"gpu"` for 创建[FSDPStrategy](https://lightning.ai/docs/pytorch/stable/api/lightning.pytorch.strategies.FSDPStrategy.html)类的对象（可选择[包装策略](https://pytorch.org/docs/stable/fsdp.html)）`accelerator`，然后将其传递给 T [rainer](https://pytorch-lightning.readthedocs.io/en/stable/common/trainer.html) 类。`"smddp"`

   ```
   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
   )
   ```

调整完训练脚本后，继续到 [使用 Python SageMaker SDK 使用 SMDDP 启动分布式训练作业](data-parallel-use-api.md)。

**注意**  
构建 A SageMaker I PyTorch 估算器并在中提交训练任务请求时[使用 Python SageMaker SDK 使用 SMDDP 启动分布式训练作业](data-parallel-use-api.md)，需要在 SageMaker AI PyTorch 训练`requirements.txt`容器`lightning-bolts`中提供安装`pytorch-lightning`和。  

```
# requirements.txt
pytorch-lightning
lightning-bolts
```
有关指定存放`requirements.txt`文件以及训练脚本和作业提交的源目录的更多信息，请参阅 *Amazon A SageMaker I Python SDK 文档*中的[使用第三方库](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#id12)。