【发布时间】:2018-04-30 07:24:06
【问题描述】:
我对与 HPC 计算相关的术语完全陌生,但我刚刚看到 EC2 在 AWS 上发布了由新的 Nvidia Tesla V100 提供支持的新型实例,它具有两种“内核”:Cuda Cores (5,120 ) 和张量核心 (640)。 两者有什么区别?
【问题讨论】:
我对与 HPC 计算相关的术语完全陌生,但我刚刚看到 EC2 在 AWS 上发布了由新的 Nvidia Tesla V100 提供支持的新型实例,它具有两种“内核”:Cuda Cores (5,120 ) 和张量核心 (640)。 两者有什么区别?
【问题讨论】:
CUDA 核心:
每个 GPU 时钟执行一次单值乘法
1 x 1 per GPU clock
TENSOR 核心:
每个 GPU 时钟执行一次矩阵乘法
[1 1 1 [1 1 1
1 1 1 x 1 1 1 per GPU clock
1 1 1] 1 1 1]
更准确地说,TENSOR 内核同时执行多个 CUDA 内核的计算。
【讨论】:
与 Cuda 核心相比,张量核心以牺牲精度为代价使用的计算能力要少得多,但精度损失对最终输出的影响并不大。
这就是为什么对于机器学习模型,张量核心在降低成本方面更有效,而输出没有太大变化。
谷歌本身使用张量处理单元进行谷歌翻译。
【讨论】:
现在只有 Tesla V100 和 Titan V 有张量核心。两个 GPU 都有 5120 个 cuda 核心,每个核心在每个 GPU 时钟(例如 Tesla V100 PCIe 频率为 1.38Gz)中最多可以执行 1 个单精度乘加运算(例如在 fp32 中:x += y * z)。
每个张量核心在大小为 4x4 的小矩阵上执行操作。每个张量核心每 1 个 GPU 时钟可以执行 1 个矩阵乘法累加运算。它将两个 fp16 矩阵 4x4 相乘,并将乘积 fp32 矩阵(大小:4x4)添加到累加器(也就是 fp32 4x4 矩阵)。
之所以称为混合精度,是因为输入矩阵是fp16,而乘法结果和累加器是fp32矩阵。
可能正确的名称只是 4x4 矩阵核心,但 NVIDIA 营销团队决定使用“张量核心”。
【讨论】:
GPU 一直对机器学习有好处。 GPU 内核最初是为物理和图形计算而设计的,其中涉及矩阵运算。一般的计算任务不需要大量的矩阵运算,因此 CPU 在这些方面要慢得多。物理和图形也比一般计算任务更容易并行化,从而导致高核心数。
由于机器学习(神经网络)的矩阵重度性质,GPU 非常适合。张量核心只是更专注于机器学习软件(例如 Tensorflow)中涉及的计算类型。
Nvidia 写了一篇详细的博客 here,其中详细介绍了 Tensor 内核的工作原理以及相对于 CUDA 内核的性能改进。
【讨论】: