行业观察 | 来了解一下AI加速器

本文参考网上可查询到的资料简要总结AI加速器的概念和应用等信息 1

未完待续

更新: 2023 / 3 / 22


行业观察 | 来了解一下AI加速器

  • 前言
  • 加速器
  • 处理器
    • 处理器是什么?
    • 处理器进化史
  • 加速器架构
    • 指令集 ISA
    • 特定领域的指令集 ISA
    • 超长指令字(VLIW)架构
    • 脉动阵列
    • 可重构处理器
    • 数据流操作
    • 内存处理
  • 市场现状
    • AI加速器不同实现方法
      • 英伟达:GPU+CUDA
      • Cerebras
      • GraphCore
    • 可重构数据流
    • 脉动阵列 + VLIW: TPUv1、Groq、Habana
    • 基于 RISC 的 AI 加速器
      • Mythic
      • LightMatter
      • NeuReality
  • 参考链接


前言

AI机器学习深度学习 最早可追溯到几十年前,但是在过去的十几年才开始流行。在接下来的文章内容中,前 苹果飞利浦Mellanox(现属英伟达)工程师、普林斯顿大学博士 Adi Funchs 尝试从 AI加速器 的角度为我们寻找这些问题的答案。

过去,科技公司通过观察用户行为、研究市场趋势,在通常需要数月甚至数年时间的周期中优化产品线来改进产品。
如今,人工智能已经为无须人工干预就能驱动人机反馈的自我改进( self-improving ) 算法铺平了道路。这一切都是在数百万(甚至数十亿)用户的规模下完成的,并极大地缩短了产品优化周期。

人工智能的成功归功于三个重要的趋势:

  • 1. 新颖的研究项目推动新的算法和适用的用例;
  • 2. 拥有收集、组织和分析大量用户数据的集中式实体(例如云服务)的能力;
  • 3. 新颖的计算基础设施,能够快速处理大规模数据;

在这里我们重点关注第3个趋势,具体来说,会对AI应用中的加速器做一个高层次的概述——AI加速器是什么?它们是如何变得如此流行的?


加速器

加速器源自一个更广泛的概念,而不仅仅是一种特定类型的系统或实现。而且,它们也不是纯硬件驱动的。事实上,AI加速器行业的大部分焦点都集中在构建稳健而复杂的软件库和编译器工具链上。

人工智能不仅仅是软件和算法

AI机器学习深度学习 的概念可以追溯到50多年以前,然而在过去的十几年才开始真正流行起来。

深度学习的开始源于 2012 年多伦多大学的 Alex Krizhevsky、Ilya Sutskever、Geoffrey Hinton 等人提出了一个名为 AlexNet 的深度神经网络并凭借该网络赢得了 2012 年大规模视觉识别挑战赛的冠军。在这场比赛中,参赛者需要完成一个名叫 object region 的任务,即给定一张包含某目标的图像和一串目标类别(如飞机、瓶子、猫),每个团队的实现都需要识别出图像中的目标属于哪个类。

AlexNet 的表现颇具颠覆性。这是获胜团队首次使用一种名为 卷积神经网络CNN )的深度学习架构。由于表现过于惊艳,之后几年的 ImageNet 挑战赛冠军都沿用了 CNN。这是计算机视觉史上的一个关键时刻,也激发了人们将深度学习应用于其他领域(如 NLP、机器人、推荐系统)的兴趣。

ImageNet 挑战赛冠军团队的分类错误率逐年变化情况(越低越好)。

「为了加速训练,我们用到了非饱和神经元和一个非常高效的 GPU 卷积操作实现。」

事实证明,AlexNet 作者花了相当多的时间将耗时的卷积操作映射到 GPU 上。与标准处理器相比,GPU 能够更快地执行特定任务,如计算机图形和基于线性代数的计算( CNN 包含大量的此类计算)。高效的 GPU 实现可以帮他们缩短训练时间。他们还详细说明了如何将他们的网络映射到多个 GPU,从而能够部署更深、更宽的网络,并以更快的速度进行训练。

AlexNet 作为一个研究案例,我们可以找到一个回答开篇问题的线索:尽管算法方面的进展很重要,但使用专门的 GPU 硬件使我们能够在合理的时间内学习更复杂的关系(网络更深、更大 = 用于预测的变量更多),从而提高了整个网络的准确率。如果没有能在合理的时间框架内处理所有数据的计算能力,我们就不会看到深度学习应用的广泛采用。

如果我是一名 AI 从业者,我需要关心处理器吗?

作为一名 AI 从业者,如果你探索新的模型和想法,你或多或少需要熟悉一些底层硬件和如何调试性能,以减少你的推理和训练时间。

在这里插入图片描述
各种并行化技术对于矩阵乘法的加速效果

如果不懂硬件,你所花的时间可能会多 2 - 3 倍,有时甚至多一个数量级。简单地改变做矩阵乘法的方式可能帮你收获巨大的性能提升(或损失)。
那么,为什么不能保证得到最佳性能呢?因为我们还没有有效地达到合理的 user-to-hardware expressiveness。我们有一些有效利用硬件的用例,但还没泛化到「开箱即用」的程度。这里的「开箱即用」指的是在你写出一个全新的 AI 模型之后,你无需手动调整编译器或软件堆栈就能充分利用你的硬件。

在这里插入图片描述
AI User-to-Hardware Expressiveness

上图说明了 user-to-hardware expressiveness 的主要挑战。我们需要准确地描述用户需求,并将其转换成硬件层(处理器、GPU、内存、网络等)能够理解的语言。这里的主要问题是,虽然左箭头( programming frameworks )主要是面向用户的,但将编程代码转换为机器码的右箭头却不是。因此,我们需要依靠智能的编译器、库和解释器来无缝地将你的高级代码转换为机器表示。

这种语义鸿沟难以弥合的原因有两个:

  • 1. 硬件中有丰富的方法来表达复杂的计算。你需要知道可用的处理元素的数量(如 GPU 处理核心)、你的程序需要的内存数量、你的程序所展示的内存访问模式和数据重用类型,以及计算图中不同部分之间的关系。以上任何一种都可能以意想不到的方式对系统的不同部分造成压力。为了克服这个问题,我们需要了解硬件 / 软件堆栈的所有不同层是如何交互的。虽然你可以在许多常见的场景中获得良好的性能,但现实中还有无尽的长尾场景,你的模型在这些场景中可能表现极差。
  • 2. 虽然在计算世界中,软件是慢的,硬件是快的,但部署世界却在以相反的方式运行:深度学习领域正在迅速变化;每天都有新的想法和软件更新发布,但构建、设计和试生产(流片)高端处理器需要一年多的时间。在此期间,目标软件可能已经发生了显著的变化,所以我们可能会发现处理器工程师一年前的新想法和设计假设已经过时。

因此,你(用户)仍然需要探索正确的方法来识别计算耗时瓶颈。为此,你需要了解处理器,特别是当前的 AI 加速器,以及它们如何与你的 AI 程序交互。


处理器

回顾一下处理器的发展历史。


处理器是什么?

处理器是计算机系统中负责实际数字计算的部分。它接收用户输入数据(用数值表示),并根据用户的请求生成新的数据,即执行一组用户希望的算术运算。

