「科普」一头雾水?TPU、IPU、NPU是什么?

「科普」一头雾水?TPU、IPU、NPU是什么?

在 AI 崛起的这几年来,在高通、苹果、三星、麒麟、联发科、Google 的 SoC 上,各位常常会看到“TPU、IPU、NPU”之类的名字,这些“XPU”有什么分散?是真的有那么多不同的架构?照旧厂商的看法营销?

为了解答这个成绩,SemiEngineering 搜集了多量业内人的看法并汇总成文,原文链接:https://semiengineering.com/what-is-an-xpu。我们对此举行精简和编译,但文章内容仍然十分硬核,做盛情理准备,我们如今发车!

图源aita

从 CPU 及其提高办法的角度来看,这些“XPU”中的大局部都不是真正的处理器。机器学习增速器是一类处理器,但它们用来增速的处理局部却多种多样。它们更像是 GPU,是用于实行特别事情负载的增速器,并且它们本身就有很多典范。

处理器的实质可以归结为三件事,最初照旧回到指令集架构 (ISA):起首界说要做的事,然后是 I/O 和内存(支持 ISA 和它试图完成的职责)。而将来我们将看到比已往两、三年更多的创新和厘革。

很多新架构都不是单一处理器,它们是不同典范的处理器或可编程引擎的组合,它们存在于同一个 SoC 或同一个体系中,将软件职责分派到不同的硬件或可机动厘革的可编程引擎上。一切这些处理器约莫共享一个公用 API,但实行域有所不同。在这个层面,的确是有种品种型的不同架构。

但现原形况是,大局部“XPU”的定名都是营销,并且这些定名和缩写,同时指代两种东西:一种是用于表明处理器的架构,比如 SIMD(单指令大多据),而另一种界说了它正在寻址的使用步骤段。以是它既可以用来界说处理器架构,也可以用作如“张量处理单位(TPU)”如此的品牌名,毕竟厂商们不是在为单个处理器定名,而是在为他们的架构定名。

汗青

在40 年前,定名的成绩要简便很多。起首是各位最熟习的中央处理器 (CPU) ,固然它有很多演化版本,但它们基本上都是冯诺依曼架构,是图灵完备的处理器。每个都有不同的指令集来提升处理听从,当年还针对繁复指令集 (CISC) 与精简指令集 (RISC) 优缺陷,有过十分广泛的讨论。

厥后的 RISC-V 的显现给 ISA 带来了很多眷注。 ISA 界说了处理器针对已界说职责的优化水平,人们可以查察 ISA 并开头盘算周期。比如,假如一个 ISA 具有本机指令并以 1GHz 运转,那我们就能将它与另一个 ISA 处理器举行比力,后者要完成相反的功效约莫必要两条指令,但频率是 1.5GHz,孰强孰弱就很分明了。

CPU 有多种封装办法,偶尔将 IO 或内存放在同一个封装中,尔后两者被称为微控制器单位 (MCU)。在调制解调器大行其道的时分,数字信号处理器(DSP) 显现了,它们的不同之处在于它们使用了哈佛架构,将指令总线与数据总线分开了,此中一些还用了 SIMD 架构来提升数据处理听从。

指令和数据的分散是为了提高吞吐率(固然它的确限定了自编程之类的边沿编程)。通常,这里的界限条件不是盘算,而是 I/O 或内存。业内的重点以前从提升盘算才能,转变成确保有充足的数据来让盘算举行下去并坚持功能。

当单个处理器的功能无法再持续提升,那就把多个处理器连在一同。通常它们还会使用共享内存,让每个处理器和整个处理器集群都坚持图灵完备。步骤的任何局部在哪个中心上实行都不关紧急,横竖后果是一样的。

而下一个严重提高,是图形处理单位(GPU)的显现。GPU冲破了常规,由于每个处理单位或管线都有本人的内存,无法在处理单位外部寻址。由于内存轻重仅限,只能实行那些能放入内存的职责,以是对职责本身仅限定。

关于某些典范职责,GPU 好坏常强壮,但它们的管线十分长,招致了延长和不确定性。这些管线让 GPU 单位不休处理数据,但假如要改造管线,听从就会大打扣头。

GPU 和厥后的通用 GPU (GPGPU) 界说了一种编程范式和软件栈,使它们比从前的增速器更容易上手。多年来,某些事情不休是专业化的,有效于运转一连步骤的 CPU,有专注于图像体现,并将我们带入高度并行天下的图形处理器,后者使用很多小的处理单位来实行职责(包含如今的机器学习职责)。

那有什么架构端正可以用来表明一切的新架构吗?有的,大概片上网络 (NoC)是个切合的界说 。已往,处理器阵列通常用内存或安稳网络拓扑毗连(网状或环形),而 NoC 让分布式异构处理器能以更机动的办法举行通讯。而将来,它们还可以在不使用内存的情况下举行通讯。

如今的 NoC 是针对数据的,而将来的 NoC 也能发下令和关照等数据,可以扩展到那些增速器间不但是交互数据的范畴。增速器阵列或集群的通讯需求约莫与 CPU 或标准 SoC 的通讯需求不同,但 NoC 并不会将计划者限定在一个子集里,他们能经过满意不同增速器的特别通讯需求来优化和提高功能。

实行架构

另一种区分处理器的办法,是看它们对特定运转情况举行的优化。比如,云端和微型物联网装备上约莫可以跑相反的软件,但在不同情况中使用的架构是完全不同的,它们对功能、功耗、本钱、极度条件下的运转才能等要求都是不同的。

