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


而我们另一个架构升级 FastGPU 即刻构建主要帮助用户快速搭建大规模分布式训练集群 , 并且帮助客户在云端做到业务成本最优化 , 接下来和大家介绍通过 FastGPU 即刻构建云端大规模分布式训练集群 。
因为现在阿里云的云计算服务都会提供 OpenAPI 的接口直接创建计算资源、存储资源和网络资源 。 我们可以通过 FastGPU 来封装这些 OpenAPI 接口来直接创建出一个云端的大规模分布式的集群 , 同时可以开始大规模分布式的训练任务 。
【阿里云计算】【开发者成长】揭秘阿里云大规模深度学习性能优化实践
本文插图

如上图所示 , 绿色部分代表用户 , 蓝色部分代表阿里云资源 , 橙色部分代表 FastGPU 。 用户在起始状态的时候 , 先把训练数据集上传到云存储 OSS 里 , 开一台 ECS 做为开发主机来存训练代码(或者放在 Cloud Shell 上) 。 然后在这台开发机上一键就可以通过 FastGPU 来创建深度学习应用需要的基础资源 , 包括大规模 GPU 计算资源、云盘和并行文件系统的存储资源、Tmux 和 Tensorboard 的交互式资源 , 都可以创建出来 , 用户可以通过交互式资源实时查看训练过程 。
等训练所需要的资源都 ready 之后 , 就可以自动的启动分布式训练任务 。 当分布式训练任务结束之后 , 可以自动的释放这些基础资源 , 训练得到的模型和 log 文件可以存在 OSS 或者开发机上供用户使用 。
FastGPU 能够做到既省时、又省钱、又易用 。
首先是节省时间 , 举个例子 , 我们之前要配置一个分布式的深度学习环境的话 , 需要先准备 GPU 的基础资源、网络资源 , 再准备存储资源 , 然后需要配置每台机器的深度学习环境:包括某版本的操作系统、某版本的 GPU 驱动、某版本的 CUDA、某版本的 cuDNN、某版本的 Tensorflow 等 , 然后再把训练数据上传到每台机器上 , 然后再把多台机器之间的网络打通 , 这个可能要耗费一个工程师一天的时间来准备环境 , 而用 FastGPU 的话只需要 5 分钟的时间就可以完成 。
其次是省钱 , 我们可以做到让 GPU 资源的生命周期和训练的生命周期保持同步 , 也就是说只有在我们的训练或者推理任务准备好时才去开启 GPU 资源 , 而当训练或者推理任务结束之后 , 就会自动的释放掉 GPU 的资源 , 不会造成 GPU 资源的闲置 , 同时也支持可抢占 GPU 实例(低价格实例)的创建和管理 。
第三是易用 , 我们创建的所有的资源都是 IaaS(基础设施)的资源 , 所有创建的资源和运行的任务都是可访问、可调式、可复现和可回溯的 。
大规模深度学习应用架构和性能优化实践 在做大规模分布式训练的时候 , 我们希望训练的性能能够随着 GPU 数量的增长而线性增长 , 但是实际情况下往往达不到这么理想的加速比 , 甚至往往在增加 GPU 服务器时 , 性能却没有相应增加 。
其中主要有两方面的瓶颈 , 一方面在多台 GPU 服务器同时读取训练文件的时候 , 文件系统的并行访问能力包括 IOPS 和带宽会是瓶颈;另外一方面 , GPU 服务器之间的通信会是瓶颈 。
在阿里云上可以一键创建高并发的并行文件系统 CPFS 解决文件高并发访问的问题 , 而通过 AIACC 来解决大规模分布式通信的性能问题 。
最后 , 跟大家分享图像识别、大规模 CTR 预估、大规模人脸识别、大规模自然语言理解 , 这 4 个大规模深度学习场景的应用架构和性能优化的实践 。
第 1 个案例是一键构建大规模图像识别的分布式训练任务 。
这个场景需要训练 128 万张 ImageNet 的图片 , 模型是 ResNet-50 和 VGG-16 , 训练框架是 Tensorflow 。
通过 FastGPU 一键拉起右边的架构 , 包括多台 8 卡 P100 的 GPU 服务器、25Gb 网络和并行文件系统 CPFS , 并且通过 AIACC-Tensorflow 框架来做分布式训练 。


推荐阅读