分布式并行训练 (GPU)¶
GPU
进阶
分布式并行
本篇教程我们主要讲解,如何在GPU硬件平台上,利用LuoJiaNET的数据并行及自动并行模式训练ResNet-50网络。
配置分布式环境¶
OpenMPI-4.0.3
:LuoJiaNET采用的多进程通信库。NCCL-2.7.6
:Nvidia集合通信库。
调用集合通信库¶
在GPU硬件平台上,LuoJiaNET分布式并行训练的通信使用的是NCCL。
同时,LuoJiaNET可加入一行代码:
context.set_auto_parallel_context(parallel_mode=context.ParallelMode.AUTO_PARALLEL)
,
指定自动并行模式,获取设备的最优并行能力。
下面是调用自动并行的代码样例:
from luojianet_ms import context
from luojianet_ms.communication import init
if __name__ == "__main__":
context.set_context(mode=context.GRAPH_MODE, device_target="GPU")
context.set_auto_parallel_context(parallel_mode=context.ParallelMode.AUTO_PARALLEL)
init("nccl")
...
其中,
mode=context.GRAPH_MODE
:使用分布式训练需要指定运行模式为图模式。init("nccl")
:使能NCCL通信,并完成分布式训练初始化操作。
#!/bin/bash
mkdir device
mpirun -n 8 pytest -s -v ./resnet50_distributed_training.py > train.log 2>&1 &
脚本会在后台运行,日志文件会保存到device目录下,共跑了10个epoch,每个epoch有234个step,关于Loss部分结果保存在train.log中。选取部分示例,如下:
epoch: 1 step: 1, loss is 2.3025854
epoch: 1 step: 1, loss is 2.3025854
epoch: 1 step: 1, loss is 2.3025854
epoch: 1 step: 1, loss is 2.3025854
epoch: 1 step: 1, loss is 2.3025854
epoch: 1 step: 1, loss is 2.3025854
epoch: 1 step: 1, loss is 2.3025854
epoch: 1 step: 1, loss is 2.3025854
在GPU上进行分布式训练时,模型参数的保存和加载可参考分布式训练模型参数保存和加载