大型语言模型最常用的数值格式

Gábor Bíró 2025年1月23日
4 阅读时间

大型语言模型 (LLM) 的高效运行在很大程度上依赖于其权重的适当存储和处理。所选的数值格式直接影响模型的内存需求、计算速度和准确性。多年来,FP32 已逐渐被 FP16 和 BF16 补充或取代用于训练,而 INT8 甚至更低位数的量化格式越来越常用于优化推理。

大型语言模型最常用的数值格式
来源: 作者原创

人工智能,尤其是深度学习,涉及大量的计算。这些计算中使用的数值格式(即数字在计算机中如何存储和操作)直接影响:

  • 速度: 较低精度的格式(较少位数)可以实现更快的计算。
  • 内存占用: 较少位数需要更少的内存,这对于加载和运行大型模型至关重要。
  • 功耗: 处理较少位数通常需要更少的能量。
  • 准确性: 较高精度的格式(更多位数)产生更准确的结果,但通常以速度、内存和功耗为代价。

目标是找到准确性和效率之间的最佳平衡。对于 LLM,用于存储权重的最常用数值格式是 半精度浮点 (FP16)bfloat16 (BF16)。为了通过量化优化推理,INT8 甚至更低位数的格式也越来越多地被使用。

人工智能中的关键数值格式:

  1. FP32(32 位浮点)
    • 从历史上看,这是深度学习中的默认格式。
    • 提供高精度,但需要大量的内存和计算资源。
    • 在现代大型 LLM 中很少直接用于存储权重。
  2. FP16(16 位浮点 / 半精度)
    • 由 Nvidia 随 Pascal 架构(2016 年)推出。
    • 受 Nvidia Tensor Core 和其他 GPU 支持,从而实现更快的计算。
    • 与 FP32 相比,减少了内存使用和计算需求。精度的降低对于训练和运行深度学习模型通常是可以接受的。
    • 对于许多大型模型来说足够精确,但在某些情况下(例如,非常小的梯度),精度损失可能会导致诸如underflow之类的问题。
  3. BF16(bfloat16 / 脑浮点)
    • 也像 FP16 一样是 16 位,但具有不同的内部结构:指数位更多,而尾数(小数部分)位更少。
    • 这使 BF16 的动态范围(最大和最小可表示数字之间的差异)比 FP16 更接近 FP32。
    • 这减轻了 underflow 问题,并允许 BF16 在训练期间有效地使用,在某些情况下,与 FP16 相比精度损失更小。
    • Nvidia 在 Ampere 架构(2020 年)中引入了 BF16 支持。
  4. FP8(8 位浮点)
    • 在 Nvidia 的 Hopper (H100) 和 Blackwell (B100, B200, GB200) 架构中首次亮相。
    • 有两种变体:E4M3(4 位指数位,3 位尾数位)和 E5M2(5 位指数位,2 位尾数位)。
    • E4M3 提供更高的精度,而 E5M2 提供更宽的动态范围。
    • 显著加速训练和推理,通常与 FP16 相比精度损失可接受。
  5. INT8(8 位整数,用于量化模型)
    • 在内存和计算方面非常高效,可能比 FP16 操作快 4 倍。
    • 会产生一些精度损失,但可以通过仔细的量化技术有效地管理。
    • 在边缘设备和移动平台common,并受专用 AI 加速器(例如,Nvidia TensorRT、Qualcomm AI Engine)支持。
    • 在训练期间较少使用,因为精度损失对于梯度计算可能更成问题。
    • 通常的做法是对最初在 FP32 或 FP16 中训练的模型进行量化,将权重和激活转换为 INT8 以进行推理。
  6. INT4 / INT2(量化、低位格式)
    • 最近的模型和优化中越来越常见(例如,对于 Llama 模型、GPT-4)
    • 大幅减少内存使用并加速推理。
    • 主要用于推理;通常不适合训练。

数值格式的硬件支持的重要性

数值格式的硬件支持对于 GPU(和其他 AI 加速器)至关重要,因为它从根本上决定了计算效率。

  1. 优化的执行单元: 当 GPU 在硬件中支持某种格式(例如,FP16、BF16、FP8)时,这意味着芯片上的专用电路(执行单元,如乘法累加单元)是专门为该格式设计的。这些电路直接在硬件中执行操作,这比软件模拟快几个数量级。
  2. 高效的数据移动: 硬件支持不仅优化了计算,还优化了数据移动。GPU 的内存系统(寄存器、缓存、全局内存)和数据总线与支持的格式对齐。这意味着需要移动的位数更少,从而降低了内存带宽要求、延迟和功耗。
  3. 最大化并行性: GPU 的强大功能源于大规模并行性。硬件支持允许在支持格式的数据上同时执行更多操作。例如,如果 GPU 在硬件中支持 16 位操作,它可能会并行执行两个 16 位操作来代替一个 32 位操作,从而可能使这些操作的吞吐量加倍。
  4. 能源效率: 专用电路不仅更快,而且更节能。与不太专业的硬件或软件模拟相比,执行相同操作需要切换的晶体管更少,从而降低了功耗和热量产生。

总结

对于训练FP16BF16 很流行。对于推理,许多模型现在使用 INT8 甚至 INT4 量化,以实现更快的执行速度和更低的内存占用。人工智能中数值格式的演变是一个持续的优化过程。较低精度的格式使构建更快、更高效且可能更便宜的 AI 系统成为可能,但必须仔细考虑精度、动态范围和准确性之间的权衡。较新的硬件架构(如 Ampere、Ada Lovelace、Hopper、Blackwell)支持越来越多的高效数值格式,进一步加速了 AI 的发展。未来,我们可以期待出现更多针对 AI 工作负载的专用数值格式。

Gábor Bíró 2025年1月23日