阿里云GPU云服务器TensorFlow单机多卡训练性能实践

1 背景
  2015年11月9日,Google发布深度学习框架TensorFlow。Google表示,TensorFlow在设计上尤其针对克服其第一代深度学习框架DistBelief 的短板,灵活、更通用、易使用、更快,而且完全开源。在短短的一年时间内,在GitHub上,TensorFlow就成为了最流行的深度学习项目。
  本文将介绍TensorFlow在阿里云GPU云服务器上的单机性能表现,并对单机多卡的训练性能调优给出了一些建议。

2 使用卷积神经网络进行图像分类
  卷积神经网络(Convolutional Neural Network)是一种前馈神经网络,对于图像处理有非常出色的表现。早在20世纪80年代末,Yann LeCun(曾在多伦多大学跟随深度学习鼻祖Geoffrey Hinton进行博士后研究)作为贝尔实验室的研究员提出了卷积网络技术,并展示如何使用它来大幅度提高手写识别能力。
  2012年,Geoffrey E. Hinton的弟子Alex Krizhevsky在ILSVRC-2012的图像分类比赛中使用2块Nvidia GTX 580 GPU训练的多层神经网络(后来被称为AlexNet)以15.3%的top-5测试错误率摘得冠军。AlexNet包含6000万参数和65万神经节点。
  2014年,Google公司的GoogleNet摘得ILSVRC挑战赛的冠军,将Top5 的错误率降低到6.67%,它是一个22层的卷积神经网络,有500多万个参数。
  VGG,ILSVRC-2014的亚军,Top5 的错误率为7.32%,16层的VGG网络,参数高达1亿3千多万。
  ResNet,ILSVRC’15数据集可以达到3.57%的Top-5错误率,50层的ResNet参数90多万,152层参数230多万。
  InceptionV3,GoogLeNet的升级版,参数不到250万,ILSVRC-2012数据集Top-5错误率可以达到3.5%。
  卷积神经网络在图像分类领域已经取得了非常好的表现,被广泛采用,我们将会使用以上几个主流的卷积神经网络的TensorFlow训练BenchMark在阿里云GN5 GPU云服务器(8卡P100)上进行性能测试,并给出性能调优的一些建议。

3 调优策略
  如何在多GPU机器上获得最优的训练性能是用户非常关心的问题。通常的方法是使用数据并行。也就是说要将模型的多个拷贝放到每个GPU上,将一个batch的数据划分到每个GPU上计算。每个GPU如何获取更新的变量以及返回梯度对最终的性能和扩展性都会有影响。
  针对不同复杂度的网络,会有不同的策略。网络的复杂度体现在变量的数目以及网络的深度,最终会体现在参数传递的数据量和计算量上,对于单机多卡,会更多的考虑变量的规模,这会直接决定训练过程中的通信数据量,从而影响最终的扩展性。
  目前在TensorFlow上对于变量的放置主要有两种策略,一种是Parameter Server,一种是Replicated。
  下面几节会详细介绍这些策略以及相应的使用场景,但在阿里云GPU云服务器上的最佳策略,我们会在后面的数据实测章节通过实验来说明。
3.1 Parameter Server
  这种模式下,梯度的聚合放到参数服务器(Parameter Server)上,参数服务器可以是CPU也可以是GPU,通常会放到CPU上。每个GPU上的训练模型副本都会从参数服务器获取最新的变量并各自更新自己本地的变量。获取变量的方式是使用TensorFlow中的标准显示拷贝。
  一般建议像ResNet、InceptionV3这样的参数规模较小的网络,可以选择参数服务器模式,拷贝的压力不会太大。
3.2 Replicated
  这种模式下,服务器上的每个GPU都有模型的副本和自己的变量。变量的值在获取到完全聚合的梯度后会在本地完成变量的更新。所以在训练开始的时候变量和数据本地都已准备好,可以立即开始前向的计算,后向计算需要汇总说有的GPU计算结果后使用聚合的梯度。
  梯度聚合一般有两种方式:

  1. 使用标准的TensorFlow操作汇总到一个设备上(CPU或者是GPU),然后再将聚合的梯度拷贝回所有的GPU。
  2. 使用NVIDIA的NCCL,具体会在下节阐述。
    一般建议像AlexNet和VGG这样的参数规模比较大的网络使用这种方式,避免使用Parameter Server模式时集中在一个设备上做梯度聚合和变量更新导致出现通信性能瓶颈。