随着计算密集型应用的日益普及和大量新用户数据的出现,当代计算系统必须满足对处理能力不断增长的需求,因此我们总是需要更好的处理器,更好意味着更快,即花同样的时间、使用更少的能源。


处理器进化史

计算机系统的进化关键在于半导体行业,以及它如何改进处理器的速度、功率和成本。

在这里插入图片描述
英特尔 4004:第一款商用微处理器,发布于 1971 年

处理器是由被称为 晶体管 的电子元件组成的。晶体管是逻辑开关,用作从原始逻辑函数(如 )到复杂算术( 浮点加法正弦函数 )、存储器(如 ROMDRAM )等所有东西的构建模块。这些年来,晶体管一直在不断缩小。

处理器发展第一阶段:频率时代(1970-2000 年代)

在这里插入图片描述
微处理器频率速率的演变

早期,微处理器行业主要集中在 CPU 上,因为 CPU 是当时计算机系统的主力。微处理器厂商充分利用了缩放定律。具体来说,他们的目标是提高 CPU 的频率,因为更快的晶体管使处理器能够以更高的速率执行相同的计算(更高的频率 = 每秒更多的计算)。这是一种有些简单的看待事物的方式;处理器有很多架构创新,但最终,在早期,频率对性能有很大贡献,从英特尔 40040.5MHz48650MHz、奔腾的 500MHz 到奔腾 4 系列的 3–4GHz

在这里插入图片描述
功率密度的演变

大约在 2000 年,登纳德缩放比例定律开始崩溃。具体来说,随着频率的提升,电压停止以相同的速率下降,功率密度速率也是如此。如果这种趋势持续下去,芯片发热问题将不容忽视。然而,强大的散热方案还不成熟。因此,供应商无法继续依靠提高 CPU 频率来获得更高的性能,需要想想其他出路。

处理器发展第二阶段:多核时代(2000 年代 - 2010 年代中期)

停滞不前的 CPU 频率意味着提高单个应用的速度变得非常困难,因为单个应用是以连续指令流的形式编写的。但是,正如摩尔定律所说的那样,每过 18 个月,我们芯片中的晶体管就会变为原来的两倍。因此,这次的解决方案不是加快单个处理器的速度,而是将芯片分成多个相同的处理内核,每个内核执行其指令流。

在这里插入图片描述
CPU 和 GPU 核数的演化

对于 CPU 来说,拥有多个内核是很自然的,因为它已经在并发执行多个独立的任务,比如你的互联网浏览器、文字处理器和声音播放器(更准确地说,操作系统在创建这种并发执行的抽象方面做得很好)。因此,一个应用可以在一个内核上运行,而另一个应用可以在另一个内核上运行。通过这种实践,多核芯片可以在给定的时间内执行更多的任务。然而,为了加快单个程序的速度,程序员需要将其并行化,这意味着将原始程序的指令流分解成多个指令 子流线程。简单地说,一组线程可以以任何顺序在多个内核上并发运行,没有任何一个线程会干扰另一个线程的执行。这种实践被称为 多线程编程,是单个程序从多核执行中获得性能提升的最普遍方式。

多核执行的一种常见形式是在 GPU 中。虽然 CPU 由少量快速和复杂的内核组成,但 GPU 依赖大量更简单的内核。通常来讲,GPU 侧重于图形应用,因为图形图像(例如视频中的图像)由数千个像素组成,可以通过一系列简单且预先确定的计算来独立处理。从概念上来说,每个像素可以被分配一个线程,并执行一个简单的「迷你程序」来计算其行为(如颜色和亮度级别)。高度的像素级并行使得开发数千个处理内核变得很自然。因此,在下一轮处理器进化中,CPUGPU 供应商没有加快单个任务的速度,而是利用摩尔定律来增加内核数量,因为他们仍然能够在单个芯片上获得和使用更多的晶体管。

在这里插入图片描述
不幸的是,到了 2010 年前后,事情变得更加复杂:登纳德缩放比例定律走到了尽头,因为晶体管的电压接近物理极限,无法继续缩小。虽然以前可以在保持相同功率预算的情况下增加晶体管数量,但晶体管数量翻倍意味着功耗也翻倍。登纳德缩放比例定律的消亡意味着当代芯片将遭遇「利用墙( utilization wall )」。此时,我们的芯片上有多少晶体管并不重要——只要有功耗限制(受芯片冷却能力的限制),我们就不能利用芯片中超过给定部分的晶体管。芯片的其余部分必须断电,这种现象也被称为「暗硅」。

处理器发展第三阶段:加速器时代(2010 年代至今)
暗硅本质上是「摩尔定律终结」的大预演——对处理器制造商来说,时代变得具有挑战性。一方面,计算需求飞速增长:智能手机变得无处不在,而且拥有强大的计算能力,云服务器需要处理越来越多的服务,「最糟糕的是」——人工智能重新登上历史舞台,并以惊人的速度吞噬计算资源。另一方面,在这个不幸的时代,暗硅成为晶体管芯片发展的障碍。因此,当我们比以往任何时候都更需要提高处理能力时,这件事却变得以往任何时候都更加困难。

在这里插入图片描述
训练 SOTA AI 模型所需的计算量

自从新一代芯片被暗硅束缚以来,计算机行业就开始把精力放到了硬件加速器上。他们的想法是:如果不能再增加晶体管,那就好好利用现有的晶体管吧。具体怎么做呢?答案是:专门化。

传统的 CPU 被设计成通用的。它们使用相同的硬件结构来运行我们所有应用(操作系统、文字处理器、计算器、互联网浏览器、电子邮件客户端、媒体播放器等)的代码。这些硬件结构需要支持大量的逻辑操作,并捕获许多可能的模式和程序诱发的行为。这相当于硬件可用性很好,但效率相当低。如果我们只专注于某些应用,我们就可以缩小问题领域,进而从芯片中去除大量的结构冗余。

在这里插入图片描述
通用 CPU vs. 面向特定应用的加速器

加速器是专门面向特定应用或领域的芯片,也就是说,它们不会运行所有应用(例如不运行操作系统),而是在硬件设计层面就考虑一个很窄的范围,因为:
1)它们的硬件结构仅满足特定任务的操作;
2)硬件和软件之间的接口更简单。具体来说,由于加速器在给定的域内运行,加速器程序的代码应该更紧凑,因为它编码的数据更少。

举个例子,假如你要开一家餐厅,但面积、用电预算是有限的。现在你要决定这个餐厅具体做哪些菜,
是比萨、素食、汉堡、寿司全做(a)
还是只做披萨(b)?

如果选 a,你的餐厅确实能满足很多口味不同的顾客,但你的厨师就要做很多菜,而且不见得每种都擅长。此外,你可能还需要买多个冰箱来存储不同的食材,并密切关注哪些食材用完了,哪些变质了,不同的食材还有可能混在一起,管理成本大大提高。

但如果选 b,你就可以雇佣一位顶级的披萨专家,准备少量的配料,再买一台定制的烤箱来做披萨。你的厨房会非常整洁、高效:一张桌子做面团,一张桌子放酱汁和奶酪,一张桌子放配料。但同时,这种做法也有风险:如果明天没有人想吃披萨怎么办?如果大家想吃的披萨用你定制的烤箱做不出来怎么办?你已经花了很多钱打造这个专门化的厨房,现在是进退两难:不改造厨房就可能面临关店,改造又要花一大笔钱,而且改完之后,客户的口味可能又变了。

