0

全部,

我正在尝试使用 AWS sagemaker 数据并行方法进行分布式训练(使用两个库) from smdistributed.dataparallel.torch.parallel.distributed import DistributedDataParallel as DDP import smdistributed.dataparallel.torch.distributed as dist 尽管数据被划分为所有的 GPU ("ml.p3.16xlarge" , 8 Gpus) 但是单实例或双实例的训练时间仍然没有减少。

早些时候,我们尝试使用 Sagemaker Inbuilt 算法 Resnet101 获得相同的数据,100 个 epoch 的训练时间约为 2080 秒(批量大小 - 64),这是我们希望通过分布式训练改进的基准

现在,当我们尝试使用分布式数据并行方法进行分布式训练时,我们正在训练 20 个 epoch - 时间是 1600 秒(批量大小 - 64),我们正在训练 20 个 epoch - 时间是 1300 秒(批量大小 - 128)我们正在训练 20 个 epoch - 时间是 1063 秒(批量大小 - 258)。

即使使用不同的批量大小,训练时间也没有太大改善。

训练数据 - 6016 张图像。测试数据 - 745 张图像。

4

1 回答 1

0

假设您同时增加批量大小和实例数,因此每个/gpu 的批量大小保持不变。将实例翻倍所带来的速度提升似乎并不多。可能有几个原因:

  1. 您的模型有一个 I/O 瓶网,如果您的数据在AWS FSX上并且 fsx 吞吐量太低,则在尝试将训练数据提供给所有实例时可能会减慢训练速度。FSX 吞吐量可以通过增加存储大小来增加。
  2. 您的模型具有用于数据预处理的繁重 CPU 逻辑,如果可能与 SM Dataparallel 竞争 CPU 资源并使 GPU 处于饥饿状态。您可以尝试批处理数据预处理/增强,或使用Nvidia DALI将其卸载到 GPU。

如果您仍然遇到问题,请创建支持案例并要求服务团队协助。https://console.aws.amazon.com/support/home?#/

谢谢!

于 2022-02-24T18:10:56.280 回答