本文来自至顶网(ai.zhiding.cn),来源:Spectrum。
斯坦福大学研究团队开发了名为Onyx的新型硬件加速器,专为稀疏计算设计。AI模型中大量参数值为零或接近零,传统CPU和GPU无法充分利用这一特性。Onyx基于粗粒度可重构阵列架构,支持结构化与
在AI模型领域,规模至关重要。
尽管部分AI专家警告称,持续扩大大语言模型的规模正在遭遇性能收益递减的瓶颈,各大公司仍在不断推出体量更大的AI工具。Meta最新发布的Llama模型拥有高达2万亿个参数。
随着模型规模的扩大,其能力也在增强,但随之而来的是更高的能耗需求和更长的运行时间,进而加剧了碳排放问题。为了缓解这些问题,业界开始转向规模较小、能力相对有限的模型,并尽可能采用低精度数值来表示模型参数。
然而,还有另一条路径,有望在保留超大模型高性能的同时,缩短运行时间、降低能耗。这一方法的核心,就是充分利用大型AI模型内部大量存在的零值。
对于许多模型而言,大多数参数——包括权重和激活值——实际上都是零,或者非常接近于零,完全可以在不损失精度的前提下将其视为零处理。这种特性被称为稀疏性。稀疏性为节省计算资源提供了巨大机会:与其浪费时间和能量对零进行加法或乘法运算,不如直接跳过这些计算;与其在内存中存储大量零值,不如只保存非零参数。
遗憾的是,当前主流硬件(如多核CPU和GPU)并不能天然充分利用稀疏性。要真正发挥稀疏性的优势,研究人员和工程师需要重新思考并重构整个设计架构,涵盖硬件、底层固件和应用软件各个层面。
在斯坦福大学的研究团队中,我们开发出了(据我们所知)首款能够高效处理各类稀疏和传统工作负载的硬件芯片。在不同工作负载下,能耗节省幅度差异显著,但平均而言,我们的芯片能耗仅为CPU的七十分之一,计算速度平均提升至CPU的八倍。为实现这一目标,我们从底层开始,对硬件、固件和软件进行了全面的针对稀疏性的工程设计。我们希望这只是硬件与模型协同发展的开端,最终实现更高能效的AI。
数组与稀疏表示
神经网络及其输入数据以数字数组的形式表示,这些数组可以是一维(向量)、二维(矩阵)或更高维度(张量)。稀疏向量、矩阵或张量中大多数元素为零。稀疏程度因情况而异,但当零值占比超过50%时,就可以从专门针对稀疏性的计算方法中获益。与之相对的是"密集"对象——即零值数量相对于元素总数较少的情况。
稀疏性可以天然存在,也可以通过人工方式引入。例如,社交网络图天然就是稀疏的。设想一个图,其中每个节点代表一个人,每条边代表一段友谊关系。由于大多数人彼此并不相识,表示所有可能连接关系的矩阵中绝大多数元素都是零。其他AI应用场景,如图学习和推荐模型,同样存在天然的稀疏性。
通常情况下,一个4×4的矩阵无论包含多少个零值,在内存中都会占用16个存储空间。若矩阵是稀疏的,即大量元素为零,则可以更高效地用"纤维树"结构表示:首先是包含非零元素所在行坐标的"纤维",连接至包含非零元素列坐标的纤维,最终链接到对应的非零值本身。在计算机内存中存储纤维树时,每条纤维的端点(即"段")会与坐标和数值一同保存。
除天然存在的稀疏性外,还可以通过多种方式在AI模型中主动引入稀疏性。两年前,Cerebras的研究团队证明,可以将大语言模型中多达70%至80%的参数设置为零,而不损失任何精度。Cerebras在Meta开源的Llama 7B模型上验证了这一结论,相关思路同样适用于ChatGPT、Claude等其他大语言模型。
稀疏计算的优势
稀疏计算的高效性源于两个基本特性:压缩零值的能力,以及零的特殊数学性质。稀疏计算算法和专用硬件都充分利用了这两个核心思路。
首先,稀疏数据可以被压缩,从而以"稀疏数据类型"的形式更节省内存地进行存储。压缩还能在处理大量数据时降低数据传输的能耗。以一个包含三个非零元素的4×4矩阵为例:传统方式会将其完整存储,占用16个内存空间;而压缩为稀疏数据类型后,只需保留非零元素,仅占用3个存储空间,相较于原来的16个大幅节省。随着稀疏程度和矩阵规模的增大,这种节省效果将愈加显著。
除实际数据值外,压缩数据还需要存储元数据,即非零元素的行列位置信息。这通常以"纤维树"的方式表达:列出包含非零元素的行标签,并与对应的列标签相连,进而链接到存储在这些位置的数值。
在内存层面,情况更加复杂:每个非零值的行列标签,以及标识标签数量的"段"信息,都需要一并存储,以便清晰区分元数据和实际数据。
在密集、未压缩的矩阵数据类型中,可以逐一或并行访问数值,且其位置可通过简单公式直接计算。但在稀疏压缩数据中,访问数值需要先查找行索引坐标,再"间接"查找列索引坐标,最终才能定位到目标值。由于稀疏数据的位置具有随机性,这些间接查找操作可能极为随机,导致计算过程依赖于数据本身,并需要动态分配内存访问。
其次,零的两个数学特性使软件和硬件可以大量跳过计算:任何数乘以零等于零,因此无需实际执行乘法;任何数加零等于其本身,因此加法也可以直接跳过。
在矩阵-向量乘法这一AI最常见的运算中,除涉及两个非零元素的计算之外,其余计算均可跳过。以前述4×4矩阵与一个四元素向量的乘法为例:在密集计算中,需要16次乘法和16次加法;而在稀疏计算中,只需处理向量中的非零元素,通过间接查找定位矩阵中对应的非零元素,仅对这部分进行乘加运算——在示例中,只需执行两次乘法,而非16次。
现有硬件的局限
遗憾的是,现代硬件并不擅长加速稀疏计算。以矩阵-向量乘法为例,在单核CPU中,向量中的每个元素需逐一相乘后写入内存,效率低下。因此,实际使用中往往借助支持向量运算的CPU或GPU,将所有元素并行处理,大幅提升速度。但当矩阵和向量都极为稀疏时,向量化CPU和GPU的大部分算力都浪费在了与零的乘法运算上,产生大量无效计算。
新一代GPU能够对一种特定类型的稀疏性——结构化稀疏性——进行一定程度的硬件加速。结构化稀疏性假设每四个相邻参数中有两个为零。然而,部分模型更适合非结构化稀疏性——即允许任意参数(权重或激活值)为零并被压缩,无论其位置如何。GPU可以通过软件方式(如cuSparse库)支持非结构化稀疏计算,但这种支持往往十分有限,GPU硬件利用率偏低,大量算力消耗在额外开销上。
在通过软件进行稀疏计算时,现代CPU有时比GPU更具优势,因为CPU具备更好的灵活性。但CPU在稀疏计算中常受限于间接查找操作带来的性能瓶颈。CPU通常会根据预期需求对数据进行"预取",但对于随机稀疏数据,这一机制往往失效,导致CPU不得不浪费时钟周期等待正确数据加载。
苹果公司率先通过在A14和M1芯片的预取器中支持"指针数组"访问模式,加快了间接查找速度。尽管预取技术的创新使苹果CPU在稀疏计算方面更具竞争力,但CPU架构仍存在专用稀疏计算架构所不具备的根本性开销,因为CPU需要兼顾通用计算需求。
其他公司也在开发加速稀疏机器学习的硬件,包括Cerebras的晶圆级引擎(Wafer Scale Engine)和Meta的训练与推理加速器(MTIA)。Cerebras的晶圆级引擎及其配套稀疏编程框架,在大语言模型上实现了高达70%的稀疏度,成果卓越。但其硬件和软件方案仅支持权重稀疏性,不支持对许多应用至关重要的激活值稀疏性。MTIA第二版宣称在稀疏计算性能上较第一版提升七倍,但目前公开披露的稀疏性支持信息仅限于矩阵乘法,尚未覆盖向量或张量运算。
尽管矩阵乘法占据了大多数现代机器学习模型的主要计算时间,但为其他运算提供稀疏性支持同样至关重要。为避免在稀疏与密集数据类型之间频繁切换,所有操作都应原生支持稀疏处理。
Onyx:从底层支持稀疏计算的硬件加速器
针对上述种种折中方案的不足,斯坦福大学团队研发了一款硬件加速器——Onyx,能够从底层充分利用稀疏性,无论是结构化还是非结构化稀疏性均可支持。Onyx是首款可编程加速器,同时支持稀疏和密集计算,能够对两种模式下的关键操作进行加速。
CPU、粗粒度可重构阵列(CGRA)和现场可编程门阵列(FPGA)代表了效率与灵活性之间的不同权衡。CPU的每个逻辑单元针对特定功能高效设计;FPGA的每个比特均可配置,极具灵活性但效率较低;CGRA则旨在兼顾FPGA的灵活性与CPU的效率。
CGRA由针对特定应用领域优化的可配置内存和计算单元组成,程序员可以在高层次上对其内部进行重新配置,使其比FPGA更高效,同时比CPU更灵活。
Onyx基于CGRA架构构建,由灵活可编程的处理单元(PE)模块和内存(MEM)模块组成。内存模块负责存储压缩矩阵和其他数据格式,处理单元模块则直接对压缩矩阵进行运算,消除所有不必要的无效计算。
Onyx的编译器负责将软件指令转换为CGRA配置。首先,输入表达式(如稀疏向量乘法)被转化为抽象内存节点和计算节点构成的图;编译器将这些抽象节点映射到CGRA的内存模块和处理单元上,并规划数据传输路径;最终生成配置CGRA所需的指令集。
由于Onyx具备可编程性,工程师可以将向量-向量元素乘法、矩阵-向量乘法、矩阵-矩阵乘法等多种AI核心运算映射到加速器上。
性能评估
我们采用"能量延迟积"(EDP,即能耗与计算时间的乘积)来评估硬件的效率提升,该指标综合反映了速度与能耗之间的权衡关系。
Onyx的能量延迟积最高可达使用专用稀疏库的CPU(12核Intel至强处理器)的565倍。此外,Onyx还可配置为加速常规密集计算应用,类似GPU或TPU的工作方式:当计算为稀疏类型时,Onyx切换至稀疏计算模式;当计算为密集类型时,则切换至并行加速模式。这一架构为在同一芯片上同时加速稀疏与密集计算迈出了重要一步。
同样值得关注的是,Onyx开启了算法层面的新思路。稀疏加速硬件不仅能提升AI的性能效率和能源效率,还将激励研究人员和工程师探索具有突破性潜力的新型算法。
未来展望
我们的团队已在Onyx基础上着手开发下一代芯片。除矩阵乘法外,机器学习模型还涉及非线性层、归一化、Softmax函数等多种运算。我们正在为下一代加速器及其编译器添加对完整计算类型的支持。由于稀疏机器学习模型可能同时包含稀疏层和密集层,我们也在研究如何更高效地将密集与稀疏加速架构集成于同一芯片,以实现不同数据类型之间的快速转换。此外,我们还在探索通过更有效地拆分稀疏数据来突破内存限制,从而在多个稀疏加速芯片上协同运行计算任务。
与此同时,我们正在研发能够预测稀疏加速器性能的系统,以辅助更优硬件的设计工作。从长远来看,我们希望观察高度稀疏性是否会在更多模型类型中得到普及,以及稀疏加速器是否会在更大规模上得到应用。
为非结构化稀疏性构建硬件、充分利用零值的潜力,仅仅是个开始。有了这样的硬件,AI研究人员和工程师将有机会探索以全新、富有创意的方式利用稀疏性的模型与算法。我们相信,这是应对AI不断增长的运行时间、成本和环境影响的关键研究方向。
Q&A
Q1:什么是稀疏计算?它对AI有什么意义?
A:稀疏计算是一种利用AI模型中大量参数为零这一特性来跳过无效运算、压缩存储的计算方式。由于模型中70%以上的参数可能为零或接近零,稀疏计算可以直接跳过与零相关的乘法和加法,从而显著降低能耗、加快运算速度,在不牺牲模型精度的前提下提升整体效率。
Q2:现有的GPU和CPU为什么不能很好地支持稀疏计算?
A:GPU主要支持一种叫做"结构化稀疏性"的特定模式,对更灵活的非结构化稀疏性支持有限,导致大量算力被浪费在无效的零值运算上。CPU虽然更灵活,但在稀疏计算中常受限于随机内存访问导致的预取失败问题,同样存在效率瓶颈。两者都缺乏从底层针对稀疏计算专门设计的架构支持。
Q3:Onyx芯片相比普通CPU能提升多少性能?
A:Onyx在能量延迟积(速度与能耗的综合指标)上,最高可达12核Intel至强CPU的565倍。平均而言,Onyx的能耗仅为CPU的七十分之一,计算速度则平均提升至CPU的八倍。Onyx同时支持稀疏和密集计算,能够根据任务类型自动切换计算模式,是目前已知首款兼顾两种计算模式的可编程加速器。