回到处理器世界:类比上面的例子,CPU 就相当于选项 a,面向特定领域的加速器就是选项 b,店面大小限制就相当于硅预算。你将如何设计你的芯片?显然,现实并没有那么两极分化,而是有一个类似光谱的过渡区域。在这个光谱中,人们或多或少地用通用性来换取效率。早期的硬件加速器是为一些特定领域设计的,如 数字信号处理网络处理,或者作为主 CPU 的辅助协处理器。

CPU 到主要加速应用领域的第一个转变是 GPU。一个 CPU 有几个复杂的处理核心,每个核心都采用各种技巧,比如分支预测器和乱序执行引擎,以尽可能加快单线程作业的速度。GPU 的结构则有所不同。GPU 由许多简单的内核组成,这些内核具有简单的控制流并运行简单的程序。最初,GPU 用于图形应用,如计算机游戏,因为这些应用包含由数千或数百万像素组成的图像,每个像素都可以并行独立计算。一个 GPU 程序通常由一些核函数组成,称为「内核( kernel )」。每个内核都包含一系列简单的计算,并在不同的数据部分(如一个像素或包含几个像素的 patch )执行数千次。这些属性使得图形应用成为硬件加速的目标。它们行为简单,因此不需要分支预测器形式的复杂指令控制流;它们只需要少量操作,因此不需要复杂的算术单元(比如计算正弦函数或进行 64 位浮点除法的单元)。人们后来发现,这些属性不仅适用于图形应用,GPU 的适用性还可以扩展到其他领域,如线性代数或科学应用。如今,加速计算已经不仅仅局限于 GPU。从完全可编程但低效的 CPU 到高效但可编程性有限的 ASIC,加速计算的概念无处不在。

在这里插入图片描述
如今,随着越来越多表现出「良好」特性的应用程序成为加速的目标,加速器越来越受关注:视频编解码器数据库处理器加密货币矿机分子动力学,当然还有 人工智能

是什么让 AI 成为加速目标?

  1. 商业可行性
    设计芯片是一个费力、耗资的事情——你需要聘请行业专家、使用昂贵的工具进行芯片设计和验证、开发原型以及制造芯片。如果你想使用尖端的制程(例如现在的 5nm CMOS ),耗资将达到数千万美元,不论成功或失败。幸运的是,对于人工智能来说,花钱不是问题。AI 的潜在收益是巨大的,AI 平台有望在不久的将来产生数万亿美元的收入。如果你的想法足够好,你应该能够很容易地为这项工作找到资金。

    人工智能无处不在,大型数据中心智能手机传感器机器人自动驾驶汽车 中都有它的身影。每个系统都有不同的现实限制:人们肯定不愿意自动驾驶汽车因为算力太小而无法检测障碍物,也不能接受因为效率低而在训练超大规模预训练模型时每天多花数千美元,AI 的硬件不存在一个芯片适用所有场景的说法,计算需求巨大,每一点效率都意味着花费大量的时间、精力和成本。如果没有适当的加速硬件来满足你的 AI 需求,对 AI 进行实验和发现的能力将受到限制。

  2. 可行性
    AI 程序具有使其适用于硬件加速的所有属性:

    大规模并行 ,大部分计算都花在张量运算上,如卷积或自注意力算子。如果可能,还可以增加 batch size,以便硬件一次处理多个样本,提高硬件利用率并进一步推动并行性。硬件处理器驱动其快速运行能力的主要因素是并行计算。

    仅限于少数运算种类:主要是线性代数核的乘法和加法、一些非线性算子,例如模拟突触激活的 ReLU,以及基于 softmax 的分类的指数运算。狭窄的问题空间使我们能够简化计算硬件,专注于某些运算符。

    可以在编译时知道 控制流,就像具有已知迭代次数的 for 循环一样,通信和数据重用模式也相当受限,因此可以表征我们需要哪些网络拓扑在不同计算单元和软件定义的暂存存储器之间通信数据,以控制数据的存储和编排方式。

  3. 硬件友好
    不久之前,如果你想在计算架构领域进行创新,你可能会说:「我有一个新的架构改进的想法,它可以显著地提高一些东西,但是——我需要做的就是稍微改变编程界面并让程序员使用这个功能。」在那个时候这种想法会行不通。程序员的 API 是不可触及的,而且用破坏程序「干净」语义流的低级细节来加重程序员的负担是很难的。

    此外,将底层架构细节与面向程序员的代码混合在一起并不是一个好习惯。首先它是不可移植的,因为某些架构特征在芯片代际之间发生变化。其次它可能会被错误地编程,因为大多数程序员对底层硬件没有深入的了解。

    虽然你可以说 GPU 和多核 CPU 已经因为多线程(有时甚至是——内存墙)偏离了传统的编程模型,但由于单线程性能早已不是指数级增长,我们只能将希望诉诸于多线程编程,因为这是我们唯一的选择。多线程编程仍然很难掌握,需要大量的教育。幸运的是,当人们编写 AI 程序时,他们会使用神经层和其他定义明确的块来构建计算图。
    高级程序代码(例如 TensorFlowPyTorch 中的代码)已经在以一种可以标记并行块并构建数据流图的方式编写。因此理论上,你可以构建丰富的软件库和足够精细的编译器工具链来理解程序的语义并将其有效地降为硬件表示,而无需开发应用程序的程序员做任何参与,让数据科学家做他们的事情,他们可以不在乎任务在哪些硬件上运行。在实践中,编译器完全成熟还需要时间。


加速器架构

这里会介绍 AI加速器 的架构基础,包括指令集 ISAInstruction Set Architecture )、特定领域的指令集 ISA、超长指令字( VLIW )架构、脉动阵列、可重构处理器、数据流操作、内存处理。


指令集 ISA

ISA 描述了指令和操作如何由编译器编码,然后由处理器解码和执行,它是处理架构中面向程序员的部分。
常见的例子是 Intelx86ARMIBM PowerMIPSRISC-V

我们可以将 ISA 视为处理器支持所有操作的词汇表。通常,它由算数指令(如加、乘)、内存操作(加载、存储)和控制操作(例如,在 if 语句中使用的分支)组成。

在这里插入图片描述
目前看来,CPU ISA 已被分类为精简指令集计算( RISCReduced Instruction Set Architecture )和复杂指令集( CISCComplex Instruction Set Architecture ):

  • RISC ISA 由简单的指令组成,它们支持少量简单操作(加、乘等)。所有指令的位长相同(例如 32 位),因此,RISC 指令的硬件解码器被认为是最简单的;
  • CISC ISA 中,不同的指令可以有不同的长度,单个指令就可以描述操作和条件的复杂组合。

通常,CISC 程序比其等效的 RISC 程序代码占用空间更小,即存储程序指令所需的内存量。这是因为单个 CISC 指令可以跨越多个 RISC 指令,并且可变长度的 CISC 指令被编码为使得最少的位数代表最常见的指令。然而,为了体现复杂指令带来的优势,编译器需要做的足够复杂才能实现。

在这里插入图片描述
x86(橙色)相对于 ARM(紫色)的计算市场递减率预测。图源:AMD/ExtremeTech

