———————————————————

已经2017年了,从90年代初的品牌机流行,90年代末的组装机流行,2000-2010桌面级逐渐被移动PC/Mac取代,一直到现在移动终端大行其道,攒机似乎已经走过一个完整的生命周期。而因为2008年老黄开始攒GPGPU的大招,一直到2014年开始深度学习的逐渐兴起,台式家用机开始扮演起另外的角色:家用作坊小钢炮。

一直在掉坑的我在此拿出一些心得,与大家分享。

———————————————————-

1 显卡篇

首先要说明一点,在家搞深度学习不是在云端部署用于深度学习的卡那样,所以NVidia的Tesla系列主打单精度的计算显卡、Quadro系列双精度计算卡固然好,但是性价比实际不堪一击,具体可以参考:

深度学习是一种概率推断工具,常见于人工智能应用(图像视频识别、语音识别、文本处理、自动对话等),这跟发射火箭需要高精度计算以及纠错(ECC)不一样,一个深度神经网络对单个参数精度的依赖其实很低,不需要双精度计算能力,因此能看到Tesla系列的显卡和此处的10x0系列游戏卡一样,都是设计成为极高的单精度计算能力和极低的双精度计算能力的。所以在生产设计之初这些卡就注定是为了深度学习而生的。

实际上,如果你主要跑的是LSTM这种结构的应用(比如文本、语音、OCR),参数比较少的时候,1060的6GB显存已经足够,当然它的算力有些乏善可陈了(3.8T/睿频4.4T)。如果你只跑CV的训练,如大规模残差网络(在公司一个152层的ResNet,数据并行,直接每张卡吃了7G显存,可以8卡并行获得一个可观的加速比),如果你的公司不提供算力,你也不喜欢直接在云平台上花钱训练的化,那么可能一个大显存的Titan X Pascal (12GB)更适合你。1070和1080就比较中庸,这个根据个人的兴趣和钱包综合选择即可。

有人想要问了,我有钱,还是想买个人用的M系列(M40,M60)、P系列(P100)等显卡,而且想多卡并行,该怎么办?这个已经脱离个人家用作坊的定义了,价格从几十万到一百万不等,建议还是直接找NVidia原厂、华硕等能提供质保的大厂提供销售服务。

还有人问,我很有钱,还是想买双卡GPU做训练,这个问题已经牵涉到主板的选择,我们放到后面再讨论,但可以先说结论:强行上双卡,会极大的拉低整机性价比,而且最终训练效果的提升未必如你想象的那么好。如果你还要说『我不听我不听』,那请看完本篇。

2 内存/存储篇

很多人会觉得,存储跟深度学习有个毛关系?我们先来看一下一个优化得不好的深度学习训练任务数据pipeline长什么样子:

准备阶段:

定义Symbol和图结构

数据训练阶段:

for i in num_of_epoch:

for k in num_of_iter:

for j in num_of_batch_size:

数据生成/爬取(网络I/O, CPU速度, L3 Cache/内存)

数据清洗(CPU速度,内存)

数据缓存/保存(内存大小,存储I/O)

数据加载进图(内存大小,存储I/O,PCI-E带宽,GPU显存)

根据图Backward一轮(GPU速度)

Forward一轮给出当前iter预测(GPU速度)

根据预测给出当前iter训练集精度(CPU速度,BLAS指令集优化)

Forward一轮给出当前epoch在测试集预测(GPU速度)

根据预测给出当前epoch在测试集的精度(CPU速度,BLAS指令集优化)

保存模型中间点(存储I/O)

除了更多的把走网络I/O的步骤移动到准备阶段是一个很明显的优化点以外,你会发现,一旦作为数据缓存的内存容量不够大,你的物理存储I/O马上就会成为下一个瓶颈。尤其图片一般来说还都是小文件,而固态硬盘(SSD)对小文件的优化比机械硬盘8~9ms随机寻道一次的速度不知道超越了几个数量级,如果你真的优化不了数据训练阶段的数据结构,无法把它做成缓存,或者保证它能够连续读取,那你为什么不花多一点的钱提高这个物理存储IOPS的随机寻道性能呢?

我的方案是Samsung 960 Pro M.2 256G 作为系统盘

【找图】

Intel 750 PCI-E 1.2T作为副盘

【找图】

WD紫色监控盘2T作为数据盘,主打监控(大数据流,大文件读写)功能

