GPU云服务器深度学习性能模型初探

摘要: 本文根据实测数据,初步探讨了在弹性GPU云服务器上深度学习的性能模型,可帮助科学选择GPU实例的规格。

1 背景


  得益于GPU强大的计算能力,深度学习近年来在图像处理、语音识别、自然语言处理等领域取得了重大突破,GPU服务器几乎成了深度学习加速的标配。
  阿里云GPU云服务器在公有云上提供的弹性GPU服务,可以帮助用户快速用上GPU加速服务,并大大简化部署和运维的复杂度。如何提供一个合适的实例规格,从而以最高的性价比提供给深度学习客户,是我们需要考虑的一个问题,本文试图从CPU、内存、磁盘这三个角度对单机GPU云服务器的深度学习训练和预测的性能模型做了初步的分析,希望能对实例规格的选择提供一个科学的设计模型。
  下面是我们使用主流的几个开源深度学习框架在NVIDIA GPU上做的一些深度学习的测试。涉及NVCaffe、MXNet主流深度学习框架,测试了多个经典CNN网络在图像分类领域的训练和推理以及RNN网络在自然语言处理领域的训练。

2 训练测试


  我们使用NVCaffe、MXNet主流深度学习框架测试了图像分类领域和自然语言处理领域的训练模型。

2.1 图像分类
  我们使用NVCaffe、MXNet测试了图像分类领域的CNN网络的单GPU模型训练。
  NVCaffe和MXNet测试使用ImageNet ILSVRC2012数据集,训练图片1281167张,包含1000个分类,每个分类包含1000张左右的图片。

2.1.1 CPU+Memory

2.1.1.1 NVCaffe
  

NVCaffe是NVIDIA基于BVLC-Caffe针对NVIDIA GPU尤其是多GPU加速的开源深度学习框架。LMDB格式的ImageNet训练集大小为240GB ,验证集大小为9.4GB。
  我们使用NVcaffe对AlexNet、GoogLeNet、ResNet50、Vgg16四种经典卷积神经网络做了图像分类任务的模型训练测试。分别对比了不同vCPU和Memory配置下的训练性能。性能数据单位是Images/Second(每秒处理的图像张数)。图中标注为10000指的是迭代次数10000次,其它都是测试迭代次数为1000次。





2.1.1.2 MXNet
  MXNet的数据集使用RecordIO格式,ImageNet训练集 93GB ,验证集 3.7GB。
  我们使用网络Inception-v3(GoogLeNet的升级版)做了图像分类的训练测试。分别对比了不同vCPU和Memory配置下的训练性能。数据单位是Samples/Second(每秒处理的图像张数)。

2.1.2 磁盘IO
  我们在阿里云GN5(P100)实例上使用NVCaffe测试了GoogLeNet网络模型在NVMe SSD本地盘、SSD云盘和高效云盘上的训练性能,测试结果如下(性能数据单位是Images/Second):

2.2 自然语言处理
  我们使用MXNet测试了RNN网络的LSTM模型的训练,使用PennTreeBank自然语言数据集。PennTreeBank数据集的文本语料库包含近100万个单词,单词表被限定在10000个单词。分别对比了不同vCPU和Memory配置下的训练性能:

3 推理测试


3.1 图像分类
  

我们使用NVCaffe测试了图像分类领域的CNN网络的模型推理。
测试使用ImageNet ILSVRC2012数据集,验证测试图片 50000张。

3.1.1 CPU+Memory
  我们使用NVcaffe对AlexNet、GoogLeNet、ResNet50、VGG16四种经典卷积神经网络做了图像分类的推理测试。分别对比了不同vCPU和Memory配置下的训练性能。数据单位是Images/Second(每秒处理的图像张数)。

3.1.2 磁盘IO
  我们使用NVCaffe测试了GoogLeNet网络在NVMe SSD本地盘、SSD云盘和高效云盘上的图像分类推理性能,测试结果如下(数据单位是Images/Second):

4 数据预处理测试


  在训练模型之前,往往要对训练数据集做数据预处理,统一数据格式,并做一定的归一化处理。
  我们使用NVCaffe对ImageNet ILSVRC2012数据集做了数据预处理的测试,分别对比了NVMe SSD本地盘、SSD云盘和高效云盘的数据预处理时间,数据单位是秒,数据如下:

5 数据分析


5.1 训练


5.1.1 图像分类
  从NVCaffe和MXNet的测试结果来看,图像分类场景单纯的训练阶段对CPU要求不高,单GPU 只需要4vCPU就可以。而内存需求则取决于深度学习框架、神经网络类型和训练数据集的大小:测试中发现NVCaffe随着迭代次数的增多,内存是不断增大的,但是内存需求增大到一定程度,对性能就不会有什么提升了,其中NVCaffe AlexNet网络的训练,相比其它网络对于内存的消耗要大得多。相比之下MXNet的内存占用则要小的多(这也是MXNet的一大优势),93G预处理过的训练数据集训练过程中内存占用不到5G。