早在 1980 年、1990 年和 2000 年代初期,就有「 RISCCISC 之战 」,基于 x86IntelAMD 主要专注于 CISC ,而 ARM 专注于 RISC。其实每种方法都有利弊,但最终,由于基于 ARM 的智能手机的蓬勃发展,RISC 在移动设备中占据了上风。现在,随着亚马逊基于 ARMAWS Graviton 处理器等的发布,RISC 在云中也开始占据主导地位。


特定领域的指令集 ISA

RISCCISC 是用于构建通用处理器的通用指令集架构。但在加速器的背景下,CISCRISC 相比,RISC 具有简单性和简洁性,更受欢迎(至少对于智能手机而言)。

在这里插入图片描述
45nm CMOS 处理器中执行 ADD 指令能耗。图源:M.Horowitz ISSCC 2014

很多 AI 加速器公司采用特定领域的 ISA。鉴于现有的精简指令集架构(以及潜在的处理核心),可以通过仅支持目标应用领域所需的指令子集来进一步减少它。特定领域的 ISA 进一步简化了处理内核和硬件 / 软件接口,以实现高效的加速器设计。在通常由线性代数和非线性激活组成的 AI 应用中,不需要许多「奇异」类型的运算。因此,ISA 可以设计为支持相对较窄的操作范围。

使用现有 RISC ISA 的简化版本的好处是,一些 RISC 公司(如 ARM )出售现有 IP,即支持完整 ISA 的现有处理内核,可用作定制处理的基线,用于加速器芯片的核心。这样,加速器供应商就可以依赖已经过验证并可能部署在其他系统中的基线设计;这是从头开始设计新架构更可靠的替代方案,对于工程资源有限、希望获得现有处理生态系统支持或希望缩短启动时间的初创公司尤其有吸引力。


超长指令字(VLIW)架构

VLIWVery Long Instruction Word )架构是由 Josh Fisher20 世纪 80 年代早期提出,当时集成电路制造技术和高级语言编译器技术出现了巨大的进步。其主要思想是:

  • 将多个相互无依赖的指令封装到一条超长的指令字中;
  • CPU 中有对应数量的 ALU 完成相应的指令操作;
  • 指令之间的依赖性和调度由编译器来完成。

就像特定领域的 ISA 可以被认为是 RISC 思想(更简单的指令,支持的操作较少)的扩展,同样地,我们可以将 CISC 进行多个操作组合成单个复杂指令扩展,这些架构被称为超长指令字 ( VLIW )。

VLIW 架构由 算术存储单元 的异构数据路径阵列组成。异构性源于每个单元的时序和支持功能的差异:例如,计算简单逻辑操作数的结果可能需要 1 - 2 个周期,而内存操作数可能需要数百个周期。

在这里插入图片描述
一个简单的VLIW数据路径框图

VLIW 架构依赖于一个编译器,该编译器将多个操作组合成一个单一且复杂的指令,该指令将数据分派到数据路径阵列中的单元。
例如,在 AI 加速器中,这种指令可以将 张量 指向矩阵乘法单元,并且 并行 地将数据部分发送到 向量单元转置单元 等等。

VLIW 架构的优势在于,通过指令编排处理器数据路径的成本可能显着降低;缺点是我们需要保证数据路径中各个单元之间的工作负载得到平衡,以避免资源未得到充分利用。因此,要实现高性能执行,编译器需要能够进行复杂的静态调度。更具体地说,编译器需要分析程序,将数据分配给单元,知道如何对不同的数据路径资源计时,并以在给定时间利用最多单元的方式将代码分解为单个指令。归根结底,编译器需要了解不同的数据路径结构及其时序,并解决计算复杂的问题,以提取高指令级并行 ( ILP ) 并实现高性能执行。


脉动阵列

脉动阵列H. T. KungC. E. Leiserson1978 年引入。2017 年,Google 研发的 TPU 采用脉动阵列作为计算核心结构,使其又一次火了起来。

脉动阵列 本身的核心概念就是让数据在运算单元的阵列中进行流动,减少访存次数,并且使得结构更加规整,布线更加统一,提高频率。整个阵列以「节拍」方式运行,每个 PEprocessing elements )在每个计算周期处理一部分数据,并将其传达给下一个互连的 PE

在这里插入图片描述
矩阵通过 4x4 脉动网。图源:NJIT

脉动结构 是执行矩阵乘法的有效方式( DNN 工作负载具有丰富的矩阵乘法)。谷歌的 TPU 是第一个使用 AI 的脉动阵列。因此,在这之后,其他公司也加入了脉动阵列行列,在自家加速硬件中集成了脉动执行单元,例如 NVIDIATensor Core


可重构处理器

我们所熟悉的处理器包括 CPUGPU 和一些加速器,它们的流程依赖于预先确定数量的算术单元和运行时行为,这些行为是在运行时根据执行的程序指令确定的。但是,还有其他类别的处理器称为「 可重构处理器 」。

在这里插入图片描述
基础 FPGA 架构。图源:Xilinx

可重构处理器由包含互连计算单元、内存单元和控制平面的复制阵列组成。为了运行程序,专用编译器会构建一个配置文件,这个文件包含设置数组中每个元素行为的控制位。最常见的可重构处理器类别是现场可编程门阵列 ( FPGA )。

FPGA 通过启用位级可配置性来支持广泛的计算范围:可以配置算术单元来实现对任意宽度数量进行操作的功能,并且可以融合片上存储块以构建不同大小的存储空间。

可重构处理器 FPGA 的一个优点是它们可以对用硬件描述语言 ( HDL ) 编写的芯片设计进行建模;这使公司能够在几个小时内测试他们的设计,而不是流片芯片,这个过程可能需要几个月甚至几年的时间。
FPGA 的缺点是细粒度的位级可配置性效率低下,典型的编译时间可能需要数小时,并且所需的额外线路数量占用大量空间,而且在能量上也是浪费。因此,FPGA 通常用于在流片之前对设计进行原型设计,因为由此产生的芯片将比其 FPGA 同类产品性能更高、效率更高。

在这里插入图片描述
处理器架构的性能、功耗和灵活性的比较。图源:ACM Computing Surveys

虽然 FPGA 在性能和功耗方面存在问题,但可重构性仍然是 AI 加速器一个非常理想的特性。一般来说,一个芯片的设计周期大约是 2 - 3 年,每天会有数不清的实验依赖芯片运行。但是,一个近期制造完成并花费数百万美元的芯片,往往是基于两年多前存在的 AI 模型的假设设计的,可能与当前的模型无关。

为了将高效、性能和可重构性结合起来,一些初创公司设计了可重构处理器,它们被称为 CGRACoarse-Grained Reconfigurable Arrays )。

CGRA 在 1996 年被提出,与 FPGA 相比,CGRA 不支持位级可配置性,并且通常具有更严格的结构和互连网络。
CGRA 具有高度的可重构性,但粒度比 FPGA 更粗。


数据流操作

数据流( Dataflow )已经有一段时间了,起源可以追溯到 1970 年代。不同于传统的冯诺依曼模型,它们是计算的另一种形式。

在传统的冯诺依曼模型中,程序被表示为一系列指令和临时变量。但在数据流模型中,程序被表示为数据流图( DFGdataflow graph ),其中输入数据的一部分是使用预定的操作数( predetermined operands )计算的,计算机中的数据根据所表示的图一直「流动」到输出,这一过程由类似图形的硬件计算而来。值得注意的是,硬件本质上是并行的。

