加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!
程序员之于计算机就相当于赛车手对待跑车一样,必须十分熟悉它的每一个部件,明白各自的用途,然后在每一次调教当中充分发挥各部分的潜力,最终才能爆发出最大的性能。本次分享以图像任务训练为例,将从cpu、内存、硬盘、显卡这些方面对算法性能的影响进行逐一分析,配合相应的实验,给出相应的优化建议。笔者为图像算法工程师,因此下面均以图像数据为例,但无需任何图像算法的前置知识,大概只要写过代码的都能理解(首先感谢 老狼 的技术支持,给出了宝贵的建议)。
-
老狼 链接:
https://www.zhihu.com/people/mikewolfwoo/activities
数据流动路径
假设我们现在有一批图片集放在硬盘当中,待读取进内存送入GPU运算,那么一般会经历以下流程:
-
cpu发出读取指令,从硬盘中找到图片数据,并存到内存中;
-
cpu从内存中取出一批数据,转化为numpy array,并作数据预处理/增强操作,如翻转、平移、颜色变换等。处理完毕后送回内存。
-
cpu内存(后面简称内存)和gpu内存(后面简称显存)各开辟一块缓冲区,内存中的一个batch的数据通过PCIe通道传输到显存当中。
-
GPU核心从显存中获取数据进行并行计算,计算结果返回至显存中。
-
计算好的结果将从显存经过PCIe通道返回到内存。
这5个步骤涉及到几个影响数据传输速度的环节:
-
硬盘读取速度;
-
PCIe传输速度;
-
内存读写速度;
-
cpu频率。
我们首先来说说硬盘。
硬盘
PCIe
内存中的数据通过PCIe总线传输到GPU显存当中,具体PCIe的介绍请参考 老狼 的深入PCI与PCIe之一:硬件篇。如果是单显卡的机器,大部分都能工作在PCIe 3.0 x16带宽下,此时的带宽为15.754GB/s。PCIe各代速率对比如下图,来自百度百科:
-
深入PCI与PCIe之一:硬件篇 链接:
https://zhuanlan.zhihu.com/p/26172972
内存频率
我们来测试一下在不同内存频率下,opencv读图的速度。内存频率分别设为2133MHz、2400MHz、2666MHz、3000MHz,其它硬件参数同上。
从表中看出,即使内存频率低至1866MHz,带宽已经达到15GB/s,已经接近PCIe 3.0 x16的带宽(15.75GB/s),也就是说内存传输数据到显存的时候也能跑满PCIe 3.0 x16的带宽,因此内存带宽远远不是瓶颈。
显卡
-
CUDA核心数
CUDA核心数基本确定了一张显卡的算力,当前服务器级别算力最强的Tesla V100显卡拥有高达5120个cuda核心;工作站级别最强的RTX 8000显卡以及TITAN系列最强的RTX TITAN,CUDA数为4608个;而当前桌面级别最强的RTX2080ti,拥有4352个CUDA核心(很快这些当前最强就会变成老爷车了)。核心数越多意味着执行并行计算的量就更多。详细的显卡规格对比可以参考维基百科:List of Nvidia graphics processing units
-
内存颗粒
最新几代的显存颗粒类型分别有GDDR5X(1080ti)、GDDR6(2080ti)、HBM、HBM2(V100),对应的带宽如下表:
由FP32转换成FP16计算,能够减少一半的显存使用量,运算时的吞吐量大大增加。实际上,拥有640个tensorcore的V100,吞吐量是P100的12倍(详见nvidia的tensor core介绍文档)。
-
nvidia的tensor core介绍文档 链接:
https://images.nvidia.com/content/volta-architecture/pdf/volta-architecture-whitepaper.pdf
我们来看看几款显卡的tensor core数量:
当前单精度和半精度浮点算力最高的是RTX Titan,而算力紧追其后的是Tesla V100和Titan V,但这两款的核心数和显存均是最高。更大的显存意味着每次输入数据的batch size可以更大,以及在GAN应用中可以生成更大分辨率的图片。如果用于高精度的科学计算,Tesla V100和Titan V是最佳选择。如果要考虑性价比,那无疑是2080ti最佳。
为什么服务器级别的Tesla卡在算力上与桌面级、工作站级的显卡相差无几,价格却差这么大呢了上面的双精度算力最高之外,笔者认为还有以下因素——nvlink、nvswitch。
-
nvlink
先看左图,有了nvlink,GPU与GPU之间的通信不需要再通过CPU,直接通过nvlink通信,双向带宽高达100GB/s(nvlink 2.0)。右图是单服务器双路CPU及8路GPU的架构,两个CPU分别对应4个GPU,当其中一组GPU需要向另一组GPU进行通信时,以往同样只能先通过PCIe传输到CPU,然后再通过QPI通道(带宽为25.6GB/s)传输到另一个CPU,最后再通过PCIe送进另一组GPU。而nvlink支持跨CPU节点的直接通信,V100每个GPU有6条nvlink通道,总带宽高达300GB/s。
但从上图可以看到,即使每个GPU拥有6条nvlink通道,仍然无法做到“全连接”(即任意两个GPU之间存在双向通道)。这就引出了下一个更加疯狂的技术:nvswitch。
-
nvswitch
nvidia官 介绍视频的这两张图很好地介绍了两者之间的区别。下图一个主板上的8块GPU通过6块nvswitch芯片与另一块主板上的任意一块GPU进行通信,使得8对GPU能够同时以300GB/s的速度进行通信,实现16个GPU全连接。除此之外,nvswitch还能使得整个服务器作为一块拥有0.5TB显存、2PetaFLOPS算力的“大显卡”使用。
那么为什么V100敢卖这么贵(约8万RMB一张)strong>因为只有V100的nvlink和nvswitch是满血的,2080ti虽然也能使用nvlink,但速度被老黄砍了一刀。而且目前实现nvswitch的DGX2机器也只有V100的选项,因此这只能是土豪们的玩物。
-End-
*延伸阅读
-
AI初识:深度学习模型评估,从图像分类到生成模型
-
深度学习中的Normalization模型
CV细分方向交流群
添加极市小助手微信(ID : cv-mart),备注:研究方向-姓名-学校/公司-城市(如:目标检测-小极-北大-深圳),即可申请加入目标检测、目标跟踪、人脸、工业检测、医学影像、三维&SLAM、图像分割等极市技术交流群(已经添加小助手的好友直接私信),更有每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流,一起来让思想之光照的更远吧~
△长按关注极市平台
觉得有用麻烦给个在看啦~
相关资源:竞业达电子监考系统.zip_竞业达SIP服务器- 管软件文档类资源…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!