- 学习使用Horovod库。
- 通过调用不同的通信后端实现数据并行的并行/分布式训练,了解各种后端的基本原理和适用范围。
- 通过实际操作,灵活掌握安装部署。
- Ubuntu 18.04
- CUDA 10.0
- PyTorch==1.5.0
- Horovod==0.19.4
通过测试MPI、NCCL、Gloo、oneCCL后端完成相同的allreduce通信,通过不同的链路实现数据传输。
-
安装依赖支持:OpenMPI, Horovod。
-
运行Horovod MNIST测试用例(
Lab7/pytorch_mnist_horovod.py
),验证Horovod正确安装。 -
按照MPI/Gloo/NCCL的顺序,选用不同的通信后端,测试不同GPU数、不同机器数时,MNIST样例下iteration耗时和吞吐率,记录GPU和机器数目,以及测试结果,并完成表格绘制。
-
安装MPI,并测试多卡、多机并行训练耗时和吞吐率。可参考如下命令:
//单机多CPU $horovodrun -np 2 python pytorch_mnist_horovod.py --no-cuda //多机单GPU $horovodrun -np 4 -H server1:1,server2:1,server3:1,server4:1 python pytorch_mnist_horovod_basic.py
-
测试Gloo下的多卡、多机并行训练耗时。
-
安装NCCL2后重新安装horovod并测试多卡、多机并行训练耗时和吞吐率。
-
-
(可选)安装支持GPU通信的MPI后重新安装horovod并测试多卡、多机并行训练耗时和吞吐率。
$ HOROVOD_GPU_ALLREDUCE=MPI pip install --no-cache-dir horovod
-
(可选)若机器有Tesla/Quadro GPU + RDMA环境,尝试设置GPUDirect RDMA 以达到更高的通信性能
-
统计数据,绘制系统的scalability曲线H
-
(可选)选取任意RNN网络进行并行训练,测试horovod并行训练耗时和吞吐率。
硬件环境 | 服务器数目 | |
网卡型号、数目 | ||
GPU型号、数目 | ||
GPU连接方式 | ||
软件环境 | OS版本 | |
GPU driver、(opt. NIC driver) | ||
深度学习框架 python包名称及版本 |
||
CUDA版本 | ||
NCCL版本 | ||
-
测试服务器内多显卡加速比
通信后端 服务器数量 每台服务器显卡数量 平均每步耗时 平均吞吐率 加速比 MPI 1 MPI 1 ... Gloo 1 Gloo 1 ... NCCL 1 NCCL 1 ... -
测试服务器间加速比
通信后端 服务器数量 每台服务器显卡数量 平均每步耗时 平均吞吐率 加速比 MPI 1 MPI 1 Gloo 1 Gloo 1 NCCL 1 NCCL 1 -
总结加速比的图表、比较不同通信后端的性能差异、分析可能的原因
- (可选)比较不同模型的并行加速差异、分析可能的原因(提示:计算/通信比)
-
安装依赖支持
安装OpenMPI:
sudo apt install openmpi-bin
安装Horovod:
python3 -m pip install horovod==0.19.4 --user
-
验证Horovod正确安装
运行mnist样例程序
python pytorch_mnist_horovod_basic.py
-
选用不同的通信后端测试命令
- 安装MPI,并测试多卡、多机并行训练耗时和吞吐率。
//单机多CPU $horovodrun -np 2 python pytorch_mnist_horovod.py --no-cuda //单机多GPU $horovodrun -np 2 python pytorch_mnist_horovod.py //多机单GPU $horovodrun -np 4 -H server1:1,server2:1,server3:1,server4:1 python pytorch_mnist_horovod_basic.py //多机多CPU $horovodrun -np 16 -H server1:4,server2:4,server3:4,server4:4 python pytorch_mnist_horovod_basic.py --no-cuda //多机多GPU $horovodrun -np 16 -H server1:4,server2:4,server3:4,server4:4 python pytorch_mnist_horovod_basic.py
- 测试Gloo下的多卡、多机并行训练耗时。
$horovodrun --gloo -np 2 python pytorch_mnist_horovod.py --no-cuda $horovodrun -np 4 -H server1:1,server2:1,server3:1,server4:1 python pytorch_mnist_horovod_basic.py $horovodrun –gloo -np 16 -H server1:4,server2:4,server3:4,server4:4 python pytorch_mnist_horovod_basic.py --no-cuda
- 安装NCCL2后重新安装horovod并测试多卡、多机并行训练耗时和吞吐率。
$HOROVOD_GPU_OPERATIONS=NCCL pip install --no-cache-dir horovod $horovodrun -np 2 -H server1:1,server2:1 python pytorch_mnist_horovod.py
- 安装支持GPU通信的MPI后重新安装horovod并测试多卡、多机并行训练耗时和吞吐率。
HOROVOD_GPU_ALLREDUCE=MPI pip install --no-cache-dir horovod
- 安装MPI,并测试多卡、多机并行训练耗时和吞吐率。
-
PyTorch MNIST测试用例:https://github.com/horovod/horovod/blob/master/examples/pytorch/pytorch_mnist.py
-
Horovod on GPU: https://github.com/horovod/horovod/blob/master/docs/gpus.rst
-
NCCL2 download: https://developer.nvidia.com/nccl/nccl-download