NVIDIA深度学习Tensor Core性能解析(上)
NVIDIA深度学习Tensor Core性能解析(上)
本篇将通过多项测试来考验Volta架构,利用各种深度学习框架来了解Tensor Core的性能。
很多时候,深度学习这样的新领域会让人难以理解。从框架到模型,再到API和库,AI硬件的许多部分都是高度定制化的,因而被行业接受的公开基准测试工具很少也就不足为奇。随着ImageNet和一些衍生模型(AlexNet、VGGNet、Inception、Resnet等)的影响,ILSVRC2012(ImageNet大规模视觉识别挑战)中的图像数据集训练逐渐被行业所认可。
基本上所有现代深度学习框架都支持CUDA和cuDNN,对于Volta而言,所有支持FP16存储的框架也都支持Tensor Core加速,启用FP16存储后Tensor Core加速会自动启用,因此我们可以利用这些框架来了解Tensor Core的性能。

在常见的第三方深度学习基准套件中,Fathom和TBD是更传统的基准测试套件,其测试针对特定框架和模型进行了配置,涵盖了许多不同的机器学习应用程序。 同时,最近的深度学习框架侧重于比较给定模型和跨框架的数据集的性能。
而DeepBench本身并不使用框架,而是使用低级库来评估不同设备的机器学习性能。就其本身而言,虽然它并不直接将框架/模型/应用程序性能与其他测试联系在一起,但它提供了代表供应商优化的数学操作和硬件性能的指标,每个产品的二进制文件都使用硬件供应商提供的库进行编译。

DAWNBench则更加与众不同,与其说它是一个基准测试套件,不如说是对三个数据集(ImageNet、CIFAR10和SQuAD)的训练和推断结果进行类似于竞赛的报告,重点考量端对端的计算精确度和成本。
至于HPE DLBS,作为HPE深度学习指南的一部分,它主要以GPU为中心,坚持使用TensorFlow、MXNet、PyTorch和Caffe类型框架,还包括TensorRT测试。虽然其具有良好的多测试批处理、日志记录、监控和报告功能,但它只输出纯粹的性能和时间指标,不涉及端对端的时间精度或成本。
从这些基准测试软件中可以看出,深度学习框架之间的差异很容易使测试结果变得毫无意义,从而影响我们对这些框架的研究。convnet-benchmark和PyTorch的创始人Soumith Chintala指出,如果没有机器学习的背景,很难独立地验证深度学习基准测试的准确性和范围,不过MLPerf测试项目似乎试图解决这个问题。

MLPerf是由DAWNBench等测试软件的设计者和工程师联合打造的全新高端基准测试套件,希望囊括Fathom的跨域测试方法以及DAWNBench对超过阈值精度模型的端对端计算时间考察。不过它目前正在处于alpha阶段,开发团队表示其尚不适合进行精确的硬件对比。
综合考虑之下,本次测试将不包含MLPerf项目,而是使用DeepBench、Caffe2 Docke、Stanford DAWN和HPE DLBS来进行。
DeepBench训练测试之GEMM和RNN
首先进行的是GEMM测试,利用某些深度学习应用程序(DeepSpeech、Speaker ID和Language Modeling)中的内核进行GEMM操作,测出的性能比在cuBLAS中运行纯矩阵-矩阵乘法更有代表性。
测试的结果在意料之内,启用Tensor Core可以大幅提升性能。深入研究细节可以发现,Tensor Core对于特定类型的矩阵-矩阵乘法会有特别的影响。

通过深度学习应用程序拆分GEMM测试,我们可以了解Tensor Core在理想和非理想情况下的表现。

Speaker ID GEMM工作负载实际上只包含两个内核,其中10微秒的时间差意味着大约1 TFLOPS的算力差异。

通过对语言模型内核的研究,可以了解Tensor Core在非理想情况下的性能。这些核矩阵的大小是m=512或1024,n=8或16,k=500000,虽然每个数在技术上都可以被8整除——这是满足张量核加速度的基本要求之一——但这些矩阵的形状与Tensor Core支持的16*16*16、32*8*16和8*32*16等基本WMMA形状不太匹配。假如Tensor Core真正在独立的8x8x8级别上运行,那么运算8*8*8矩阵的性能也不会很好。

