随着人工智能走出实验室并渗透到我们生活的各个领域,显而易见的是,我们需要找到新的方法,让这项技术以更少的算力完成更多任务。为了让大语言模型对企业具有可行性,它们不能需要数百个 GPU(图形处理器) 来运行。一种选择是低精度计算。低精度算术有时被称为近似计算,它非常适合那些计算不需要高精度就能产生足够准确结果的 AI 应用。其优势包括降低计算和能源成本,以及减少延迟。
低精度计算经过过去十年左右的发展,并在近年来逐渐成熟,正迅速成为行业标准。随着其实用性和重要性的增长,硬件需要协同设计以与这种方法配合工作。因此,低精度计算成为 IBM AIU 系列架构中的关键元素并非巧合,这些设备从一开始就设计为尽可能高效地训练和部署 AI 模型。典型的 CPU 以高精度工作,通常采用 FP32 或 FP64 浮点算术。FP32 或 FP64 意味着数字以 32 位或 64 位表示。这种高精度非常适合数学、医学或工程领域需要严格容差的计算。
然而对于 AI 来说,这种精度水平往往过高。不仅如此,由于 AI 涉及大量高度冗余的计算,以 FP32 或 FP64 精度运行大语言模型的计算需求是巨大的。这些数字可以被量化,或缩减到有限的位宽,而不会牺牲准确性。
就像在餐厅计算小费时,粗略估算就足够了,或者我们只需快速一瞥就能分辨玫瑰和雏菊一样,16 位、8 位甚至 4 位精度可以为当今的 AI 模型提供适当的计算精度水平。事实上,16 位和 8 位计算已经是行业公认的标准,并已部署在生产环境中。与此同时,研究人员必须开发算法来控制降低精度带来的影响,以免误差累积并破坏模型准确性。
随着行业趋势向低精度计算发展,IBM Research 的科学家们一直在推进低精度训练技术,目前正致力于将其融入我们训练和推理大语言模型的方式中,以及我们为其设计硬件的方式中。
IBM Research 的杰出工程师、AI 优化专家 Mudhakar Srivatsa 表示,全精度(或双精度)计算通常指以 64 位表示执行的操作。随着位数的增加,精度(缩小两个可表示数字之间的差距)和范围(增大可表示数字的最小值和最大值)都会提高。计算机可以处理涉及大型高精度数字的运算。让现代计算机以 64 位精度执行一次算术运算,结果几乎是瞬时的。
但当涉及 AI 训练和推理时,这些操作涉及数万亿次运算,全精度计算的计算需求和延迟会迅速累积。例如,给定长度为 1,000 的输入,在 LLaMa3 8b 模型上生成 1,000 个输出 token 将需要超过 20 万亿次操作。这个数字随着并发请求数量和上下文长度(输入和输出的大小)的增长而增长,许多新兴工作负载(如智能体系统)推动了对 128,000 token 甚至 100 万 token 上下文长度的需求。“要将两个 n 位数相乘,你需要执行 n² 的工作量,”Srivatsa 说。
全精度计算的模型权重也比低精度权重大,这意味着每个权重需要更多的内存空间来存储。此外,这些权重(可能达到数十到数百 GB)在每次 token 生成时都必须从内存移动到计算核心。更多位精度需要平方级的更多能量和硅面积——从 32 位到 64 位需要四倍大的计算构建块,而每降低一步则将能量和硅需求减少四倍。AI 研究人员正在寻求低精度计算来节省这些操作。
Srivatsa 表示,通常被认定为低精度的级别是 8 位、4 位和 2 位。IBM Research 杰出工程师 Raghu Ganti 表示,低精度量化主要有两个方向:一是将 AI 模型权重降低到 4 位,同时保持激活函数为 16 位;另一种称为 FP8,将模型权重和激活函数都降低到 8 位。
大语言模型计算的冗余性带来了大量的噪声容忍度,使得低精度适合它们。IBM Research 科学家 Viji Srinivasan 是低精度计算相关硬件的专家,她说,无论你以全精度还是降低精度进行计算,任何给定操作的最终输出以及基于该输出所采取的行动通常都是相同的。“你可以从 FP64 或 FP32 降到 FP16,如果我使用那种精度、那种表示数字的位宽进行计算,我会同时损失精度和范围,”她说。“但如果我由此产生的行动与使用更高精度计算时相同,那就没问题。”
更准确地说,如果操作 a*b 以 64、32 或 16 位计算,数值可能会有细微差异,并可能被视为误差。更高的位表示会更精确,并且对于 a 和 b 的任意值都具有更可表示的范围。从这个意义上说,低精度计算不会导致完全相同的结果。
Srivatsa 提供了以下示例,说明改变精度如何改变结果:
+ ( 2 − 16 ) – 1.0 = 0 1.0 + (2^-16) – 1.0 = 0 1.0 + ( 2 − 16 ) –1.0 = 0 在 16 位精度下,但在 32 位或 64 位下 = 2 − 16 = 2^-16 = 2 − 16
然而,1.0 – 1.0 + ( 2 − 16 ) = 2 − 16 1.0 – 1.0 + (2^-16) = 2^-16 1.0–1.0 + ( 2 − 16 ) = 2 − 16 在 16 位、32 位和 64 位精度下均成立
它本应如此运作:( a + b ) + c = a + ( b + c ) (a + b) + c = a + (b + c) ( a + b ) + c = a + ( b + c ) ,这是一种被称为结合律的数学性质。在浮点数的任何有限精度表示中,这一性质都无法得到保证。只是在较低精度下,它更明显、更容易被察觉。
幸运的是,在 AI 中,你并不依赖单个神经元来做出正确判断,Srivatsa 解释道。“你有成千上万个神经元,如果一个犯了错,许多其他神经元会捕捉到信号。”系统中存在冗余,以至于如果一些神经元不正确或部分不正确,低精度计算仍然能给出整体正确的答案。“这就像多数投票:只要其中 70%、80% 表现良好,我就没问题,”Srivatsa 说。
此外,Srinivasan 解释说,我们追求的本来也不是某个操作的精确乘积——我们追求的是基于该输出的反应。“如果我以高精度或低精度执行这个操作,反应都保持不变,那么我以低精度来做会更好,”她说。
当 Srinivasan 说“更好”时,她指的是处理器需求。减少给定任务所需的计算量后,你可以在相同面积内塞入更多乘法器——或模型权重。反过来,这种更小的占用面积意味着低精度硬件每次操作所需能耗更低,并且每个 CPU 周期可以执行更多操作。
结果不言自明。Ganti 说,以 FP8 训练可以将过程加速多达 50%,而不会牺牲质量。“我认为,到今年年底,我们应该会开始看到整个行业向 FP8 训练迁移的证据,”他预测道。“而全面采用可能会在 2025 年上半年末到来。”
对于浮点数,将精度降低到 16 位或 8 位会引入误差。无论如何,缩小位宽都会使表示更精细的精度和更大的范围变得不可能。但在 AI 应用中,模型训练和推理期间都使用了机制来补偿这种量化损失。
其中一种方案是混合精度运算,即浮点乘法以较低精度执行(占训练或推理过程中超过90%的运算),而累加(矩阵乘法所需)则以较高精度执行。这通常与进入矩阵乘法的操作数的预缩放或后缩放相结合,以获得更好的输出精度。第二种方案是量化感知训练,它补偿量化过程中损失的精度。这种方法在预训练或微调期间执行,教会模型在低精度缩放时需要使用的补偿因子,包括模型权重和称为激活函数的非线性函数。由于它是在训练期间完成的,因此使模型能够在推理期间纠正所产生的输出。
Srivatsa表示,使用AI模型进行推理是一场关于每百万token的瓦特数和美元数的博弈。“因此,如果我们能将给定运算的硅面积从4平方毫米缩小到1平方毫米,并且如果能使该芯片仅消耗四分之一的功耗,那将是一个巨大的胜利。”Ganti表示,低精度计算还使开发者能够将一些LLM直接部署在笔记本电脑和消费级GPU上,因为它们需要的计算资源更少。
尽管大多数关于低精度AI计算的讨论集中在模型权重和激活值上,但模型的键值缓存(KV cache)也可以从降低精度中受益。KV缓存存储LLM已经生成的token,这可能迅速增长到需要比模型本身更多的内存——在许多生产级推理服务器中,KV缓存甚至可能达到模型大小的8倍。由于序列长度一直在增长,尤其是对于产生和评判自身输出的AI智能体,以低精度存储KV缓存有可能大幅缩小LLM的内存占用,Srivatsa表示。“这是一个需要解决的高优先级问题,”他指出。
到目前为止,我们主要讨论了浮点数,但低精度AI计算也涉及定点表示,即整数。在某些情况下,低精度计算也可以意味着将浮点值转换为定点值——例如从FP16或FP32转换为INT8。Srivatsa表示,无论使用定点还是浮点表示,低精度推理仍然可以在以全精度训练的AI模型上运行。
Srinivasan指出,低精度推理的一个潜在缺点是,当你运行具有某些对精度极其敏感的计算的模型时,减少位宽可能会改变可操作的结果。“你会陷入困境,”她说。“但有办法解决。”返回到训练或微调可以让你调整模型权重来解决这个问题。
低精度计算不仅改变了我们使用处理器的方式,也改变了我们构建处理器的方式。IBM Research正在致力于设计从底层就以AI为核心构建的低精度硬件。Srinivasan解释说,低精度计算可以在现有处理器上运行,但没有那么大的优势。“如果你想获得面积缩减和能耗降低的所有好处,那么你需要构建能够执行低精度算术的硬件。”如果硬件是为更高精度构建的,以低精度运行它仍然会启用高精度乘法器,因此不会提供在相同面积内打包更多计算或消耗更少能量的好处。“即使计算不需要更高精度,面积和功耗成本也会产生,”Srinivasan说。
Srinivasan和其他IBM Research科学家一直在研究AIU系列中原生支持低精度计算的硬件,包括NorthPole、Spyre和模拟芯片原型。例如,Spyre加速器支持FP16、FP8、INT8和INT4的乘法和累加运算,帮助其实现比通常用于模型训练的其他硬件更高的计算密度——相同面积下更强大的算力。
Srinivasan指出,虽然低精度是IBM AI计算战略的重要组成部分,但它只是全貌的一部分。AIU系列硬件还受益于片上内存等进步,这消除了内存与计算之间经典的冯·诺依曼瓶颈,该瓶颈往往会拖慢AI训练和推理。灵活性也是这些设备的关键组成部分,它们可以根据训练的具体情况以多种不同精度运行模型。也可以将全精度能力与低精度一起构建到芯片中,这样如果模型对近似不耐受,它仍然可以在相同的硬件上运行。研究人员正在研究各种精度混合方案,以使其在未来适用于不同的应用。
Srivatsa表示,低精度计算的未来可能还包括更低的精度。他和其他人正在研究2比特精度,其中仅包含-1、0和1。虽然LLM使用乘法,但以这种方式减少位宽会将运算转变为仅加法和减法,这在计算上很廉价。这还处于早期阶段,但这是未来研究的一个方向,以探索低精度能走多远。
转载声明:本文为转载整理,原文版权归原作者及原站点所有。
原文来源:IBM Research Blog
原文作者:Peter Hess;如有侵权,请联系管理员删除。