【找图】

。因为M.2接口和PCI-E接口都占用PCI-E通道,稍后在主板阶段我会介绍一下这里面的坑。

3 内存篇

内存应该是一个题外话,真要买的话,闭着眼睛买个16GB*2的套装可以适应大部分主流的主板,(小主板只有2个内存槽,而大主板的话你可以把内存插到同色槽位,)所以我们就开一个小差聊聊内存的DDR标准。

现在新装机的平台,以X99,Z170为例,用的普遍都是DDR4的内存,老一些的机器老树开新花用的有DDR3的内存。假设你的数据较小,数据都能加载到内存种,那究竟什么是影响内存存取速度的关键因素呢?

一个就是DDR内存的工作频率,而另一个和工作频率此消彼长的是DDR内存的时序(DDR Timing),这是一个内存存取的延迟指标。工作频率的倒数,就是一个内存工作时钟周期的时间长度。

可以看到,图中的这个『8-8-8-24』分别代表

CL:CAS Latency,Column Access Strobe (CAS) latency,从系统发送命令到内存开始到读写特定列所消耗的时钟周期数。时间。也就是说,如果我们已经指定了我们要从某一行读内存,但我们要从这一行里取多个数值,每次读写数值的时候这个CL是无可避免要消耗掉的。

tRCD:RAS to CAS Delay,激活内存中的一行后(激活动作)到读写动作(READ/WRITE)所需要消耗的时间。如果我们是在同一行进行读写的话,不需要重新激活行的情况下,tRCD的时间只需要消耗一次。

tRP:Row Precharge Time。有的时候我们需要取消一行的激活,再去激活另一行以读取数据,这一部分需要对内存行进行充电,这个时间的损耗就是tRP。

tRAS:Row Active Time。在激活一行的命令到预充电命令前的准备时间。可以看到这个时钟周期就比较大了。

假设我们有一个很大的1维的数组和一堆很小的1维数组,如果前者安排在了连续空间里,那么tRCD、tRP、tRAS的损耗就小,否则tRCD/tRP/tRAS的时间损耗就比较大,这些都是overhead。一个好的BLAS不仅能够利用好的指令集高速计算出我们需要的结果,同时对于底层C代码对内存的管理应该也有一个较清楚的认识。

最后还是告诫大家,不要迷信高主频的内存,如果你工作在1600MHz的内存CL=8,每次取出一个数据的时间和工作在2000MHz@CL=10,2400MHz@CL=12的内存就是一个速度,根本起不到超频提速的作用。对于给内存超频的狂热玩家经常能发现,超频之后为了保证内存工作稳定只能调高CL,这不是跟没超频一样吗?又能超频,又能保证低CL的内存一般都是大厂某一批次品质特别好的产品,而如果品质比较均匀的话,人家自己不会标一个更高的参数来卖吗?只有品质不均匀的产品你才有机会通过超频或者降低CL来发现自己买到了超值的内存。要说我的经验的话,我对超频已经不感冒了,一般只会看DDR4(不能插在只支持DDR3的主板上,反之亦然)的频率和CL,买回来直接默认使用。

4 FPGA篇

【找一个Xilinx的广告图】

【找一个Altera的广告图】

【找一个Intel的广告图】

在Intel收购FPGA两大巨头之一的Altera之后,现在我们在FPGA市场上就有个新的双雄:Xilinx和Intel。前一阵子我还在婊Xilinx长期做视频采集产品,对深度学习嗅觉太差,听说百度用的是Xilinx的方案,我们就来看一下国内拿FPGA做深度学习的厂子,有的自己做基础设施,有的卖产品,有的搭载云服务,各有侧重,今天就不赘述了,因为有人会问了,

『你说的这个FPGA,我怎么没听说过啊。』

是的,就像你5年前不知道NVidia做GPGPU卡已经如火如荼一样自然,因为它已经改变了行业生态,却还没有改变人类的生活,不做技术也不做技术公司投资的你,嗅觉不够灵敏是很自然的事情。

【找一个FPGA板卡的图】

如果说我们的CPU、GPU是依靠着定长流水线+接受高级指令+转化低级指令+计算实现『通用计算的话』,FPGA(Field-Programmable Gate Array)就是一个灵活性不算高,但是用可编程门阵列实现指令、算力也不低的这样一种方案,它的灵活性介于CPU/GPU和ASIC之间。好吧,又是一个新名词,ASIC?Application-specific integrated circuit,专用集成电路,常见于只做SHA256一个任务的比特币矿机。