因此,Tensor Core无法高效的将这些非常不平衡的矩阵分解为n=8或16。而且,Tensor Core在DeepSpeech内核上的性能也出现异常:

从所有子项的平均成绩来看,这个浮点运算性能令人印象深刻。当矩阵适合于Tensor Core时,性能可以超过90TFLOPS;相反如果二者无法契合,并正确的换位没有发挥作用,性能会低至<1TFLOPS的水平。
对于DeepBench RNN内核的测试,RNN类型之间没有明显的差异,但是在每种RNN类型中,如果将不同内核挨个进行对比判断,也可以看到与GEMM中相同的趋势。



比较有趣的是,Titan Xp与Titan V在未使用Tensor Core加速时的表现有很接近,Titan Xp的高频率为其性能起到了一定的帮助。
DeepBench训练测试之Convolutions
在卷积训练工作负载测试中,Tensor Core再次显着提高了性能。鉴于卷积层是图像识别和分类的基础,因而卷积运算是Tensor Core加速的最大潜在受益者之一。
从所有测试项的平均成绩可以看出,Volta在启用了Tensor Core的FP16混合精度运算能力后性能再次取得了领先。不过与GEMM不同,在FP32卷积上启用Tensor Core会导致明显的性能损失。


当计算涉及不匹配的张量尺寸时,标准精度模式遵循cuDNN指定的最快前向算法(如Winograd),而混合精度模式必须对所有内核使用隐式预计算GEMM,这会造成两种混合精度模式的性能会出现下滑。
要符合Tensor Core加速的要求,输入和输出通道尺寸必须是8的倍数,输入、过滤和输出数据的类型必须是半精度。使用Tensor Core实现卷积加速要求张量采用NHWC格式,但大多数框架都希望采用NCHW格式的张量。在这种情况下,输入通道不是8的倍数,但测试程序会自动填充以解决此问题。

需要注意的是,所有这些NCHW内核都需要转换为NHWC。想要从Tensor Core中受益,需要正确的调整卷积格式,本次测试使用的是NVIDIA提供的标准库和makefile。NVIDIA指出,一旦进行加速卷积,它会消耗掉相当多的运行时间,这将会对FP32和FP16混合精度模式造成影响。


DeepBench推理测试之GEMM
数据精度方面,百度将DeepBench GEMM和卷积定义支持32bit累加的INT8格式,以支持Volta和Pascal上的INT8计算。

Titan V和Titan Xp均拥有4倍于INT32的INT8性能,DeepBench的INT8推理测试正中Pascal引入的DP4A矢量点积能力之下怀。Volta同样拥有这一能力,在指令集中二者均显示为IDP和IDP4A。

对IGEMM来说,正如CUTLASS所示,DP4A是一项定制操作。因此除语言建模之外,INT8的性能都非常之高。当然,与硬件不匹配的张量尺寸不适合Tensor Core加速,这一点与之前完全一样。


在完全连接(仿射)层中,每个节点都与前一层中的各节点相连接。对于一个典型的CNN来说,完全连接的层意味着可以结合所有提取的特征做出最终预测并对图像进行分类。这些测试结果数据也意味着大型且规则的矩阵可以在Tensor Core加速中获得更大的收益。


DeepBench推理测试Convolutions
再次来到卷积测试环节,8位乘法/32位累加再次出现在INT8推理中。
测试中最引人注目的是Titan Xp,在Resnet、Speaker ID和Vision项目中,Titan Xp表现出了强劲的INT8吞吐量。

