从 CPU 到主要加速应用领域的第一个转变是 GPU 。 一个 CPU 有几个复杂的处理核心 , 每个核心都采用各种技巧 , 比如分支预测器和乱序执行引擎 , 以尽可能加快单线程作业的速度 。 GPU 的结构则有所不同 。 GPU 由许多简单的内核组成 , 这些内核具有简单的控制流并运行简单的程序 。 最初 , GPU 用于图形应用 , 如计算机游戏 , 因为这些应用包含由数千或数百万像素组成的图像 , 每个像素都可以并行独立计算 。 一个 GPU 程序通常由一些核函数组成 , 称为「内核(kernel)」 。 每个内核都包含一系列简单的计算 , 并在不同的数据部分(如一个像素或包含几个像素的 patch)执行数千次 。 这些属性使得图形应用成为硬件加速的目标 。 它们行为简单 , 因此不需要分支预测器形式的复杂指令控制流;它们只需要少量操作 , 因此不需要复杂的算术单元(比如计算正弦函数或进行 64 位浮点除法的单元) 。 人们后来发现 , 这些属性不仅适用于图形应用 , GPU 的适用性还可以扩展到其他领域 , 如线性代数或科学应用 。 如今 , 加速计算已经不仅仅局限于 GPU 。 从完全可编程但低效的 CPU 到高效但可编程性有限的 ASIC , 加速计算的概念无处不在 。
文章图片
深度神经网络的处理替代方案 。 来源:微软 。
如今 , 随着越来越多表现出「良好」特性的应用程序成为加速的目标 , 加速器越来越受关注:视频编解码器、数据库处理器、加密货币矿机、分子动力学 , 当然还有人工智能 。
是什么让 AI 成为加速目标?
商业可行性
设计芯片是一个费力、耗资的事情——你需要聘请行业专家、使用昂贵的工具进行芯片设计和验证、开发原型以及制造芯片 。 如果你想使用尖端的制程(例如现在的 5nm CMOS) , 耗资将达到数千万美元 , 不论成功或失败 。 幸运的是 , 对于人工智能来说 , 花钱不是问题 。 AI 的潜在收益是巨大的 , AI 平台有望在不久的将来产生数万亿美元的收入 。 如果你的想法足够好 , 你应该能够很容易地为这项工作找到资金 。
AI 是一个「可加速」的应用领域
AI 程序具有使其适用于硬件加速的所有属性 。 首先最重要的是 , 它们是大规模并行的:大部分计算都花在张量运算上 , 如卷积或自注意力算子 。 如果可能 , 还可以增加 batch size , 以便硬件一次处理多个样本 , 提高硬件利用率并进一步推动并行性 。 硬件处理器驱动其快速运行能力的主要因素是并行计算 。 其次 , AI 计算仅限于少数运算种类:主要是线性代数核的乘法和加法、一些非线性算子 , 例如模拟突触激活的 ReLU , 以及基于 softmax 的分类的指数运算 。 狭窄的问题空间使我们能够简化计算硬件 , 专注于某些运算符 。
【详解AI加速器(二):为什么说现在是AI加速器的黄金时代?】最后 , 由于 AI 程序可以表示为计算图 , 因此我们可以在编译时知道控制流 , 就像具有已知迭代次数的 for 循环一样 , 通信和数据重用模式也相当受限 , 因此可以表征我们需要哪些网络拓扑在不同计算单元和软件定义的暂存存储器之间通信数据 , 以控制数据的存储和编排方式 。
AI 算法是以硬件友好的方式构建的
不久之前 , 如果你想在计算架构领域进行创新 , 你可能会说:「我有一个新的架构改进的想法 , 它可以显著地提高一些东西 , 但是——我需要做的就是稍微改变编程界面并让程序员使用这个功能 。 」在那个时候这种想法会行不通 。 程序员的 API 是不可触及的 , 而且用破坏程序「干净」语义流的低级细节来加重程序员的负担是很难的 。
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