在这里插入图片描述
深度学习软件到数据流图映射的例子

AI 加速器的背景下,执行数据流有以下两个优势:

  • 深度学习应用程序是结构性的,因此有一个由应用程序层的层级结构决定的计算图。所以,数据流图已经被放入代码中。相比之下,冯诺依曼应用程序首先被序列化为一系列指令,这些指令随后需要(重新)并行化以提供给处理器;
  • 数据流图是计算问题的架构不可知( architecturally-agnostic )表示。它抽象出所有源于架构本身的不必要的约束(例如,指令集支持的寄存器或操作数等),并且程序的并行性仅受计算问题本身的固有并行维度的限制,而不是受计算问题本身的并行维度限制。

内存处理

研究人员在提高加速器的计算吞吐量 ( FLOP ) 上花费了大量精力,即芯片(或系统)每秒提供的最大计算数量。然而,片上计算吞吐量并不是全部,还有内存宽带,因其片上计算速度超过片外内存传输数据的速度,造成性能瓶颈。
此外,从能量角度来看, AI 模型中存在着很高的内存访问成本,将数据移入和移出主存储器比进行实际计算的成本高几个数量级。

在这里插入图片描述
45nm CMOS 技术的典型内存和计算成本。图源:ISSCC 2014 / M.Horowitz

AI 加速器公司为降低内存成本常采用「近数据处理,near-data processing 」方法。这些公司设计了小型且高效的软件控制存储器(也称为便笺存储器,Scratchpad Memory ),它们将处理过的部分数据存储在核心芯片上,用于高速和低功耗并行处理。通过减少对片外存储器(大而远存储器)的访问次数,这种方法在减少访问数据时间和能源成本方面迈出了第一步。

近数据处理的极端是 PIMProcessing-in-Memory ),这种技术可以追溯到 1970 年代。在 PIM 系统中,主内存模块是用 数字逻辑元件(如 加法器乘法器 )制造的,计算处理位于内存内部。因此,不需要将存储的数据传送到中间线缓冲器。商业化的 PIM 解决方案仍然不是很常见,因为制造技术和方法仍然稳定,而且设计通常被认为是僵化的。

在这里插入图片描述
基于点积模拟处理的神经形态计算。图源:Nature Communications

许多 PIM 依赖于模拟计算( analog computations )。具体来说,在 AI 应用中,加权点积在模拟域中的计算方式类似于大脑处理信号的方式,这就是为什么这种做法通常也被称为「神经形态计算」的原因。由于计算是在模拟域中完成的,但输入和输出数据是数字的,神经形态解决方案需要特殊的模数和数模转换器,但这些在面积和功率上的成本都很高。


市场现状

这一部分主要介绍 AI加速器 相关公司。

在这里插入图片描述
AI 硬件初创公司 - 截至 2021 年 4 月的总融资。图源:AnandTech

此外,还有一些有趣的收购故事。2016 年,英特尔以 3.5 亿美元收购了 Nervana,2019 年底又收购了另一家名为 Habana 的人工智能初创公司,该公司取代了 Nervana 提供的解决方案。非常有意思的是,英特尔为收购 Habana 支付了 20 亿美元的巨款,比收购 Nervana 多好几倍。

AI 芯片领域,或者更准确地说,AI 加速器领域(到目前为止,它已经不仅仅是芯片)包含了无数的解决方案和方法,所以让我们回顾这些方法的主要原则。


AI加速器不同实现方法

英伟达:GPU+CUDA

英伟达成立于 1993 年,是最早研究加速计算的大公司之一。英伟达一直是 GPU 行业的先驱,后来为游戏机、工作站和笔记本电脑等提供各种 GPU 产品线,已然成为世界领导者。正如在之前的文章中所讨论的,GPU 使用数千个简单的内核。相比来说,CPU 使用较少的内核。

最初 GPU 主要用于图形,但在 2000 年代中后期左右,它们被广泛用于分子动力学、天气预报和物理模拟等科学应用。新的应用程序以及 CUDAOpenCL 等软件框架的引入,为将新领域移植到 GPU 铺平了道路,因此 GPU 逐渐成为通用 GPUGeneral-Purpose GPU ),简称 GPGPU

在这里插入图片描述
ImageNet 挑战赛:使用 GPU 的获胜误差和百分比。图源:英伟达

从历史上看,人们可能会说英伟达是幸运的,因为当 CUDA 流行和成熟时,现代 AI 就开始了。或者有人可能会争辩说,正是 GPUCUDA 的成熟和普及使研究人员能够方便高效地开发 AI 应用程序。无论哪种方式,历史都是由赢家书写的 —— 事实上,最有影响力的 AI 研究,如 AlexNetResNetTransformer 都是在 GPU 上实现和评估的,而当 AI 寒武纪爆发时,英伟达处于领先地位。

在这里插入图片描述
SIMT 执行模型。图源:英伟达

GPU 遵循单指令多线程 ( SIMT ) 的编程模型,其中相同的指令在不同的内核 / 线程上并发执行,每条指令都按照其分配的线程 ID 来执行数据部分。所有内核都以帧同步( lock-step )方式运行线程,这极大地简化了控制流。

另一方面,SIMT 在概念上仍然是一个多线程类 c 的编程模型,它被重新用于 AI,但它并不是专门为 AI 设计的。由于神经网络应用程序和硬件处理都可以被描述为计算图,因此拥有一个捕获图语义的编程框架会更自然、更有效。

虽然从 CPU 转向 GPU 架构是朝着正确方向迈出的一大步,但这还不够。GPU 仍然是传统架构,采用与 CPU 相同的计算模型。
CPU 受其架构限制,在科学应用等领域逐渐被 GPU 取代。
因此,通过联合设计专门针对 AI 的计算模型和硬件,才有希望在 AI 应用市场占有一席之地。

在这里插入图片描述
英伟达的GPU、CPU和DPU路线图。图源:英伟达

英伟达主要从两个角度发展 AI
1)引入 Tensor Core
2)通过收购公司。比如以数十亿美元收购 Mellanox ,以及即将对 ARM 的收购。

ARM-NVIDIA 首次合作了一款名为「 Grace 」的数据中心 CPU,以美国海军少将、计算机编程先驱 Grace Hopper 的名字命名。作为一款高度专用型处理器,Grace 主要面向大型数据密集型 HPCAI 应用。新一代自然语言处理模型的训练会有超过一万亿的参数。基于 Grace 的系统与 NVIDIA GPU 紧密结合,性能比目前最先进的 NVIDIA DGX 系统(在 x86 CPU 上运行)高出 10 倍。

Grace 获得 NVIDIA HPC 软件开发套件以及全套 CUDACUDA-X 库的支持,可以对 2000 多个 GPU 应用程序加速。


Cerebras

Cerebras 成立于 2016 年。随着 AI 模型变得越来越复杂,训练时需要使用更多的内存、通信和计算能力。因此,Cerebras 设计了一个晶圆级引擎 ( WSE ),它是一个比萨盒大小的芯片。

在这里插入图片描述
Andrew Feldman。图源:IEEE spectrum

