AIACC-ACSpeed体验示例

AIACC-ACSpeed(简称ACSpeed)作为阿里云自研的AI训练加速器,在提高训练效率的同时能够降低使用成本,可以实现无感的分布式通信性能优化。ACSpeed软件包中已为您提供了适配DDP的示例代码,您可以参考本文快速体验使用ACSpeed进行模型分布式训练的过程以及性能提升效果。

操作步骤

本文以原生DDP的启动方式运行Pytorch_ddp_benchmark.py文件,以模型为resnet50的amp混合精度训练为例,通过适配ACSpeed v1.0.2来体验单机8卡和多机多卡实例类型的分布式训练过程和性能提升效果。

重要

在操作前,确保您已创建具有初始Python环境的阿里云GPU实例。

  1. 执行如下命令,安装指定版本的PyTorch。

    本示例以torch 1.9.1为例。

    pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html
  2. 安装和启用ACSpeed。

    具体操作,请参见安装和使用AIACC-ACSpeed

  3. 执行如下命令,进入ACSpeed示例代码目录。

    cd `python -c "import acspeed; print(acspeed.__path__[0]+'/examples/')"`
    说明

    ACSpeed代码相比原始的DDP基线代码只是增加一行import acspeed,注释掉该代码行,即为原始的DDP基线代码。

  4. 启动训练。

    以下示例为单机8卡和多机多卡模型训练的启动命令。其中,单机8卡在ecs.ebmgn7t.32xlarge和ecs.ebmgn6t.24xlarge机型上的提升效果比较显著。

    单机8卡模型

    • 启动命令

      NP=8
      ADDR=localhost
      PORT=6006
      model=resnet50
      python -m torch.distributed.run --nnodes 1 --node_rank 0 --nproc_per_node ${NP} --master_addr ${ADDR} --master_port ${PORT} Pytorch_ddp_benchmark.py --model ${model} --precision amp
    • 训练结果

      通过原始的DDP基线代码训练后,训练结果如下所示:

      8 GPUs --    1M/8G:  p50:  0.073s     440/s  p75:  0.073s     438/s  p90:  0.073s     437/s  p95:  0.073s     436/s

      通过ACSpeed代码训练后,训练结果如下所示:

      8 GPUs --    1M/8G:  p50:  0.054s     597/s  p75:  0.054s     592/s  p90:  0.056s     569/s  p95:  0.056s     568/s
    • 效果对比

      相比较通过原始的DDP基线代码训练模型,使用ACSpeed代码训练单机8卡模型时性能提升35%,即(597-440)/440=35%。

    多机多卡模型

    • 启动命令

      # node0
      python -m torch.distributed.run --nnodes 2 --node_rank 0 --nproc_per_node 8 --master_addr <node1_ip> --master_port <port> Pytorch_ddp_benchmark.py --model resnet50 --precision amp
      
      # node1
      python -m torch.distributed.run --nnodes 2 --node_rank 1 --nproc_per_node 8 --master_addr <node1_ip> --master_port <port> Pytorch_ddp_benchmark.py --model resnet50 --precision amp
    • 训练结果

      通过原始的DDP基线代码训练后,训练结果如下所示:

      16 GPUs --    2M/16G:  p50:  0.091s     351/s  p75:  0.091s     349/s  p90:  0.092s     348/s  p95:  0.092s     347/s

      通过ACSpeed代码训练后,训练结果如下所示:

      16 GPUs --    2M/16G:  p50:  0.071s     449/s  p75:  0.072s     442/s  p90:  0.073s     436/s  p95:  0.074s     432/s
    • 效果对比

      相比较通过原始的DDP基线代码训练模型,使用ACSpeed代码训练多机多卡模型时性能提升27%,即(449-351)/351=27%。

相关文档

使用AIACC-ACSpeed训练多个模型时,其性能可显著提升。如需了解更多机型的性能测试效果,请参见AIACC-ACSpeed性能数据