这约莫是由于对低延长的需求,大概是由于功耗的缘故,一些原本针对云盘算的软件,如今被渐渐放到装备端侧运转。固然是不同的硬件架构,但各位天然渴望拥有完全相反的软件栈,以便软件可以在两种场合跑起来。云端必要提供机动性,由于它会跑不同典范的使用步骤,并且用户浩繁。这要求办事器硬件又要有针对使用的优化,又要能提供不同的范围。

而机器学习职责也有本人的要求,在使用神经网络和机器学习构建体系时,你必要使用软件框架和通用软件栈,让网络编程并映射到硬件,然后你可以从 PPA 的角度让软件适配不同的硬件。这推进了“让不同典范的处理和处理器顺应种种硬件”的需求。

这些需求是由使用界说的。举个例子,就像一家公司计划了一个用于图形利用的处理器,他们优化和增速图形跟踪,并实行诸如图形重新排之类的利用,另有其他像矩阵乘法之类的增速机器学习的蛮力局部。

而内存拜候关于每个架构来说都是一个特别的成绩,由于当你构建增速器时,最紧张的目标是让它尽力长时间坚持满载,你必需将尽约莫多的数据传送到 ALU,让它尽约莫多地吞吐数据。

它们有很多协同之处,它们都有当地内存,有片上网络来举行通讯,每个实行算法的处理器都在处理一小块数据,这些利用都由运转在 CPU 上的利用体系调治。

关于硬件计划职员,难搞之处在于职责猜测。只管在某些层面上会有相似的利用典范,但人们正在研讨不同层面上差别。为了处理神经网络,必要几品种型的处理才能。这意味着你必要对神经网络的一局部举行某种办法的处理,然后在另一层又约莫必要另一种处理利用,并且数据挪动和数据量也是逐层厘革的。

你必要为处理管线构建一整套不同的增速器,而了解和分析算法并界说优化历程,是触及到完备体系布局的职责。就像关于基因组测序,你约莫必要举行某些处理,但你不克不及用单一典范的增速器来增速一切东西。CPU卖力办理实行流水线,对其举行设置、实行 DMA、举行决定。

中间约莫触及到分区实行的成绩。没有任何一种处理器可以针对每种职责举行优化——FPGA、CPU、GPU、DSP都做不到。芯片计划商可以创建一系列包含一切这些处理器的芯片,但客户使用端的难点在于,他们要本人确定体系的各个局部要在哪些处理器上运转,是在 CPU 上?在 FPGA 上?照旧在 GPU 上?

但无论怎样,内里总是必要有 CPU 的,CPU 要卖力实行步骤的不端正局部,CPU 的通用性有本人的上风。但反过去,假如是专门的数据布局或数学运算,CPU就不可了。毕竟 CPU 是通用处理器,它没有针对任何东西举行优化,没有特别善于的项目。

笼统层的改动

从前,硬件/软件界限由 ISA 界说,并且该内存是一连可寻址的。而触及到多处理器时,寻常内存界说也是也是一律的。但是可以想象,在数据流引擎中,一律性并不那么紧张,由于数据会从一个增速器直接传到另一个增速器。

Speedster 7t FPGA布局图

假如你对数据集举行分区,那一律性会成为停滞,你必要比力和更新数据,并会占用分外的运算周期。以是我们必要,也必需思索不同的内存布局,毕竟可用的内存就那么点。大概可以拜候相邻的内存,但也会很快耗尽,然后无法及时拜候。以是必需在计划中加以了解,并且是要在了解架构的情况下去计划它。

我们还必要更高等别的笼统层。有些框架可以将已知网络映射或编译到目标硬件上,比如在一组低级内核或 API,它们将在软件堆栈中使用,并终极由神经网络的映射器使用。在底层,你约莫在用不同典范的硬件,这由你想要完成的目标来决定。横竖就是用不同的硬件,不同的 PPA ,完成了相反的功效。

而这会给编译器带来很大的压力。主要的成绩是你将来要怎样对增速器举行编程?你对否搞了个像初代 GPU 那样串在一同的硬连线引擎?大概你对否构建了具有本人指令集的小型可编程引擎?如今你必需单独对这些东西举行编程,并将这些引擎中的每一个都与数据流毗连起来,然后实行职责。

一个处理器拥有整个指令集的某个子集,另一个处理器拥有一个不同的子集,它们都将共享控制流的某些堆叠局部,编译器得了解它的库并举行映射。

结论

Google 的 TPU

但是处理器的架构并没有改动,它们仍旧恪守已往 40 年来不休依照的端正。变的是芯片的布局办法,它们如今包含多量异构处理器,这些芯片依据各自的职责,对内存和通讯举行优化。每个芯片都对处理器功能、优化目标、所需的数据吞吐量以及数据流做出了不同的选择。

每个硬件需求商都渴望将本人的芯片与其他芯片区分开来,品牌推行比议论内里武艺细节要容易得多。厂商给本人的芯片起了“XPU”的名字,并将它与特定典范的使用接洽起来,但“XPU”并不是关于某个特定硬件架构的名字。

就像 Google 把本人开发的自用集成电路(ASIC)叫做 TPU(Tensor Processing Unit)张量处理单位/处理器,但实践上 TPU 指代的,并非特定的硬件架构。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享