典型的处理芯片是在一块称为晶圆的硅片上制造的。作为制造过程的一部分,晶圆被分解成称为芯片的小块,这就是我们所说的处理器芯片。一个典型的晶圆可容纳数百甚至数千个这样的芯片,每个芯片的尺寸通常在 10 平方毫米到 830 平方毫米左右。NVIDIAA100 GPU 被认为是最大的芯片,尺寸 826 平方毫米,可以封装 542 亿个晶体管,为大约 7000 个处理核心提供动力。

在这里插入图片描述
Cerebras WSE-2 与 NVIDIA A100 规格比较。图注:BusinessWire

Cerebras 不仅在单个大芯片上提供超级计算机功能,而且通过与学术机构和美国国家实验室的合作,他们还提供了软件堆栈和编译器工具链。其软件框架基于 LAIRLinear-Algebra Intermediate Representation )和 c++ 扩展库,初级程序员可以使用它来编写内核(类似于 NVIDIACUDA ),还可用于无缝降低来自 PyTorchTensorFlow 等框架的高级 Python 代码。

总而言之,Cerebras 的非传统方法吸引了许多业内人士。但是更大的芯片意味着内核和处理器因缺陷而导致失败的可能性更高,那么如何控制制造缺陷、如何冷却近百万个核心、如何同步它们、如何对它们进行编程等等都需要逐个解决,但有一点是肯定的,Cerebras 引起了很多人的注意。


GraphCore

GraphCore 是首批推出商业 AI 加速器的初创公司之一,这种加速器被称为 IPUIntelligent Processing Unit )。他们已经与微软、戴尔以及其他商业和学术机构展开多项合作。

目前,GraphCore 已经开发了第二代 IPU,其解决方案基于一个名为 Poplar 的内部软件堆栈。Poplar 可以将基于 PytorchTensorflowONNX 的模型转换为命令式、可以兼容 C++ 的代码,支持公司提倡的顶点编程( vertex programming )。与 NVIDIACUDA 一样,Poplar 还支持低级 C++ 编程以实现更好的潜在性能。

在这里插入图片描述
第二代IPU芯片图。图源GraphCore

IPUtiled 多核设计组成,tiled 架构由 MIT 于 2000 年代初研发,该设计描述了复制结构的 2D 网格,每个网格都结合了网络交换机、小型本地内存和处理核心。第一代 IPU1216tile,目前第二代 IPU1472tile。每个 IPU 内核最多可以执行 6 个线程,这些线程是包含其专有指令集架构 ( ISA ) 的代码流。

IPU 采用的是大规模并行同构众核架构。其最基本的硬件处理单元是 IPU-Core,它是一个 SMT 多线程处理器,可以同时跑 6 个线程,更接近多线程 CPU,而非 GPUSIMD/SIMT 架构。IPU-TilesIPU-Core 和本地的存储器( 256KB SRAM )组成,共有 1216 个。因此,一颗 IPU 芯片大约有 300MB 的片上存储器,且无外部 DRAM 接口。连接 IPU-Tiles 的互联机制称作 IPU-Exchange,可以实现无阻塞的 all-to-all 通信,共有大约 8TB 的带宽。最后,IPU-Links 实现多芯片互联,PCIe 实现和 Host CPU 的连接。

IPU 采用的是大规模并行同构众核架构。其最基本的硬件处理单元是 IPU-Core,它是一个 SMT 多线程处理器,可以同时跑 6 个线程,更接近多线程 CPU,而非 GPUSIMD/SIMT 架构。IPU-TilesIPU-Core 和本地的存储器( 256KB SRAM )组成,共有 1216 个。因此,一颗 IPU 芯片大约有 300MB 的片上存储器,且无外部 DRAM 接口。连接 IPU-Tiles 的互联机制称作 IPU-Exchange,可以实现无阻塞的 all-to-all 通信,共有大约 8TB 的带宽。最后,IPU-Links 实现多芯片互联,PCIe 实现和 Host CPU 的连接。


可重构数据流

Wave ComputingSambaNovaSimpleMachines 是三家推出加速器芯片的初创公司。其中 Wave Computing 成立于 2008 年,其使命是「通过可扩展的实时 AI 解决方案,从边缘到数据中心革新深度学习」,该公司由 Dado BanataoPete Foley 创立。一段时间以来,它一直处于隐身模式,从各种来源获得资金。

Wave Computing 的核心产品是数据流处理器单元( DPU ),采用非冯诺依曼架构的软件可动态重构处理器 CGRACoarse grain reconfigurable array / accelerator )技术,适用于大规模异步并行计算问题。2019 年前后,Wave Computing 针对边缘计算市场的算力需求,将 MIPS 技术与 Wave 旗下 WaveFlowWaveTensor 技术相结合,推出 TritonAI 64 IP 平台。但不幸的是,它在 2020 年申请了破产保护。

在这里插入图片描述
基于时间的DPU核映射。图源:Wave Computing

SambaNova 成立于 2017 年底,自那以来,该公司获得了由 Google VenturesIntel CapitalBlackrock 领导的三轮融资以及在美国能源部的 Laurence LivermoreLos Alamos 的部署。他们现在已经可以为一些客户提供新产品。

在这里插入图片描述
SambaNova的RDU框图

SambaNova 正在为数据中心构建芯片和软件栈,目标是用 AI 进行推理和训练。其架构的核心是可重构数据流单元( RDUreconfigurable dataflow unit )。RDU 芯片包含一组计算单元(称为 PCU )和暂存器存储单元(称为 PMU ),它们以 2D 网格结构组织起来,并与 NoC 交换机连接。RDU 通过一组称为 AGUCU 的单元结构访问芯片外存储器。

在这里插入图片描述

SambaNova 的软件堆栈(称为 Sambaflow )采用高级 Python 应用程序(例如 PyTorchTensorFlow )并将它们降低为可以在编译时对芯片 PCUPMUAGUCU 进行编程的表示。SambaNova 展示了 RDU 架构可以运行复杂的 NLP 模型、推荐模型和高分辨率视觉模型。

SimpleMachines 由威斯康星大学的一群学术研究人员于 2017 年创立。该研究小组一直在探索依赖于结合冯诺依曼(逐条指令)和非冯诺依曼(即数据流)执行的异构数据路径的可重构架构。

该公司提供的数据均参考了在顶级学术会议和期刊发表的原创研究论文。指导架构原则有点类似于 SambaNova 正在做的事情,即开发一个可重新配置的架构,以支持非常规编程模型,实现能够应对高度变化的 AI 应用程序空间的灵活执行。

在这里插入图片描述
SimpleMachines的Mozart芯片。图源:SimpleMachine

该公司的首个 AI 芯片是 Mozart,该芯片针对推理进行了优化,在设计中使用了 16 纳米工艺,HBM2 高带宽内存和 PCIe Gen3x16 尺寸。2020 年,SimpleMachine 发布了第一代加速器,该加速器基于 Mozart 芯片,其由一个可配置的 tile 数组组成,它们依赖于控制、计算、数据收集等的专业化。


脉动阵列 + VLIW: TPUv1、Groq、Habana

世界上首个专门为 AI 量身定制的处理器之一是张量处理单元( TPU ),也称张量处理器,是 Google 开发的专用集成电路( ASIC ),专门用于加速机器学习。自 2015 年起,谷歌就已经开始在内部使用 TPU,并于 2018 年将 TPU 提供给第三方使用,既将部分 TPU 作为其云基础架构的一部分,也将部分小型版本的 TPU 用于销售。

