关于人工智能:AI加速器与机器学习算法协同设计与进化

40次阅读

共计 8813 个字符,预计需要花费 23 分钟才能阅读完成。

作者|Shashank Prasanna
翻译|胡燕君

此刻,你应该是在电脑或手机上看这篇文章。不管怎样,这些机器都属于古代计算机,它们都有中央处理器(CPU)和其余为特定性能服务的专用芯片,例如显卡、声卡、网卡、传感器交融等。解决特定工作时,专用处理器往往比通用 CPU 更快更高效。

计算机倒退晚期,CPU 都会和专用处理器配合应用。1970 年代的 8 位和 16 位 CPU 须要依赖软件来模仿浮点指令,因而执行浮点运算十分慢。而因为计算机辅助设计(CAD)和工程模仿等利用对浮点运算的速度要求较高,于是人们开始用数学协处理器(math coprocessor)辅助 CPU,让数学协处理器分担所有浮点运算工作,它的浮点运算速度和效率都比 CPU 更高。这就是专用处理器的一个例子。

关注 AI 和半导体行业的敌人近来可能据说过“机器学习(ML)专用处理器”(即 AI 加速器)。最常见的 AI 加速器莫过于 NVIDIA GPU,此外还有 Intel 的 Habana Gaudi 处理器、Graphcore 的 Bow IPU、Google 的 TPU、AWS 的 Trainium 和 Inferentia 芯片等。

为什么现在有这么多 AI 加速器可供选择?它们和 CPU 有什么不同?算法如何扭转能力适应这些硬件?硬件又该如何倒退能力反对最新的算法?本文将一一解答。本文次要内容包含:

  • 为什么须要专用 AI 加速器?
  • ML 硬件的分类:CPU、GPU、AI 加速器、FPGA 和 ASIC
  • “硬件感知(Hardware-aware)”的算法和“算法感知(Algorithms-aware)”的硬件
  • AI 加速器与高效 ML 算法的协同进化
  • 针对推理的 AI 加速器与高效算法
  • 针对训练的 AI 加速器与高效算法
  • AI 加速器的将来

1

为什么须要专用 AI 加速器?

构建 ML 专用处理器有三个方面的起因:能效、性能、模型大小及复杂度。近来,要进步模型准确率,通常做法是扩充模型参数量,并用更大型的数据集训练模型。计算机视觉、自然语言解决和举荐零碎都采纳这种做法。

语言模型方面,前几年诞生的 GPT- 3 有 1750 亿参数,过后被视为大模型的“天花板”,但起初又呈现了 GLaM 和 NVIDIA MT-NLG,参数量别离达到 1.2 万亿和 5300 亿。依照历史法则,模型将越来越大,而现有处理器的算力将无奈满足大模型在训练工夫和推理提早方面的要求。

不过,构建 AI 专用加速器的最重要起因还是能效,开发 AI 专用芯片可节俭微小的能源,可笼罩研发投入无余。

为什么须要高能效的处理器?