3.3 NCCL
  如上节所述,为了在不同GPU间广播变量和聚合梯度,可以使用TensorFlow的拷贝机制,也可以选择NCCL。
  NCCL(NVIDIA Collective Communications Library)提供了不同GPU间广播和聚合数据的高效通信原语。NCCL会在每个GPU上调度一个协同工作的kernel,这个kernel知道如何最好的利用底层硬件的拓扑(比如可以利用GPUDirect P2P技术或者NVLink)从而选择合理的通信策略,这个kernel会使用GPU上的一个SM(streaming multiprocessor)来完成上述通信工作。
  使用NCCL通常能够带来更高的通信速度,但是并不一定能够加速整体的训练性能。因为尽管NCCL可以有更快的传输数据,但是它会占用一个SM资源,同时会增加L2 Cache的压力,所以在某些场景下可能反而加速效果并不如拷贝机制。比如当GPU数目比较多时可能使用NCCL效果会比较好,但是GPU比较少时,拷贝可能会比较好。我们可以从后面的实测数据分析中看到这个结论。

4 性能实测
  我们在阿里云上的GN5 GPU云服务器(8卡P100)上使用TensorFlow测试了InceptionV3、ResNet50、ResNet152、AlexNet、VGG16几个经典卷积神经网络的用于图像分类模型的训练性能,并使用不同的策略做了比较,具体实测数据如下。
4.1 InceptionV3
Parameter Server(CPU):

Parameter Server(GPU):

Replicated(NCCL):

Replicated(NONE):

Replicated(PSCPU):

4.2 ResNet50
Parameter Server(CPU):

Parameter Server(GPU):

Replicated(NCCL):

Replicated(NONE):

Replicated(PSCPU):

4.3 ResNet152
Parameter Server(CPU):

Parameter Server(GPU):

Replicated(NCCL):

Replicated(NONE):

Replicated(PSCPU):

4.4 AlexNet
Parameter Server(CPU):

Parameter Server(GPU):

Replicated(NCCL):

Replicated(NONE):

Replicated(PSCPU):

4.5 VGG16
Parameter Server(CPU):

Parameter Server(GPU):

Replicated(NCCL):

Replicated(NONE):

Replicated(PSCPU):

5 数据分析

  从以上实测数据,我们可以总结出在GN5实例上的性能策略:

  1. InceptionV3和ResNet这样参数规模不是很大的网络,使用CPU做Parameter Server的8卡性能都比较好,另外,使用Replicated策略时,只使用CPU做梯度聚合时的8卡性能最好,甚至比CPU做Parameter Server还好。所以借助CPU集中处理参数更新或者梯度聚合,对于参数规模不大的网络来说,的确具有更好的多卡性能扩展性。
  2. 对于AlexNet和VGG16这样的参数规模比较大的网络,使用Replicated策略的NCCL和PSCPU方式的性能都比较好,不过使用CPU做Parameter Server的效果也不错。当然,对于即将发布的支持NVLink的GN6(V100)GPU云服务来说,相信针对NVLink特别优化的NCCL会有更出色表现,后续我们会在GN6上通过实测来分析验证。
  3. 使用Replicated策略时,NCCL在2卡或者4卡的性能都不是最好的或者是相对较差的,不如拷贝的方式,8卡时往往性能都比较好,这也说明了NCCL在GPU数量较多时的效果会更好一些。

6 总结
  本文通过实测给出了在阿里云GPU云服务器上使用TensorFlow进行单机多卡训练的一些性能调优指南,对于其他网络和框架同样有一定的参考意义,读者可以根据自己框架和网络的特点调整相应参数,从而达到最优的训练性能。

时间: 2024-10-24 16:01:14

阿里云GPU云服务器TensorFlow单机多卡训练性能实践的相关文章

【产品活动】阿里云GPU云服务器年付5折!阿里云异构计算助推行业发展!

活动规则:地域:国内所有地域规则:实例部分5折,不受台数限制活动购买年限:1年 / 2年 (实例5折,其他磁盘+网络折扣同目前线上) 立即购买 阿里云GPU云服务器全力支持AI生态发展,进一步普惠开发者红利,本周将会推出针对异构计算GPU实例GN5年付5折的优惠活动,希望能够打造良好的AI生态环境,帮助更多的人工智能企业以及项目顺利上云.随着深度学习对人工智能的巨大推动,深度学习所构建的多层神经网络模型的参数空间已从百万级上升到百亿级,这对计算能力提出了新的挑战.相比CPU,GPU更适合深度学习

GTC大会上“省钱”不亦乐乎,阿里云GPU人脸识别实在好玩!

"我是科学家"."我是治愈者(healer)"."我是保护者"."我是老师"等第一人称作为旁白,英伟达2017 GTC China(GPU技术大会中国分会)CEO黄仁勋(粉丝爱称"老黄")主题演讲--带入感极强,老黄介绍了以英伟达GPU驱动的人工智能如何在数据.医疗健康.翻译.机器人.自动驾驶.教学等等领域进行应用. 和5月的GTC相比,本次GTC China上推出的新品与宣布的合作案例大多集中在深度学习推