因为每次改变计算任务或者网络结构都要重新『烧』一次FPGA,我们还不如用FPGA来充当『训练好的模型对外提供深度学习预测』这样一个角色。GPU训练,FPGA预测。All good.

小钢炮的FPGA板卡采用了杭州加速云的FPGA解决方案,使用了Intel Atera Arria 10,算力9.2T,单价2万左右,和搜狗、讯飞、腾讯都有合作的这么一家初创公司。

5 平台篇:CPU/主板芯片组/主板板型

因为对CPU的需求不高,这次的小钢炮我买了廉价的Z170MX(3PCI-E插口版本)+i5作为方案。如果你觉得对CPU矩阵计算的要求也比较高(比如一些单次矩阵计算的任务,不适合拿进GPU算了一次再拿出来),建议使用X99+E5-2679v4(ES,QS等非盒装产品)这样的组合,经某些土豪实测,E5不仅跟Intel MKL 这个BLAS更搭配,而且2679也拥有牛逼的L3 Cache和性价比。

现在要聊聊坑爹的主板芯片组了,自从Intel在05年把NVidia的芯片组排挤出市场之后,就开始了它的邪恶计划:拼命的把一些增强功能压到最底。比如,Z170芯片组全系列最大PCI-E通道只有20,这说明什么?

如果我要同时用1080显卡,M.2 SSD 以及PCI-E SSD,PCI-E FPGA,那么全部在工作的它们一定不会满速度I/O,何其可恶。如果你要用更好的显卡,你的钞票就开始熊熊燃烧了。购买一个合理的搭配真是太难了。

板型我挑选的是半大不小的M-ATX板型。ATX>M-ATX>ITX,主板的大小基本就这三种,购买的时候注意和机箱搭配即可。一般ITX板型很难有3个以上的PCI-E插槽和2个以上的内存插槽,这也是它的局限性之一,你要它小巧,就不能指望它功能强大。

再说说双显卡方案,我刚才已经说了,如果你想用双卡的方案,一定还是要挑选PCI-E通道数较多的主板,比如X99芯片组的微星X99 SLI。它拥有28Lane,尽管这个仍然不能满足我的需求,但是至少,如果我只用1个PCI-E SSD的话,那么我的显存I/O还能工作在一个16x,一个8x的速度上。如果我一直在处理PCI-E I/O密集型的计算任务,这种提升也算是聊胜于无吧。一般双显卡会要求更大的机箱、更大的主板板型、更好的散热,这些可能不会带来成本的提升,但是你不要忘了最重要的一点:你很可能需要一个功率更大的、转化效率更高的电源。对于Pascal这一代显卡来说,多插一块1080带来额外的200W功率的需求,也不是特别难选,但电源的成本可能会上升三四百。

6 组装篇

呸,应该叫配置环境篇啦。组装这种事情还有大大小小的坑,可以使用京东装机服务、门店的装机服务,女生的话可以考虑计算机系和电子系好人男同学的服务。(泥垢)

CentOS 7 + GCC 4.8.5 + OpenCV 2.4.9.1 + CUDA 7.5 + CUDNN 5

Ubuntu16.04.1 + GCC 5.4.1 + OpenCV 3.2 + CUDA 8.0 + CUDNN 5.1

这两个版本工作的还是比较稳定的,如果非要说不稳定,那么我要甩锅给OpenCV好了。

(我用OpenCV生成样例数据的时候遇到Core Dump的几率极高,只能写一个防止卡死、防止Core Dump的wrapper脚本来重启生成数据的脚本。)

最后

还是要建议大家,量力而为、量力而行、量力而买买买。

转载请注明出处。

深度学习 训练吃显卡_深度学习小钢炮攒机心得:规避一些你看不到的坑相关推荐

  1. 深度学习 训练吃显卡_深度学习训练如何更快些?GPU性能的I/O优化你试过吗?...

    原本,有多少人已经准备好最新显卡,足够的硬盘空间,甚至请好年假,只为十天后去那个仰慕已久的赛博朋克世界里体验一番-- 结果他们又发了一张「黄色背景图」,告诉大家要跳票--再一次-- 好吧,你有了大量闲 ...

  2. 深度学习 训练吃显卡_最新最全深度学习训练/GPU服务器硬件配置推荐2020

    人工智能随着核心算法.计算能力的迅速提升,以及海量联网数据的支持,在本世纪终于迎来了质的飞跃,人工智能将是未来应用最广泛的技术之一,在市场经济领域带来更多的机遇与机会,在医学领域可以大大加快诊断速度和 ...

  3. 深度学习 训练吃显卡_在深度学习中喂饱GPU

    原标题:在深度学习中喂饱GPU 新智元推荐 来源:知乎专栏 作者:风车车 [新智元导读]深度学习模型训练是不是大力出奇迹,显卡越多越好?非也,没有512张显卡,也可以通过一些小技巧优化模型训练.本文作 ...

  4. 深度学习 训练吃显卡_学习深度学习,如何选购显卡?

    学习深度学习,显卡(GPU)可以说是比不可少的投资.本文试图探究哪个GPU才是学习入门性价比最高的? 为什么深度学习需要GPU? 我们先来比较一下CPU和GPU的不同,下图是一个简化的处理器内部结构图 ...

  5. 深度学习中交叉熵_深度计算机视觉,用于检测高熵合金中的钽和铌碎片

    深度学习中交叉熵 计算机视觉 (Computer Vision) Deep Computer Vision is capable of doing object detection and image ...

  6. 重拾强化学习的核心概念_强化学习的核心概念

    重拾强化学习的核心概念 By Hannah Peterson and George Williams (gwilliams@gsitechnology.com) 汉娜·彼得森 ( Hannah Pet ...

  7. 深度学习背后的数学_深度学习背后的简单数学

    深度学习背后的数学 Deep learning is one of the most important pillars in machine learning models. It is based ...

  8. 深度学习之对象检测_深度学习时代您应该阅读的12篇文章,以了解对象检测

    深度学习之对象检测 前言 (Foreword) As the second article in the "Papers You Should Read" series, we a ...

  9. 深度学习领域专业词汇_深度学习时代的人文领域专业知识

    深度学习领域专业词汇 It's a bit of an understatement to say that Deep Learning has recently become a hot topic ...

最新文章

  1. 汇编语言 第3版 王爽 检测点习题部分—答案及详细解析 检测点2.3
  2. 初识费用流 模板(spfa+slf优化) 餐巾计划问题
  3. halcon的算子清点:Chapter 8线的属性
  4. linux 设计一个程序,要求打开文件 pass 所有者,第二章 Linux 文件操作
  5. TensorFlow MNIST CNN LeNet5模型
  6. LeetCode练习及自己理解记录(1)
  7. C#使用CLR/C++的DLL间接调用Native C++的DLL
  8. Java技术依然备受追捧,主要学习内容有哪些?
  9. 索引会自动更新吗_mysql的B+树中数据存放结构和索引常见问题你会吗?
  10. Python文件分享(3为http.server、2为SimpleHTTPServer)
  11. 基于标记不确定性和类别不平衡的语义分割在植被制图中的应用(soybean+FCN_segNet+newloss)
  12. Keil MDK5的安装及破解详细步骤
  13. 制作自己的个人博客网站
  14. python扫雷总结与体会_扫雷项目总结
  15. 发达国家如何布局大数据战略
  16. 一个奇鸽船新版本 v1.32
  17. JavaEye论坛热点推荐-2009年1月
  18. 广东外语外贸大学第15届程序设计竞赛 - G LZL的柠檬树 - 二分 + 最小生成树
  19. pythondocumentation_python官方文档
  20. php resque demo,php-resque 极简php消息队列

热门文章

  1. 康托尔、哥德尔、图灵——永恒的金色对角线(转载)
  2. 【DG】基于同一个主机建立物理备库和逻辑备库 (四)--添加一个物理dg节点
  3. windows 2003 server 搭建php环境,windows server 2003 php 环境搭建
  4. 百科知识 DMG文件如何打开
  5. Java知识点06:队列(Queue)的offer/add函数,poll/remove函数,peek/element函数的区别
  6. CF1016C Vasya And The Mushrooms 题解
  7. linux能运行英魂之刃吗,英魂之刃端游怎么流畅运行
  8. 全球公认的最健康食品排行榜
  9. .NET Core3.0+ WebApi dynamic传参中带有ValueKind属性处理方法
  10. Android研发岗必问30+道高级面试题,三面腾讯已拿offer