从内核方面来看,并没有发现这一现象的根源所在,猜测可能是由于Pascal的DP4A库好驱动程序比Volta更为成熟所致,亦或许是Volta通过单独的INT单元处理这些运算。
NVIDIA深度学习Tensor Core性能解析(上)的更多相关文章
- NVIDIA深度学习Tensor Core性能解析(下)
NVIDIA深度学习Tensor Core性能解析(下) DeepBench推理测试之RNN和Sparse GEMM DeepBench的最后一项推理测试是RNN和Sparse GEMM,虽然测试中可 ...
- Tensor Core技术解析(上)
Tensor Core技术解析(上) NVIDIA在SIGGRAPH 2018上正式发布了新一代GPU架构--Turing(图灵),黄仁勋称Turing架构是自2006年CUDA GPU发明以来最大的 ...
- Tensor Core技术解析(下)
Tensor Core技术解析(下) 让FP16适用于深度学习 Volta的深度学习能力是建立在利用半精度浮点(IEEE-754 FP16)而非单精度浮点(FP32)进行深度学习训练的基础之上. 该能 ...
- 『高性能模型』Roofline Model与深度学习模型的性能分析
转载自知乎:Roofline Model与深度学习模型的性能分析 在真实世界中,任何模型(例如 VGG / MobileNet 等)都必须依赖于具体的计算平台(例如CPU / GPU / ASIC 等 ...
- 深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目
作者简介:akshay pai,数据科学工程师,热爱研究机器学习问题.Source Dexter网站创办人. TensorFlow是Google的开源深度学习库,你可以使用这个框架以及Python编程 ...
- 【CUDA开发-并行计算】NVIDIA深度学习应用之五大杀器
来自吉浦迅科技 整理发布 http://mp.weixin.qq.com/s?__biz=MjM5NTE3Nzk4MQ==&mid=2651231163&idx=1&sn=d4 ...
- 深度学习中Dropout原理解析
1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...
- 使用深度学习检测TOR流量——本质上是在利用报文的时序信息、传输速率建模
from:https://www.jiqizhixin.com/articles/2018-08-11-11 可以通过分析流量包来检测TOR流量.这项分析可以在TOR 节点上进行,也可以在客户端和入口 ...
- Roofline Model与深度学习模型的性能分析
原文链接: https://zhuanlan.zhihu.com/p/34204282 最近在不同的计算平台上验证几种经典深度学习模型的训练和预测性能时,经常遇到模型的实际测试性能表现和自己计算出的复 ...
随机推荐
- 路由器逆向分析------在QEMU MIPS虚拟机上运行MIPS程序(ssh方式)
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69652258 在QEMU MIPS虚拟机上运行MIPS程序--SSH方式 有关在u ...
- 基于dalvik模式下的Xposed Hook开发的某加固脱壳工具
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77966109 这段时间好好的学习了一下Android加固相关的知识和流程也大致把A ...
- hdu2276 矩阵构造
题意: 给了n个灯泡的状态,他们绕成一个环,0是灭,1是亮,每一秒灯泡的状态都会改变,规则是如果当前这个灯泡的左边的灯泡当前是状态1,那么下一秒当前的这个灯泡状态就改变0变1,1变0,最后问 ...
- Google Hacking的用法
目录 Google Hacking 基本搜索 高级搜索 Index of inurl Google Hacking Google Hacking 是利用谷歌搜索的强大,来在浩瀚的互联网中搜索到我们需要 ...
- python中实现打印特定字符变换
首先需要将 lib文件 放在该文件同一目录 使用的时候,先导入 from lib.common import print_msg ,然后调用里面的 print_msg() 方法即可! lib文件地址: ...
- CTF常见的加密和编码方法
目录 哈希摘要算法 对称加密算法 其他加密算法 编码 哈希摘要算法 以 root 加密为例. MD4:32位的摘要算法.2add09183d0b1dc0428701df9838fba MD5:32位 ...
- layui中时间插件laydate的使用
1.加载layui.js 2.html部分 <div class="layui-inline"> <label class="layui-form-la ...
- Java常用类详解
目录 1. String类 1.1 String的特性 1.2 String字面量赋值的内存理解 1.3 String new方式赋值的内存理解 1.4 String 拼接字面量和变量的方式赋值 1. ...
- 基于Mysql的编程语言(实验六、七)
本文参考1:MYSQL对sql的拓展 本文参考2:MySQL编程基础 本文参考3:MySql数据库编程 (侵删) 一.变量的定义 1.用户变量 set @变量名=表达式: 说明:无提前进行定义,直接用 ...
- mybatis新手快速搭建成功详细操作
1.数据库建表 在数据库中新建一个名为mybatis的数据库,在mybatis数据库中新建一张 t_user 表,表中有3个字段,id,name,password,代码如下: 新建一个mybatis数 ...