ML 模型越大,须要执行的内存拜访操作就越多。与内存拜访相比,矩阵 - 矩阵运算和矩阵 - 向量运算的能效高很多。依据斯坦福大学韩松博士的论文 (https://arxiv.org/pdf/1506.02…),读取内存的能耗比加 / 乘运算操作的能耗高出好几个数量级。大型神经网络因为无奈片上存储,须要执行更多 DRAM 读取操作,因而能耗还要更高。

图源:https://arxiv.org/pdf/1506.02…

用通用处理器运行深度神经网络时,扩充处理器规模能够带来性能晋升,但即使只是小幅晋升也须以大量能耗和巨额设施老本为代价。

CPU 等通用处理器就义低能耗换取通用性,AI 加速器等专用处理器则就义通用性换取低能耗。

应用 AI 加速器则不一样。AI 加速器通过改良设计,能够缩小内存拜访,提供更大的片上缓存,还能够具备特定的硬件性能(如减速矩阵 - 矩阵计算)。因为 AI 加速器是基于特定而构建的设施,可依据算法进行适配改良,因而其运行效率会比通用处理器更高。

2

ML 硬件的分类——CPU、GPU、AI 加速器、FPGA 和 ASIC

接下来咱们谈谈加速器的不同品种,以及它们的通用和专用水平。

如上图所示,最具通用性的是 CPU,能够运行任意代码。专用芯片可执行的工作,CPU 也能执行,如图像处理、语音解决、机器学习等。然而,CPU 的性能和能效都比拟低。

专用性最强的是专用集成电路(ASIC),又称固定性能芯片,因为它只能执行一种或几种工作,而且通常不可编程,也没有面向开发者的 API。耳机中的降噪处理器就是一种 ASIC 芯片,它须要同时具备低能耗和高性能,这样能力既缩短耳机电池应用工夫,又能实现低提早,免得用户看节目时遇到声画不同步的蹩脚体验。

上图中,越靠左代表通用性和可编程性越强;越靠右代表专用性和效率越高。那么 GPU、FPGA 和 AI 加速器别离处于图中什么地位呢?

答案是:它们都处在这两个极其之间。

凑近 ASIC 一端的是现场可编程逻辑门阵列(FPGA)。顾名思义,FPGA 是可编程的,但编程人员须要具备硬件设计常识,还须对 Verilog、VHDL 等硬件描述语言(HDL)有肯定理解。换言之,FPGA 编程与硬件关联度太高,而软件开发人员不足这方面的编程技能和工具,因而难以对它进行编程。

凑近 CPU 一端的是 GPU。GPU 是面向特定目标处理器,善于解决并行任务,例如图形着色器计算和矩阵乘法。CPU 更适宜提早敏感型利用,GPU 则更适宜要求高吞吐量的利用。GPU 与 CPU 的相似之处在于它们都可编程。而作为并行处理器,GPU 应用 NVIDIA CUDA 和 OpenCL 等语言,尽管能解决的工作品种比 CPU 少,但在运行蕴含并行任务的代码时极高效。

Intel 的 Habana Gaudi 处理器、AWS 的 Trainium 和 Inferentia 芯片等 AI 加速器则处在 GPU 的右侧。Habana Gaudi 处理器具备可编程性,但通用性比 GPU 更低,所以应处 GPU 右侧。AWS 的 Inferentia 芯片不可编程,但能够减速多种操作,如果你的 ML 模型不反对这些操作,Inferentia 就会执行 CPU 回退(fallback)模式。综上,Inferentia 应处 Habana Gaudi 的右侧。

3

“硬件感知(Hardware-aware)”的算法和“算法感知(Algorithms-aware)”的硬件

通过以上分类,咱们对各种处理器有了大抵意识。上面咱们来谈谈这些处理器如何与软件互相配合。

通用计算模型有两个组成部分:(1) 软件与算法;(2) 运行软件的硬件处理器。一般而言,这两局部相互独立——编写软件时很少会思考软件会在什么硬件上运行;而硬件设计的出发点则是让硬件尽可能反对更多品种的软件。

通用计算模型逐步演进,须要利用于深度学习等要求高性能和高能效的畛域,因而须要增强算法设计和硬件设计之间的分割。古代 ML 计算模型同样蕴含两个组成部分:(1)ML 算法与软件框架;(2) 与 AI 加速器配合应用的通用处理器。

不同于通用计算模型的开发,ML 研发人员会针对特定硬件设计 ML 算法。比方,编写代码时能够充分利用硬件的特定性能(如反对多种精度:INT8、FP16、BF16、FP32)实现特定的芯片性能(混合精度、结构化稠密)。而后,用户就能够通过常见的 ML 软件框架应用这些性能。同理,硬件设计师会针对特定算法构建 AI 加速器。比方,为减速 ML 矩阵计算而设计专门的芯片性能(如 NVIDIA 在 Volta GPU 架构中引入 Tensor Core)。

这就是 AI 加速器和 ML 算法的协同进化。硬件设计师为 AI 加速器减少 ML 算法能够应用的性能,而 ML 研发人员则利用 AI 加速器的硬件性能量身设计新的算法。

硬件和软件的协同能够带来更好的性能和更高的能效。

4

AI 加速器与高效 ML 算法的协同进化

AI 加速器分为两类:(1) 用于训练的 AI 加速器;(2) 用于推理的 AI 加速器。因为训练和推理的指标不同,而 AI 加速器是针对特定工作负载的专用处理器,因而有必要为不同类型的工作负载别离设计处理器。

用于训练的 AI 加速器的指标是缩小训练工夫,而且应具备能配合训练算法的硬件特点。因而,AI 训练加速器的功率通常较大,内存空间也较大,以满足较高的吞吐量(每秒解决的数据)要求。因为 AI 训练加速器重视吞吐量,因而进步吞吐量和利用率有助于升高能耗老本(即通过扩充吞吐量升高“能耗 / 吞吐量”之间的比率)。AI 训练加速器还反对混合精度训练,应用较低精度以放慢计算速度,应用高精度累积计算结果,从而实现比通用处理器更高的能效。(后文还将详谈 AI 加速器的混合精度训练。)

AI 推理加速器的指标是,在运行大量独立数据批次时升高预测提早,因而须要具备高能效特点,须要升高“能耗 / 预测”之间的比率。尽管也可将训练加速器用于推理减速(毕竟训练中的前向流传过程实质上即是一种推理工作),但应用训练加速器时,“能耗 / 推理”之比会大很多,因为训练加速器解决小型数据批次的推理申请时利用率较低。

训练加速器就像公交车,只有放弃乘客满员能力实现高能效(油耗 / 乘客数之比低)。如果偌大的公交车每次只载一个人,其油耗 / 乘客数之比将变得极高。而推理加速器就像跑车,其速度比公交车快,只载一人时能效比公交车高(跑车的单名乘客油耗比公交车低)。但如果想用跑车一次载 50 集体,它就会跑得极慢(何况超载守法)。

下文将别离议论训练和推理的工作流,以及 AI 加速器和软件应具备什么特点能力在训练和推理中实现高性能和高能效。

5

针对推理的 AI 加速器与高效算法

ML 推理即是依据新的数据应用训练好的模型以输入预测后果。本节将探讨 AI 加速器上运行的可晋升推理性能和效率的算法。

晋升机器学习效率最重要的办法是量化。要充沛了解量化,首先须理解计算机硬件中的数字示意办法。浮点数是数字计算机中用以示意间断实值的离散示意模式。ML 算法通常基于 IEEE 754 规范用单精度(FP32)贮存和解决数字。IEEE 754 还规定了 AI 加速器反对的其余常见浮点类型,如半精度(FP16)和双精度(FP64)。

古代 AI 加速器也反对 IEEE 754 以外的数字格局,例如 BF16(由 Google Brain 引进;NVIDIA Ampere GPU、AWS Inferential、AWS Tranium、Intel Habana Gaudi 和 Google TPU 均反对此格局)和 TF32(NVIDIA Ampere 架构和 AWS Tranium 芯片反对此格局)。推理加速器还反对整数精度,如 INT8 和 INT4。

量化在推理中的劣势

在推理工作中,模型权重和激活函数输入均可被量化,例如可将 FP32(训练罕用精度)转化为更低精度的示意模式(FP16、BF16 和 INT8)。应用较低精度能够取得更高的性能和能效。当把 FP32 转化为 FP16 操作时,数据大小可减半,能耗可缩小约 75%(数据起源:https://arxiv.org/pdf/1506.02…),应用的硅面积(silicon area)也可缩小约 75%。

如果仅从推理的角度思考硬件设计,能够构建仅供推理应用、仅反对较低精度的加速器,这样就能够放大加速器的尺寸,并进步能效。将运算后果从 FP32 转化为 INT8 数据还可进一步缩小能耗,因为数据大小缩小到原来的 1 /4。

然而,通过量化办法晋升计算效率会损失肯定的预测准确性。因为将高精度示意模式转化为低精度实质上是一种压缩,压缩意味着会损失局部数据。FP32 的动静范畴比 FP16 和 INT8 更大,因而,推理中,量化的目标是保留数据中的“信号”,去除数据中的“噪声”,为实现这个目标能够有多种办法。

应用 NVIDIA GPU 进行量化

NVIDIA 的 Ampere 和 Turing 等较新 GPU 架构均反对多种精度类型。2016 年,NVIDIA 在 Pascal 架构中首次引进了 FP16 精度类型,而最新的 Ampere 和 Turing 架构 GPU 均体现了“硬件与算法的协同进化”。我之前写过一篇文章介绍 GPU 的残缺发展史和不同架构的 GPU 及其特点:Choosing the right GPU for deep learning on AWS(https://towardsdatascience.co…)。

本节将聚焦硬件和软件层面如何反对 GPU 进行量化。

以 NVIDIA 的 Ampere 架构为例。你能够在 AWS 云服务器上通过启动 Amazon EC2 p4d 实例或 G5 实例体验 Ampere 架构的性能。p4d 和 G5 实例别离应用 NVIDIA 的 A100 和 A10G GPU,两款 GPU 都基于 Ampere 架构,都反对 FP64、FP32、FP16、INT8、BF16 和 TF32 精度类型,也都蕴含一种被 NVIDIA 称为“Tensor Core”的运算单元,用于混合精度计算。推理时用到的重点精度类型只有 FP16 和 INT8 两种(其余精度类型将在下一节中提到训练时详谈)。

大多数深度学习框架都应用 NVIDIA GPU 和 FP32 格局训练模型,因而 NVIDIA 推出 TensorRT 编译器,用以放慢推理速度。TensorRT 可将 FP32 格局的模型权重和激活函数量化为 FP16 和 INT8 格局。量化时,TensorRT 先确定一个比例因子(scaling factor),而后依据该系数将 FP32 的动静范畴映射到 FP16 或 INT8 的动静范畴。映射到 INT8 的难度尤其高,因为 INT8 的动静范畴比 FP32 小太多。INT8 仅能示意 256 个数值,而 FP32 足足能示意 4.2×109 个数值。

如何在通过量化进步推理速度的同时缩小精度损失?个别有两种办法:

  • 训练后量化(PTQ):应用一个训练好的、以 FP32 格局计算的模型,确定比例因子,而后将 FP32 映射为 INT8。确定比例因子的办法是:TensorRT 掂量每个神经网络层中激活函数输入的散布,而后找到一个使参考散布(reference distribution)和量化散布(quantized distribution)之间信息损失(KL 散度)最小的比例因子。
  • 量化感知训练(QAT):在训练中计算比例因子,使模型能够适应信息损失并将信息损失降到最低。

可见,硬件一直倒退,具备更多可晋升效率的性能(如升高精度)。同时,算法也一直进化,能够更好地利用硬件的性能。

我的另一篇文章提供了 NVIDIA TensorRT 在 GPU 上履行量化的代码示例(https://towardsdatascience.co…)。

应用 AWS Inferentia 芯片进行量化

NVIDIA GPU 设计之初用于图像处理减速,起初才演变成弱小的 AI 加速器,而 AWS Inferentia 芯片一开始即是为机器学习推理而生。

每块 AWS Inferentia 芯片含 4 个 NeuronCore。NeuronCore 是基于脉动阵列的矩阵相乘引擎,有两级存储层次结构和极大的片上缓存空间。AWS Inferentia 芯片反对 FP16、BF16 和 INT8 数据类型,不反对更高精度的格局——毕竟 AWS Inferentia 是一种推理专用处理器,推理时毋庸用到更高的精度。正如 NVIDIA 为 GPU 推出了 TensorRT 编译器,AWS 也推出了 AWS Neuron SDK 和 AWS Neuron 编译器,该编译器反对量化和优化,可进步推理效率。

只管 AWS Inferentia 芯片反对 INT8 格局,但截至本文撰写时,AWS Neuron 编译器只反对量化到 FP16 和 BF16 格局。用 FP32 格局训练的模型会在编译过程中主动被转化为 BF16 格局。如果在应用 AWS Neuron 编译器之前人工将 FP32 格局的权分量化为 FP16,那么编译器就会保留 FP16 精度用于推理。

与 GPU 相比,AWS Inferentia 芯片不可编程,专用性比 GPU 更强,更靠近 ASIC。如果模型中蕴含的操作均为 AWS Inferentia 所反对,那么对于特定的模型和批次规模(batch size)而言,应用 Inferentia 就比应用 GPU 更能进步模型的能效。然而,如果模型含有 Inferentia 不反对的操作,AWS Neuron 编译器会主动将相应操作置于主机 CPU 上,这就导致 CPU 和加速器之间须要进行数据搬运,进而升高性能和效率。

6

针对训练的 AI 加速器与高效算法

ML 训练即利用训练数据优化模型参数,以进步模型的预测准确度。本节将探讨 AI 加速器上运行的算法如何晋升推理性能和能效。

接下来咱们依旧会探讨精度,不过这次是从训练工作流的角度。如前所述,训练时,模型权重和激活函数都以 FP32 格局存储,FP32 遵循早在深度学习之前就诞生的 IEEE 754 浮点数规范。FP32 之所以被选为机器学习默认的浮点数示意模式,是因为训练时 FP16 可示意的信息量不够大,而 FP64 可示意的信息量则太大,而且也不用用到这么高的精度。机器学习须要一种精度处在 FP16 和 FP64 之间的示意格局,但过后的硬件并不反对。

换言之,过后的硬件并不能满足 ML 算法的需要,并未成为“算法感知”的硬件。

如果过后的 ML 钻研人员有更好的抉择,他们应该会选一种不同于 FP32 的格局,或者应用混合精度来晋升性能和效率。混合精度也正是目前 AI 加速器的倒退方向。实现混合精度,须要硬件和算法的协同设计。

混合精度训练晋升性能与效率

矩阵乘法运算是神经网络训练和推理的基本操作。AI 加速器的次要工作即为在神经网络的不同层中将输出数据和权重的大型矩阵相乘。混合精度训练背地的思维是,训练时的矩阵乘法产生在较低精度示意(FP16、BF16、TF32),因而它们更快和能效更高,而后用 FP32 格局累积运算后果,以升高信息损失,从而晋升训练速度和能效。

应用 NVIDIA GPU 进行混合精度训练

2017 年,NVIDIA 发表推出 Volta GPU 架构,其中蕴含专门用于机器学习的 Tensor Core 运算单元。Tensor Core 通过 FP16 运算和 FP32 累积后果实现混合精度训练(https://arxiv.org/abs/1710.03740)。NVIDIA 的新一代新架构还反对更多低精度格局(BF16、TF32)。在芯片档次,Tensor Core 执行低精度(reduced-precision)交融乘加(FMA)运算,用 FP32 累积后果。

每一代 NVIDIA 架构的提高都体现了硬件和算法之间的协同设计和协同倒退。

  • NVIDIA Volta 架构(2017)引入第一代 Tensor Core,过后仅反对 FP16 运算和 FP32 累积后果。
  • NVIDIA Turing 架构(2018)的 Tensor Core 反对更低精度的 INT8 和 INT4(次要能够减速推理,而非减速训练)。
  • NVIDIA Ampere 架构(2020)的 Tensor Core 还反对 BF16 和 TF32,也就是说,它能够执行 FP16、BF16 和 TF32 运算,并且用 FP32 累积后果,以实现混合精度

混合精度训练的一大难点是软件层面的实现。用户必须在训练时执行额定的操作,比方将权重转化为 FP16 格局,但同时会保留权重的 FP32 正本和损失缩放(loss scaling)。只管 NVIDIA 能够让深度学习框架在只需批改大量代码的状况下执行这些操作,它对用户的要求仍然很高,不像应用 FP32 训练那么简略。

NVIDIA 的 Ampere 架构反对 TF32,能够无效解决这一用户体验难题。TF32 格局的益处在于,它联合了 FP32 的动静范畴和 FP16 的精度,因而深度学习框架无需转换格局和保留正本等额定操作即可间接反对 TF32 格局。然而,在为开发者缩小麻烦的状况下,应用 TF32 可实现比 FP32 更好的性能,但 NVIDIA 仍然举荐应用 FP16 或 BF16 格局进行混合精度训练,以便取得最快的训练性能。

应用其余 AI 加速器进行混合精度训练

Intel Habana Gaudi 处理器

Habana Gaudi 加速器反对混合精度训练的形式与 NVIDIA GPU 相似——通过一个附加工具配合深度学习框架,应用格局转换和正本保留性能。若想体验 Intel Habana Gaudi AI 加速器的性能,能够通过 AWS 云服务器启动 Amazon EC2 DL1 实例,该实例装备 8 个 Gaudi 加速器。

AWS Tranium 芯片

AWS 在 2021 年 re:Invent 大会上发表推出 Tranium 芯片,该芯片由 AWS 的 Annapurna 实验室研发,用于 AI 减速。目前,Tranium 芯片尚未失去大规模利用。AWS 在大会上介绍称,Tranium 将反对 FP16、TF32、BF16、INT8,以及一种称为 cFP8(定制 8 位浮点数)的全新格局。

7

AI 加速器的将来

现在,ML 算法钻研和硬件设计都在蓬勃发展。AI 加速器也将在性能和能效方面继续提高,逐步能够像通用处理器一样无缝应用。

古代的 AI 加速器已具备现实中的硬件性能,例如反对 INT1 和 INT4,这两种精度类型尚未被用于训练和推理,但或者它们的存在能够催生新的 ML 算法。AI 加速器之间的互联也渐见变革。

随着模型规模越来越大,咱们须要更大的计算集群,将更多 AI 加速器连接起来,从而反对更大的工作负载。为此,NVIDIA 推出了高带宽的 NVLink 和 NVSwitch,用于 GPU 之间的互联;Intel 的 Habana Gaudi 处理器则在片上集成了基于以太网的 RoCE RDMA。将来 AI 利用将更加宽泛,AI 加速器也将成为古代计算环境的中流砥柱。

心愿将来的 AI 加速器带来更好的用户和开发者体验。现在的异构计算模型须要协调多个 CPU 和 AI 加速器,对大部分数据科学家和开发人员而言,把握它们的联网和存储设置难度颇高。应用 Amazon SageMaker 等云托管服务可省去治理基础设施的麻烦,能够不便地扩充机器学习规模,然而,开源框架仍心愿用户对底层硬件、精度类型、编译器抉择和联网原语等有较深的理解。

将来,开发人员能够登入近程 IDE,而后应用开源 ML 框架运行代码,而不用思考代码在何种设施上以何种形式运行 。他们惟一须要思考的只是老本和速度之间的衡量——想取得高速度就多花钱,想省钱就在速度上斗争。我是个乐观的人,我认为间隔这样的将来曾经不远了。

(本文经受权后编译公布。原文:https://towardsdatascience.co…

头图源自 brookhaven, Pixabay

欢送下载体验 OneFlow v0.8.0 最新版本 https://github.com/Oneflow-In…

正文完
 0