利用阿里云容器服务打通TensorFlow持续训练链路

本系列将利用Docker和阿里云容器服务,帮助您上手TensorFlow的机器学习方案 第一篇:打造TensorFlow的实验环境 第二篇:轻松搭建TensorFlow Serving集群 第三篇:打通TensorFlow持续训练链路 第四篇:利用Neural Style的TensorFlow实现,像梵高一样作画 第五篇:轻松搭建分布式TensorFlow训练集群(上) 本文是该系列中的第三篇文章, 将为您介绍如何利用阿里云的服务快速搭建TensorFlow从训练到服务的交付平台. 随着goog

阿里云发布国内首个可视化GPU云服务

本文讲的是阿里云发布国内首个可视化GPU云服务[IT168 资讯]2月24日,阿里云全新GPU计算实例GA1正式发布.这是一个集GPU.CPU.存储.网络于一体的计算实例.基于最新的AMD服务器图形处理卡能大大提升图形.图像渲染领域的计算效率. 这是国内首款可视化GPU计算实例,也是全球首个基于AMD GPU的公共云计算实例. GA1强大的图形处理和浮点数运算能力让可视化计算处理与获得洞见成为可能.据了解,该实例能够为用户提供单实例最大总计8192个并行处理核心.32GB的GPU显存.15 TF

阿里云轻量服务器价格及轻量与ECS服务器区别比较

阿里云轻量应用服务器是阿里云新推出的服务器,本文介绍阿里云轻量服务器的价格,已经何为"轻量"?轻量与阿里云ECS服务器有什么区别?轻量性能就一定不如ECS服务器吗? 什么是轻量应用服务器?轻量应用服务器是面向单机应用场景的新一代计算服务,提供精品应用一键部署,支持一站式的域名.网站.安全.运维.应用管理等服务,极大地优化了搭建简单应用的体验,降低了入门级用户使用云计算产品的门槛.简单来说轻量应用服务器图形化操作,不仅集成了web环境,还只是包括系统镜像在内的其他应用镜像,让用户动动鼠标

使用云监控自定义监控实现GPU云服务器的GPU监控和报警

1 背景NVIDIA提供了nvidia-smi命令工具用于查询和监控GPU的相关数据,但是对于使用者来说,每次手动查看很不方便,无法做到实时监控,而且也无法可视化,不直观.本文将会介绍如何利用阿里云云监控服务提供的自定义监控功能来实现GPU云服务器的GPU监控和报警的可视化.2 自定义监控和报警阿里云云监控服务提供了自定义监控功能,用户可以利用它实现自定义的数据监控和报警.我们利用自定义监控提供的API或者SDK,可以将GPU云主机内采集的GPU数据上报,在云监控控制台上添加相应的GPU监控项,

使用云监控自定义监控实现GPU云服务器的GPU监控

本文将介绍如何利用阿里云云监控服务提供的自定义监控实现GPU云服务器的GPU监控和报警的可视化,从而达到对GPU使用情况实时掌握的目的. 1 背景 NVIDIA提供了nvidia-smi命令工具用于查询和监控GPU的相关数据,但是对于使用者来说,每次手动查看很不方便,无法做到实时监控,而且也无法可视化,不直观. 本文将会介绍如何利用阿里云云监控服务提供的自定义监控功能来实现GPU云服务器的GPU监控和报警的可视化. 2 自定义监控和报警 阿里云云监控服务提供了自定义监控功能,用户可以利用它实现自

使用腾讯云 GPU 学习深度学习系列之二:Tensorflow 简明原理【转】

转自:https://www.qcloud.com/community/article/598765?fromSource=gwzcw.117333.117333.117333 这是<使用腾讯云 GPU 学习深度学习>系列文章的第二篇,主要介绍了 Tensorflow 的原理,以及如何用最简单的Python代码进行功能实现.本系列文章主要介绍如何使用 腾讯云GPU服务器 进行深度学习运算,前面主要介绍原理部分,后期则以实践为主. 往期内容: 使用腾讯云 GPU 学习深度学习系列之一:传统机器学

阿里云CentOS Linux服务器上如何用postfix搭建邮件服务器

注:本文的邮件服务器只用于发送邮件,也就是STMP服务器. 一.准备工作 1. 为邮件服务器添加DNS解析 虽然不加DNS解析也能把邮件发出去,但会被大多数邮件服务器当作垃圾邮件.根据我们的实际经验,需要添加三条DNS解析记录:A记录.MX记录.TXT记录.比如域名cnblogs.info,对应的DNS记录如下: 2. 准备存放邮件的硬盘空间 如果用的是阿里云入门级Linux服务器,有一块20G的数据盘未挂载,需要格式化并挂载(假设这里挂载的目录是/data),具体操作步骤见之前的博文阿里云云服