在这里插入图片描述
第一代 TPU 体系架构。图源:arXiv

第一代 TPU 是一个 8 位矩阵乘法的引擎,使用复杂指令集,并由主机通过 PCIe 3.0 总线驱动,它采用 28 nm 工艺制造。TPU 的指令向主机进行数据的收发,执行矩阵乘法和卷积运算,并应用激活函数。

第二代 TPU 于 2017 年 5 月发布,值得注意的是,第一代 TPU 只能进行整数运算,但第二代 TPU 还可以进行浮点运算。这使得第二代 TPU 对于机器学习模型的训练和推理都非常有用。谷歌表示,这些第二代 TPU 将可在 Google 计算引擎上使用,以用于 TensorFlow 应用程序中。

第三代 TPU 于 2018 年 5 月 8 日发布,谷歌宣布第三代 TPU 的性能是第二代的两倍,并将部署在芯片数量是上一代的四倍的 Pod 中。

第四代 TPU 于 2021 年 5 月 19 日发布。谷歌宣布第四代 TPU 的性能是第三代的 2.7 倍,并将部署在芯片数量是上一代的两倍的 Pod 中。与部署的第三代 TPU 相比,这使每个 Pod 的性能提高了 5.4 倍(每个 Pod 中最多装有 4,096 个芯片)。

Groq

谷歌在云产品中提供了 TPU,他们的目标是满足谷歌的 AI 需求并服务于自己的内部工作负载。因此,谷歌针对特定需求量身定制了 TPU

2016 年,一个由 TPU 架构师组成的团队离开谷歌,他们设计了一种与 TPU 具有相似基线特征的新处理器,并在一家名为 Groq 的新创业公司中将其商业化。

在这里插入图片描述
Groq TSP 执行框图。图源:Groq

Groq 的核心是张量流处理器( TSP )。TSP 架构与 TPU 有很多共同之处:两种架构都严重依赖脉动阵列来完成繁重的工作。与第一代 TPU 相比,TSP 增加了向量单元和转置置换单元(在第二代和第三代 TPU 上也可以找到)。

在这里插入图片描述
Groq VLIW指令集和描述。图源:Groq

Habana

Habana 成立于 2016 年初,是一家专注于数据中心训练和推理的 AI 加速器公司。Habana 已推出云端 AI 训练芯片 Gaudi 和云端 AI 推理芯片 Goya

Goya 处理器已实现商用,在极具竞争力的包络功率中具有超大吞吐量和超低的实时延迟,展现出卓越的推理性能。Gaudi 处理器旨在让系统实现高效灵活的横向、纵向扩展。目前 Habana 正在为特定超大规模客户提供样品。

在这里插入图片描述
Goya、 Gaudi 架构图。图注:Habana

GoyaGaudi 芯片具有相似架构,它们都依赖于 GEMM 引擎,该引擎是一个脉动矩阵乘法单元,与一组 tile 并排工作。每个 tile 包含一个本地软件控制的暂存器内存和一个张量处理核心( TPC ),具有不同精度的矢量计算单元,即它们可以计算 8 位、16 位或 32 位的矢量化操作。TPCGEMM 引擎通过 DMA 和共享内存空间进行通信,并通过 PCIe 与主机处理器进行通信。


基于 RISC 的 AI 加速器

Esperanto
Esperanto 成立于 2014 年,并在相当长一段时间内一直处于隐身模式,直到 2020 年底才宣布他们的第一款产品 ET-SoC-1 芯片,其基于台积电 7nm 工艺构建的 SoC 上集成了 1000 多个 RISC-V 内核、160M BYTESRAM 和超过 240 亿个晶体管,是该公司 AI 加速器系列的第一款产品。ET-SoC-1 是一款推理加速器,预计在今年投产。

在这里插入图片描述
EsperantoET-SoC-1 的架构图。图源:Esperanto/HotChips


TensTorrent

TensTorrent 成立于 2016 年,总部位于加拿大多伦多,目前估值 10 亿美元,这是一家计算公司,开发旨在帮助更快和适应未来算法的处理器。
TensTorrent 提供的芯片系列不仅针对数据中心,也针对小型平台,此外,他们还提供 DevCloud

在这里插入图片描述
TensTorrent:图的并行性与张量切片。图源:YouTube/TensTorrent

在这里插入图片描述
TensTorrent 核心。图源:YouTube/TensTorrent


Mythic

MythicAI 硬件领域最早的初创公司之一,它成立于 2012 年。迈克・亨利(Mike Henry)和戴夫・菲克(Dave Fick)为公司的核心创始人,他们分别担任 Mythic 公司的董事长和 CTO。该公司非常重视具备能源效率和成本更低的模拟技术,Mythic 提出了如何在模拟电路中使用较小的非数字电路电流来降低能量的消耗。

在这里插入图片描述
矩阵乘法运算中的权重和输入 / 输出数据差分。图源:Mythic

2020 年底,Mythic 推出了其第一代 AI 芯片 M1108 AMP。与很多 AI 芯片不同,M1108 基于更加成熟的模拟计算技术,而非数字计算。这提高了 M1108 的能效,也使网络边缘设备访问更加容易。

Mythic 还推出了一个模拟计算引擎 ( ACEAnalog Compute Engine ),它使用闪存而不是 DRAM 来存储权重。本质上,它们不是从内存中获取输入和权重数据,而是将输入数据传输到权重闪存,并将其转换为模拟域,在模拟域中执行 MAC (multiply-and-accumulate)计算,并将其转换回以获取输出数据,从而避免从内存中读取和传输权重成本。


LightMatter

LightMatter 是一家诞生于 MIT 的初创公司,该公司押注于一种用光子而非电子执行运算的计算机芯片。这种芯片从根本上与传统的计算机芯片相区分,有望成为能够满足 AI「饥饿」的有力竞争者。
LightMatter 首席执行官尼克・哈里斯(Nick Harris)曾说:「要么我们发明的新计算机继续下去,要么人工智能放慢速度。」

在这里插入图片描述
光子学与电子学计算属性。图源:HotChips/LightMatter

LightMatter 设计了一种基于 脉动阵列 的方法,通过使用编码为光信号波中不同相位的相移来操纵光子输入信号,以执行乘法和累加操作。由于光子学数据以光速流动,LightMatter 芯片以非常高的速度执行矩阵和矢量化运算,并且功率可降低几个数量级。

LightMatter 在 2021 年开始发售其首款基于光子的 AI 芯片 —— Envise,并为常规数据中心提供包含 16 个这种芯片的刀锋服务器。该公司目前已从 GV(前 Google Ventures )、Spark CapitalMatrix Partners 筹集到了 2200 万美元。

LightMatter 声称,他们推出的 Envise 芯片的运行速度比最先进的 Nvidia A100 AI 芯片快 1.510 倍,具体根据任务的不同有所差异。以运行 BERT 自然语言模型为例,Envise 的速度是英伟达芯片的 5 倍,并且仅消耗了其六分之一的功率。

在这里插入图片描述
Envise。图源:LightMatter


NeuReality

NeuReality 是一家于 2019 年在以色列成立的初创公司,由 Tanach 、 Tzvika Shmueli 和 Yossi Kasus 共同创立。

