【阿里云计算】【开发者成长】揭秘阿里云大规模深度学习性能优化实践( 六 )


多台 GPU 服务器上的 worker 会并行的做训练 , 并且并行的从 CPFS 上读取训练数据 。 CPFS 可以提供多台 GPU 服务器并行访问数据的聚合 IOPS 和聚合带宽 , 而 AIACC 可以让多 GPU 之间的通信能够达到性能最优 。
【阿里云计算】【开发者成长】揭秘阿里云大规模深度学习性能优化实践
本文插图

下图是大规模图像识别分布式训练性能优化的结果 。 Uber 开源的 Horovod 也是一个分布式训练优化的框架 , 主要做的是基于 ring-allreduce 环形通信的优化 。 它的分布式性能会比原生的 Tensorflow 和其他框架分布式性能要好 。 在我们这个案例里 , 基于 32 张 P100 的训练训练性能比 Horovod 的性能可以提升 65% , 基于 128 张卡 P100 训练性能比 Horovod 提升 80% 。
【阿里云计算】【开发者成长】揭秘阿里云大规模深度学习性能优化实践
本文插图

第 2 个案例是大规模 CTR 预估的分布式训练 。
CTR 预估会根据每个人在网上的行为做千人千面的推荐 , 例如根据每个人的点击、停留、点赞、转发、购买等行为 , 推荐用户可能感兴趣的内容、商品或者广告 。
这个案例需要训练的数据量有 1 千亿 , 它的模型是 Wide&Deep 的模型 , 用的分布式框架是 Tensorflow 。
我们先通过 FastGPU 一键拉起架构 , 包括多台 2 卡 M40 的 GPU 服务器、10Gb 网络和文件系统 HDFS , 并且通过 AIACC-Tensorflow 框架来做分布式训练 。
【阿里云计算】【开发者成长】揭秘阿里云大规模深度学习性能优化实践
本文插图

可右边这张图中 , 绿色的部分是原始 Tensorflow 的性能 , 随着节点数的增加并没有太多的性能加速 , 在 1 天内训练 1 千亿的数据量根本不可能 。
我们定位了一下应用到性能瓶颈 , 瓶颈主要来自两个方面:一个方面是从 HDFS 上读取文件的 IO 瓶颈 , 另一个方面来自于多机之间的通信瓶颈 。
我们通过多线程并行读取和多缓冲队列来优化文件的 IO , 通过 AIACC 的通信优化技术来优化多机之间的通信性能 。
最终我们在 4 张 GPU 卡上获得了 3.5 倍的性能提升 , 在 64 张 GPU 卡上获得了 8.5 倍的性能提升 , 在 128 张 GPU 卡上获得了 13.4 倍的性能提升 , 5 小时可以训练 1 千亿的数据量 。
【阿里云计算】【开发者成长】揭秘阿里云大规模深度学习性能优化实践
本文插图

第 3 个案例是大规模人脸识别分布式训练 。
在人脸识别的场景下 , 分布式训练的复杂度会随着人脸识别的分类数的增加而增加 , 这个案例的人脸分类数达到了千万级人脸 , 模型是 InsightFace , 计算框架式是 MXNET 。
我们先用 FastGPU 一键拉起多台 8 卡 P100 的 GPU 服务器、25Gb 网络和并行文件系统 CPFS , 并且用 AIACC-MXNET 来做分布式训练 。
【阿里云计算】【开发者成长】揭秘阿里云大规模深度学习性能优化实践
本文插图

在千万级人脸分类的场景下没有办法做纯粹的数据并行 , 需要做数据并行和模型并行的混合并行 。 所以我们扩展了 AIACC 的接口 , 一方面支持 MXNET 的 kvstore 接口 , 一方面支持数据并行和模型并行的混合并行 , 这样通过 AIACC-MXNET 将人脸识别的能力提升到千万级别 , 最终在 16 张 GPU 卡上性能可以提升 56% , 在 32 张 GPU 卡上性能可以提升 135% , 在 64 张 GPU 卡上性能可以提升 280% 。
【阿里云计算】【开发者成长】揭秘阿里云大规模深度学习性能优化实践
本文插图

第 4 个案例是大规模自然语言理解分布式训练 。
这个案例的模型有 Transformer 和 Bert 模型 , 其中 Bert 是 Google 开源的一个非常大的模型 , 在 NLP 的竞赛中取得了非常好的成绩 。 它有 1.1 亿个参数 , 对于分布式训练的加速比是一个非常大的挑战 。 我们通过 FastGPU 一键拉起多台 8 卡 P100 的 GPU 服务器、25Gb 网络和并行文件系统 CPFS , 并且通过 AIACC-Tensorflow 来做分布式训练 。


推荐阅读