What is Tensor Core ?How to use Tensor Core ?

好文https://www.zhihu.com/search?type=content&q=tensor%20core

What is Tensor Core ?

Tesla1.0 (2006年, 代表GeForce8800) -> Tesla2.0 (GT200) -> Fermi(算力可以支撑深度学习啦) -> Kepler(core增长) -> Maxwell(core继续增长) -> Pascal(算力提升)-> Volta(第一代tensor core) -> Turning(第二代 tensor core) -> Ampere(第三代tensor core)。

cuda core 在显卡里面是并行运算,就是说大家分工计算。cuda core越多,算力就越强,于是,我们看到了接来的几代Kepler -> Maxwell -> Pascal,这些cuda core肉眼可见的增长。虽然cuda core可以分工干活,但是对于一些场景,比如混合精度的矩阵操作,core算得似乎不是那么高效,于是NVIDIA就开始琢磨专门针对tensor的硬件单元了:tensor core.

  • TensorCore是一种可编程的硬件加速器。Tensor Core是Volta架构最重磅特性,是专门针对Deep Learning应用而设计的专用ASIC单元实际上是一种矩阵乘累加的计算单元。(矩阵乘累加计算在Deep Learning网络层算法中,比如卷积层、全连接层等是最重要、最耗时的一部分。)Tensor Core可以在一个时钟周期内实现两个4×4矩阵乘法以及与另一个4×4矩阵加法。整个计算的个数,就是在一个时钟周期内可以实现64次乘和64次加。
    比如我们现在要计算D=AB+C这样的矩阵乘累加运算,实际上这里面要求A、B两个矩阵必须是半精度,即FP16的类型。而加法矩阵C还有结合矩阵D既可以是FP16类型,也可以是FP32类型。比如我们现在要计算D=AB+C这样的矩阵乘累加运算,实际上这里面要求A、B两个矩阵必须是半精度,即FP16的类型。而加法矩阵C还有结合矩阵D既可以是FP16类型,也可以是FP32类型。

  • 在底层实现上,NVIDIA提供了大量SDK去支持上层应用或者框架,来最简化、最高效地帮助用户实现GPU加速Deep Learning的训练或推理的过程。
    这些SDK包括在
    1.Training(训练)端的SDK,如标准线性代数库cuBLAS、深度学习算法库cuDNN(最新版本7.0)、多GPU的集合通信库NCCL(最新版本2.0)、基于WEB UI交互式的深度学习训练系统DIGITS(最新版本6.0)
    2.Inference(推理)端SDK,如推理加速引擎Tensor RT(最新版本3.0)、智能视频分析工具DeepStream。

在CUDA中,使用Tensor Core进行混合精度计算非常简单。
只需要在矩阵乘法或卷积计算中使用CUDA提供的特殊数据类型(如__half2)来存储数据,然后将计算任务交给CUDA的库函数(如cublasGemmExcudnnConvolutionForward),这些库函数会自动利用Tensor Core进行计算。

tensor core和cuda core 都是运算单元,是硬件名词,其主要的差异是算力和运算场景

  • 场景:cuda core是全能通吃型的浮点运算单元,tensor core专门为深度学习矩阵运算设计
  • 算力:在高精度矩阵运算上 tensor cores吊打cuda cores。

cuda core名称正式出现的位置是在Fermi架构(2010年),在此之前它叫做processor core (也叫streaming processors (SPs) 或者叫做 thread processors)。衡量一张显卡的计算能力,数一下这些(SP流处理器)有多少就行了,早期这些运算单元还真心不多,一百多个。
core能进行一种fused multiply-add (FMA)的操作,通俗一点就是一个加乘操作的融合。特点:在不掉精度的情况下,单指令完成乘加操作,并且这个是支持32-bit精度。
更通俗一点,就是深度学习里面的操作变快了:
Z = W ∗ X + b Z = W * X + b Z=WX+b
对于cpu中,需要多个操作指令结合。
在cuda core中,单指令完成!

How to use Tensor Core ?

利用Tensor Core实现矩阵乘法的加速的两种方式:
1、在CUDA编程里实现Tensor Core的调用。新的CUDA 9.0里增加了WMMA,可以调用其中的API实现输入矩阵的Load,两个矩阵做乘加,还有结构矩阵的Store;
2、可以利用现成库函数,最新版本的cuDNN 7.0、CUDA9.0中的cuBLAs,TensorRT 3.0都支持Tensor Core的调用。这个方式相对比较简单

WMMA全称 warp matrix multiply-accumulate,即利用GPU上的tensor core进行warp粒度矩阵乘加速,它通过一个warp内部的线程完成分块的GEMM操作,C矩阵的C1分块可以通过A1、A2、A3和B1、B2、B3计算得出,即
C 1 = A 1 ∗ B 1 + A 2 ∗ B 2 + A 3 ∗ B 3 C1=A1*B1+A2*B2+A3*B3 C1=A1B1+A2B2+A3B3
A 1 ∗ B 1 A1∗B1 A1B1便可以利用WMMA计算得出

你可能感兴趣的:(tensor,core)