由Uber公司的开发的Horovod架构,是一个集成了多个深度学习的统一平台,提供分布式训练效率的同事,让深度学习分布式训练变得更方便。
在深度学习领域中,当计算数据较多或者模型较大时,为提高模型训练效率,一般采用多GPU的分布式训练,常见的深度学习框架都支持分布式训练,虽然这些框架都各自有分布式实现,但不能统一到一个平台上,造成使用上体验不好,由Uber公司的开发的Horovod架构,它是一个集成了多个深度学习的统一平台,提供分布式训练同时则让深度学习分布式训练变得更方便。本文主要对Horovod的工作原理进行简单介绍,然后给出TI上包含镜像制作以及ti平台的使用。
Uber公司开发的Horovod架构是利用nvidia的NCCL2作为底层的通信基础,实现了单机多卡,多机多卡分布式训练高效的线性加速。为了更好描述NCCL2的通信原理,下面通过两幅图进行表述:图1是单机多卡的通信原理(GPU Direct P2P),图2是多机多卡的通信原理(GPU Direct RDMA)。从图中可以看到,无论单机的GPU通信还是多机的GPU通信,只需要保证GPU在相同PCI-e总线下,即可实现GPU对其他GPU Memory的访问,最终达到高带宽、低延迟和低资源利用率的效果。这点对于深度学习的模型训练而言,通过利用GPU间高带宽完成梯度更新 + 参数更新,可明显的提高整个训练速度。
图1:单机多卡GPU Direct P2P
图2表明跨机的通信,需要网络设备的支持(即网络设备和GPU挂载相同的PCI-e总线下),通信的技术为RDMA,目前RDMA的实现方式主要分为InfiniBand和Ethernet两种传输网络。
官方提供的ubuntu16.04制作有点问题,首先是gcc版本太高编译通不过,需要降级gcc g++到4.9版本,这个制作过程还是躺了不少坑的。
ENV TENSORFLOW_VERSION=1.12.0
ENV PYTORCH_VERSION=1.3.0
ENV TORCHVISION_VERSION=0.4.1
ENV CUDNN_VERSION=7.4.1.5-1+cuda9.0
ENV NCCL_VERSION=2.3.7-1+cuda9.0
ENV MXNET_VERSION=1.4.1
ENV PYTHON_VERSION=3.5如下修改:# downgrade gcc g++ ,becase tensorflow incompatable
RUN apt-get install -y gcc-4.9 && apt-get install -y g++-4.9 && \
cd /usr/bin && \
rm gcc && \
ln -s gcc-4.9 gcc && \
rm g++ && \
ln -s g++-4.9 g++ && \
gcc --version
另外镜像处理了ssh生成秘钥操作,分布式计算节点ssh通信可以无密访问了:
RUN ssh-keygen -t rsa && \
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
详情可以联系作者查看dockerfile文件。
本文使用Pytorch MNIST搭建手写识别算法作为GPU分布式训练性能测试的脚本,所用脚本和训练数据(pytorch_mnist.py + mnist.npz)可以从附件中下载,所在应用组资源有限只分配个位数卡,M40机器还只有1机2卡的机型,暂时只验证对比了M40:1机1卡,1机2卡和2机2卡,2机4卡 ,基本上算是基本功能的验证。其它bg同时如果有更多GPU资源可以做更多对比。
测试数据集: Pytorch MNIST 60000 samples (batch size=100)
文章简单说明了horovod镜像制作流程,以及简单的对比了性能
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。