2021 年 2 月,NeuReality 推出了 NR1-P,这是一个以 AI 为中心的推理平台。2021 年 11 月,NeuReality 宣布与 IBM 建立合作伙伴关系,其中包括许可 IBM 的低精度 AI 内核来构建 NR1,这是一种非原型生产级服务器,与 FPGA 原型相比, AI 应用程序效率更高。

在这里插入图片描述


参考链接


  1. 详解AI加速器(一):2012年的AlexNet到底做对了什么? ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/2553.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用子项目管理方案?

在项目进行中经常发生这样的情况:当你开始为一个项目制定时间表时,你会发现任务的数量太多。你需要把它们全部分组到一些摘要任务中。但随后你看到一堆摘要任务,也想把它们再分组。 这样一来,该项目变得很麻烦,甚至项目…

Matlab进阶绘图第10期—带填充纹理的柱状图

带填充纹理的柱状图是通过在原始柱状图的基础上添加不同的纹理得到的,可以很好地解决由于颜色区分不足而导致的对象识别困难问题。 由于Matlab中未提供纹理填充选项,因此需要大家自行设法解决。 本文使用Kesh Ikuma制作的hatchfill2工具(Ma…

gin框架使用websocket实现进入容器内部执行命令

文章目录1. 先决条件2. gin框架实现3. 测试用html文件4. 需要完善1. 先决条件 docker开放远程API端口 2. gin框架实现 type GetCommandResultRequire struct {IpAddr string json:"ip_addr" //传入要控制容器的ip地址ContainerUuid string json:"cont…

对堆题的总体思路

浅说一下pwn堆并用一个简单的例子具体说明给刚入坑堆的小朋友说的一些思路说一下堆是什么堆你可以看成一个结构体数组,然后数组里每个元素都会开辟一块内存来存储数据那么这块用来存储数据的内存就是堆。结构体数组在BSS段上,其内容就是堆的地址&#xf…

动态SQL必知必会

动态SQL必知必会1、什么是动态SQL2、为什么使用动态SQL3、动态SQL的标签4、if 标签-单标签判断5、choose标签-多条件分支判断6、set 标签-修改语句7、foreach标签7.1 批量查询7.2 批量删除7.3 批量添加8、模糊分页查询1、什么是动态SQL 动态 SQL 是 MyBatis 的强大特性之一。如…

阿里巴巴2017实习生笔试题(二)——总结

具体题目来自阿里巴巴2017实习生笔试题,本文仅为整理与汇总。 本题应该往C的多态性进行理解,多态中的动态链接在执行时进行,静态链接在编译时进行。其中A、C、D 都是动态链接的优点,B 时静态链接的优点。 减少页面交换可从如下角…

nginx-动静分离-防盗链-location-4

动静分离 为了加快网站的解析速度,可以把动态页面和静态页面有不同的服务器来解析,加快机械速度。降低原来单个服务器的压力。在动静分离的tomcat时候比较明显,因为tomcat解析静态很慢,其实这些原理的话很好理解,简单…

Baumer工业相机堡盟万兆网相机如何使用千兆网网卡环境保持帧率不变(C++)

项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具…

IP、MAC和端口

IP,MAC和端口的概念MAC地址也叫物理地址、硬件地址,由网络设备厂家直接烧录在网卡上的,理论上Mac地址是唯一-的。 但因为Mac地址可以通过程序修改,所以也有可能会重复。IP地址是互联网上的每台设备都规定了-一个唯一的地址, 这个地…

网络安全之认识勒索病毒

一、什么是勒索病毒 勒索病毒,是一种新型电脑病毒,伴随数字货币兴起,主要以邮件、程序木马、网页挂马、服务器入侵、捆绑软件等多种形式进行传播,一旦感染将给用户带来无法估量的损失。如果遭受勒索病毒攻击,将会使绝…

如何用C语言实现渣男通讯录

注意:纯属玩笑,博大家一乐,切勿当真📖首先我们要知道一个渣男通讯录有哪些信息要包含哪些功能1.你的通讯录要装多少个女朋友你得规定吧;2.每个女朋友的姓名,年龄,电话,爱好这些要有吧…

第29次CCFCSP认证经验总结

鄙人有幸参加了由中国计算机学会举办的第29次计算机软件能力认证考试,在此进行一些考试细节和经验的总结。 如果没有仔细了解过的小白去网上搜索CCFCSP,可能出现的是CSP-J/S,但是详细了解会发现,首先CSP-J/S分初试和复试&#xff…

.NET/C#/GC与内存管理(含深度解析)

详情请看参考文章:.NET面试题解析(06)-GC与内存管理 - 不灬赖 - 博客园 (cnblogs.com)一、对象创建及生命周期一个对象的生命周期简单概括就是:创建>使用>释放,在.NET中一个对象的生命周期:new创建对象并分配内存对象初始化…

【Linux】浅谈shell命令以及运行原理

前言:上篇博文把linux下的基本指令讲解完了。本期我们聊聊Linux下【shell】命令及其运行原理。 目录 Shell的基本概念与作用 原理图展示 shell命令执行原理 Shell的基本概念与作用 Linux严格意义上说的是一个操作系统,我们称之为“核心(ker…

文心一言 VS ChatGPT,国产大模型和国外的差距有多大?

3月16号,百度正式发布了『文心一言』,这是国内公司第一次发布类ChatGPT的产品。大家一定非常好奇文心一言和chatgpt之间的差距有多大?国产大模型还有多少路可走?本文就全面测评这两款产品! 目录 体验网址 1、旅游攻…

【vue2】vue2中的性能优化(持续更新中)

⭐ v-for 遍历避免同时使用 v-if ⭐ v-for 中的key绑定唯一的值 ⭐ v-show与v-if对性能的影响 ⭐ 妙用计算属性 ⭐ 使用防抖与节流控制发送频率 ⭐ 路由守卫处理请求避免重复发送请求 ⭐ 使用第三方UI库的引入方式 【前言】 该系列是博主在使用vue2开发项目中常用上的一…

这些IT行业趋势,将改变2023

上一周,你被"AI"刷屏了吗? 打开任何一家科技媒体,人工智能都是不变的热门话题。周初大家还在用ChatGPT写论文、查资料、写代码,到周末的时候大家已经开始用GPT-4图像识别来做饭、Microsoft 365 Copilot 来写PPT了。 GP…

【Linux】Linux基本指令(下)

前言: 紧接上期【Linux】基本指令(上)的学习,今天我们继续学习基本指令操作,深入探讨指令的基本知识。 目录 (一)常用指令 👉more指令 👉less指令(重要&…

【动手学深度学习】(task1)注意力机制剖析

note 将注意力汇聚的输出计算可以作为值的加权平均,选择不同的注意力评分函数会带来不同的注意力汇聚操作。当查询和键是不同长度的矢量时,可以使用可加性注意力评分函数。当它们的长度相同时,使用缩放的“点-积”注意力评分函数…

【问题系列】vue当编辑框被触发就出现保存按钮

目录 问题描述: 解决方案: 1.方案一 2.方案二 3.方案三 问题描述: 一个表单用vue的事件实现当点击编辑按钮(或图标)出现保存按钮,当要编辑的时候只出现编辑按钮,此时保存按钮隐藏 解决方案: 1.方案一…