对于磁盘IO性能,测试显示训练阶段NVMe SSD本地盘、SSD云盘性能基本接近,高效云盘上的性能略差1%。因此训练阶段对IO性能的要求不高。

5.1.2 自然语言处理
  从MXNet的测试结果来看,对于PennTreeBank这样规模的数据集,2vCPU 1GB Mem就能满足训练需求。由于自然语言处理的原始数据不像图像分类一样是大量高清图片,自然语言处理的原始数据以文本文件为主,因此自然语言处理对内存和显存的要求都不高,从我们的测试来看,4vCPU 30GB 1GPU规格基本满足训练阶段需求。

5.2 推理


5.2.1 图像分类
  从NVCaffe的图像分类推理测试来看,除AlexNet 2vCPU刚刚够用外,其它网络2vCPU对性能没有影响,而9.4GB的验证数据集推理过程中内存占用大概是7GB左右,因此对大部分模型来看,2vCPU 30GB 1GPU规格基本满足图像分类推理的性能需求。
  对于磁盘IO性能,推理性能NVMe SSD本地盘、SSD云盘很接近,但高效云盘差15%。因此推理阶段至少应该使用SSD云盘保证性能。
5.2.2 自然语言处理
  对于自然语言处理,参考训练性能需求,我们应该可以推测2vCPU 30GB 1GPU规格应该也能满足需求。

5.3 数据预处理


  从NVCaffe对ImageNet ILSVRC2012数据集做数据预处理的测试来看,数据预处理阶段是IO密集型,NVMe SSD本地盘比SSD云盘快25%,而SSD云盘比高效云盘快10%。

6 总结


  深度学习框架众多,神经网络类型也是种类繁多,我们选取了主流的框架和神经网络类型,尝试对单机GPU云服务器的深度学习性能模型做了初步的分析,结论是:

  1. 深度学习训练阶段是GPU运算密集型,对于CPU占用不大,而内存的需求取决于深度学习框架、神经网络类型和训练数据集的大小;对磁盘IO性能不敏感,云盘基本能够满足需求。
  2. 深度学习推理阶段对于CPU的占用更小,但是对于磁盘IO性能相对较敏感,因为推理阶段对于延迟有一定的要求,更高的磁盘IO性能对于降低数据读取的延时进而降低整体延迟有很大的帮助。
  3. 深度学习数据预处理阶段是IO密集型阶段,更高的磁盘IO性能能够大大缩短数据预处理的时间。

原文链接

干货好文,请关注扫描以下二维码:



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDC.2019后再发力,AppGallery Connect服务新升级

不久前,华为2019开发者大会在东莞松山湖圆满落,来自全球的1500多个合作伙伴、5000多名开发者汇聚一堂,共同探讨未来科技发展,其中华为应用市场AppGallery Connect服务也在大会上重磅亮相,引起了广大开发者的关注。如今…

idea 利用vue.js插件创建vue初始化项目

IDEA 构建出的 Vue 项目是不含 node_modules 的,所以要先调出终端,执行 npm install 运行完成后,输入 npm run dev 即可。 vue初始化项目完成!!! 另外 IDE 嘛,总是在 UI 上下了很多功夫&am…

Tensorflow快餐教程(4) - 矩阵

摘要: Tensorflow矩阵基础运算矩阵矩阵的初始化矩阵因为元素更多,所以初始化函数更多了。光靠tf.linspace,tf.range之类的线性生成函数已经不够用了。可以通过先生成一个线性序列,然后再reshape成一个矩阵的方式来初始化。例&…

为什么阿里程序猿纷纷在内网晒代码?

摘要: 大家知道,阿里有两万多名可爱的程序员。 他们也没什么别的爱好,就是多才多艺了一点:这帮阿里程序猿在改变世界前 要先撼动歌坛 就是热心肠了一点:阿里有个程序员,因为闯红灯上新闻了 虽然怕老婆但也能…

从七个方面,面试大厂高级工程师

戳蓝字“CSDN云计算”关注我们哦!在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间。我的标准其实不复杂:第一能干活;第二Java基础要好;第三最好熟悉些分布式框架。我相信其它公司招开发时&a…

Java需要掌握的底层知识_Java程序员应该掌握的底层知识

