作者|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...