缓存缓存行:缓存行越大,局部性空间效率越高,但读取时间慢缓存行越小,局部性空间效率越低,但读取时间快取一个折中值,目前多用:64字节public class CacheLinePadding { //执行时间在4s左右public…

(vue基础试炼_01)使用vue.js 快速入门hello world

文章目录一、需求案例二、案例实现2.1. 原始js写法2.2. 怎样使用vue.js &#xff1f;2.3. 使用vue.js 写法三、案例vue简述&#xff1f;四、案例趣味延伸五、表达值作用及嘱咐语一、需求案例 在页面显示hello world 二、案例实现 2.1. 原始js写法 <!DOCTYPE html> &l…

如何让机器理解汉字一笔一画的奥秘?

摘要&#xff1a;从智能客服到机器翻译&#xff0c;从文本摘要生成到用户评论分析&#xff0c;从文本安全风控到商品描述建模&#xff0c;无不用到自然语言技术&#xff0c;作为人工智能领域的一个重要分支&#xff0c;如何让机器更懂得人类的语言&#xff0c;尤其是汉字这种强…

Logtail从入门到精通(三):机器分组配置

摘要&#xff1a; 基于集团内数年来的Agent运维经验总结&#xff0c;我们设计了一种灵活性更高、使用更加便捷、耦合度更低的配置&机器管理方式&#xff1a;自定义标识机器分组。此种方式对于动态环境非常适用&#xff0c;尤其适用于弹性伸缩服务和swarm、pouch(阿里docker…

(vue基础试炼_02)使用vue.js实现隔2秒显示不同内容

接上一篇&#xff1a;&#xff08;vue基础试炼_01&#xff09;使用vue.js 快速入门hello worldhttps://gblfy.blog.csdn.net/article/details/103841156 文章目录一、原始js写法① 效果图② 2秒之后二、使用vue实现① 思考② vue写法③ 效果图三、vue总结一、原始js写法 <!…

适合小团队作战,奖金+招聘绿色通道,这一届算法大赛关注下?

大赛背景伴随着5G、物联网与大数据形成的后互联网格局的逐步形成&#xff0c;日益多样化的用户触点、庞杂的行为数据和沉重的业务体量也给我们的数据资产管理带来了不容忽视的挑战。为了建立更加精准的数据挖掘形式和更加智能的机器学习算法&#xff0c;对不断生成的用户行为事…

银行业AI:炒作背后的现实——“尽管对新技术感到兴奋,但银行业态度非常谨慎”

摘要&#xff1a; 在人工智能火热的今天&#xff0c;银行业是如何看待人工智能对其的影响呢&#xff1f;答案可能出人意料。随着人工智能的发展&#xff0c;越来越多的行业都或多或少会受到该技术的影响。在博主之前的文章中&#xff0c;分析了人工智能、大数据以及VR对教育行业…

tcp分包传图片 如何还原_技术控丨超详细解析TCP重传机制

作者&#xff1a;Zhang_Jiawen &#xff1b; 来自&#xff1a;Dell技术社区TCP 的主要任务是很简单&#xff1a;打包和发送数据。TCP 与其他协议的不同之处在于使用滑动窗口来管理基本数据收发过程&#xff0c;同时确保数据流的有效及可靠传输&#xff0c;从而不致发送速率明显…

超详细!上线一个机器学习项目你需要哪些准备?

摘要&#xff1a; Canvas是用于设计和记录机器学习系统的模板。它比简单的文本文档具有优势&#xff0c;因为Canvas用简单的部件通过部件之间的相关性来寻找机器学习系统的关键组件。这个工具已经很流行&#xff0c;因为它对复杂项目进行了可视化操作。 在本文中&#xff0c;我…

漫画:什么是插入排序?

戳蓝字“CSDN云计算”关注我们哦&#xff01;————— 第二天 —————————————————人们如何进行扑克牌的排序呢&#xff1f;举个例子&#xff0c;比如我手中有红桃6,7,9,10这四张牌&#xff0c;已经处于升序排列&#xff1a;这时候&#xff0c;我又抓到了一…

(vue基础试炼_03)使用vue.js实现TodoList

接上一篇&#xff1a;&#xff08;vue基础试炼_02&#xff09;使用vue.js实现隔2秒显示不同内容https://gblfy.blog.csdn.net/article/details/103841818 指令作用v-for循环数据v-on绑定事件v-model数据的双向绑定文章目录一、需求说明① 案例文档② 基础代码③ 基础效果图二、…

Python API快餐教程(1) - 字符串查找API

摘要&#xff1a; 字符串查找API 字符串处理相关API 字符串是7种序列类型中的一种。除了序列的操作函数&#xff0c;比如len()来求字符串长度之外&#xff0c;Python还为字符串提供丰富到可以写个编辑器的API. 查找类API 首先&#xff0c;下面的查找API都是为了查找位置&#x…

因吵架总被骂,阿里程序猿一气之下发明“情侣吵架神器”

摘要&#xff1a; 最近&#xff0c;阿里有个叫虎跑的程序猿&#xff0c;发明了一个“吵架神器”。 到底是个什么黑科技&#xff1f; 最近&#xff0c;阿里有个叫虎跑的程序猿&#xff0c;发明了一个“吵架神器”。到底是个什么黑科技&#xff1f;和很多情侣一样&#xff0c;虎跑…

java中volatile关键字的含义_java中volatile关键字的含义

转自&#xff1a;http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html在java线程并发处理中&#xff0c;有一个关键字volatile的使用目前存在很大的混淆&#xff0c;以为使用这个关键字&#xff0c;在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线…

(vue基础试炼_04)使用组件改造TodoList

接上一篇&#xff1a;&#xff08;vue基础试炼_03&#xff09;使用vue.js实现TodoListhttps://gblfy.blog.csdn.net/article/details/103842233 指令说明v-bind传入绑定值文章目录一、前端页面组件化二、全局组件学习三、局部组件学习一、前端页面组件化 页面组件化&#xff1a…