大家好!我们最近为大型语言模型的运行时量化实现了自定义浮点格式,这意味着可以直接将未量化的FP16模型加载到FP4、FP5、FP6和FP7中,精度损失非常小,几乎没有任何吞吐量惩罚(即使在批处理时也是如此)。
该算法基于几个月前引入的FP6-LLM,扩展支持任意浮点规格并优化了张量并行推理。经过一些基准测试和评估,它似乎与FP8相当,甚至在原生支持FP8的硬件上也是如此。
FP5和FP7在GMS8K上的基准测试与FP8相似,而FP6甚至超过了BF16量化。
如果你想试试,我已经写了一个小帖子,介绍如何使用Aphrodite引擎运行它,并附带一些基准数据:https://x.com/AlpinDale/status/1837860256073822471
这是如何工作的?
你可能想知道FP5、FP6和FP7这些不是2的幂的浮点数如何在批处理时具有竞争力。大多数这些说法通常来自FP4/INT4、FP8/INT8(例如Marlin),但看到不规则的位宽是不寻常的。这是一个问题,因为当你尝试在GPU内访问全局/共享内存时,你受到每个线程8/32位的最小访问大小的限制。还有张量核心带来的复杂性,但这完全是另一回事。
简而言之,这是非常复杂的CUDA内核。我在这里会解释一点,但我建议如果你熟悉CUDA/C++并且了解一些GPU架构,可以阅读代码。
- 提前位级预打包:本质上,我们在运行时之前重新排序每个权重矩阵内的权重。权重被收集并以特定顺序组合,以符合GPU线程在计算期间消耗它们的方式。预打包本身分为两个步骤:a) 每个线程的权重收集,收集的权重然后以锯齿状顺序组装到统一的内存空间中;在运行时,一个WARP的线程可以无银行冲突地从共享内存中读取连续的32位项目(顺便说一下,这解决了不规则位宽与不友好的内存访问的问题)。参考这里查看预打包权重加载逻辑(全局->共享内存)。
- SIMT高效GPU运行时:反量化是一个非常昂贵的过程,这是量化LLM无法正确批处理的主要原因:每一步都有大量的反量化开销。为了解决这个问题,我们进行并行反量化,其中多个浮点权重并行反量化,因此我们可以在每个32位寄存器内利用位级并行性。例如,四个FP6权重可以在单个32位寄存器内同时反量化。位操作也经过了仔细优化。例如,我们只使用两个位操作
and
,一个shifting
操作和一个or
操作从FP6转换到FP16。之后,我们将权重分成段(例如6位为2+4),然后在运行时高效地将它们重新拼接在一起。我们还必须并行化这个过程,因此我们同时重建四个权重。
除此之外,我们也不一次性反量化所有权重,而是逐片进行。我们这样做是为了减少寄存器压力,并为指令级并行性创造更多机会。整个流水线设计使得SIMT核心(负责反量化)、张量核心(负责矩阵乘法)和GPU内存层次结构都能完美协同工作。(事实上,Sonnet 3.5在看到一些代码后称这个设计为“低级GPU编程的典范”。不确定这是否是3.5的正常赞美)。
我还向vLLM发送了一个PR,并将与Neural Magic和vLLM团队合作进一步优化这一点。还有很多改进的空间,我在PR描述中列出了一些。vLLM PR还包含更详细的基准测试和评估,如果你对此感兴趣的话:)
我希望FP6成为未来的标准,考虑到Blackwell GPU也将增加原生FP8计算。它似乎是内存和精度权衡的甜蜜点。
如果你有任何问题,我很乐意回答。
附:我称之为“自定义”的原因是你可以从技术上自定义规格,直到指数和尾数位,例如在FP7_E4M2而不是E5M1下运行模型等。参考这里查看所有有效组合。这个API在我提交的vLLM PR中没有暴露给用户,但如果你想在Aphrodite中使用它。我们还支持FP2和FP3,但没有通道量化支持,它们会产生垃圾输出。我根据“感觉”选择了默认的指数/尾数值,因此下一步将是经验性地测试所有组合以达到有效的标准。可能基于MXFP。
讨论总结
本次讨论主要围绕自定义浮点数格式FP6在大型语言模型(LLMs)中的应用展开。参与者们讨论了FP6格式的计算效率、模型大小节省、硬件兼容性及性能测试等问题。评论者普遍认为FP6在计算效率上优于其他流行的量化方法,尤其是在节省模型大小方面具有显著优势。同时,讨论中也涉及了FP6在不同硬件平台上的支持情况,以及批处理大小对性能的影响。此外,部分评论者对FP6的统计显著性和未来集成提出了疑问和建议。
主要观点
👍 FP6格式在计算效率上优于其他流行的量化方法
- 支持理由:评论者提到FP6格式的存在是一个积极的进展,尤其是在节省模型大小方面具有意义。
- 反对声音:无明显反对声音,但有评论者对统计显著性提出质疑。
🔥 FP6格式的存在是一个积极的进展,尤其是在节省模型大小方面
- 正方观点:评论者认为FP6在某些模型和尺寸上可能是一个更好的选择。
- 反方观点:评论者对bitsandbytes的实时量化格式表示不满,认为其在效率上并不理想。
💡 FP6在某些模型和尺寸上可能是一个更好的选择
- 解释:评论者回忆了过去的一些量化格式(如4.625bpw和4.8bpw),并认为FP6在某些模型和尺寸上可能是一个更好的选择。
💡 FP6在不同硬件平台上的支持情况
- 解释:评论者讨论了FP6在不同硬件平台上的支持情况,特别是FP8在Ampere架构上的表现。
💡 批处理大小对量化模型的性能有显著影响
- 解释:评论者提出了关于批处理大小对性能影响的疑问,并表示需要重新测试以验证最新Aphrodite引擎的性能。
金句与有趣评论
“😂 Aaaaaaaaaeeeee:Nice! It seems this is more compute efficient than other popular grouped quantizations?”
- 亮点:评论者对FP6的计算效率表示赞赏。
“🤔 Remove_Ayys:Check the statistical significance of your results, you are very likely not using enough data.”
- 亮点:评论者对FP6的性能测试结果的统计显著性提出质疑。
“👀 a_beautiful_rhind:Ampere+ only? My experience with FP formats is using flux. FP8 is fast indeed, just worse than GGUF Q8 on quality.”
- 亮点:评论者分享了在Ampere架构上使用FP8的经验,并指出其在质量上不如GGUF Q8。
“👀 bullerwins:you can add this to the command: \n
-q quant_llm -quant-llm-fp-bits {2,3,4,5,6,7} --quant-llm-exp-bits {1,2,3,4,5}
\nSo for example: \naphrodite run \\~/models/Meta-Llama-3.1-8B-Instruct -q quant\\_llm -quant-llm-fp-bits 6 –quant-llm-exp-bits 4”- 亮点:评论者提供了具体的命令行示例,帮助用户尝试FP6格式。
“👀 AlpinDale:Unfortunately not. The lowest we could go would be Turing (from Ampere), and that would require us to get rid of async memory transfers.”
- 亮点:AlpinDale解释了FP6技术在硬件兼容性方面的限制。
情感分析
讨论的总体情感倾向是积极的,大多数评论者对FP6格式的计算效率和模型大小节省表示赞赏。然而,也有部分评论者对FP6的统计显著性和硬件兼容性提出了质疑。主要分歧点在于FP6在不同硬件平台上的支持情况和性能测试的统计显著性。
趋势与预测
- 新兴话题:未来可能会开发工具将现有模型转换为FP6格式,并将其集成到llm-compressor中。
- 潜在影响:FP6格式的推广可能会改变大型语言模型(LLMs)的量化标准,尤其是在节省模型大小和提高计算效率方面。
详细内容:
《自定义浮点数运行 LLMs 的热门讨论》
近日,Reddit 上有一则关于在自定义浮点数(Near-Lossless FP6)下运行 LLMs 的帖子引起了广泛关注。该帖子获得了众多点赞和大量评论。
原帖主要介绍了一种新的自定义浮点数格式用于 LLMs 的运行时量化,可直接将未量化的 FP16 模型加载到 FP4、FP5、FP6 和 FP7 中,精度损失极小,吞吐量几乎无影响。并且提供了相关链接https://x.com/AlpinDale/status/1837860256073822471,还提到已向 vLLM 发送了相关请求,并将与 Neural Magic 和 vLLM 团队进一步优化。
讨论焦点主要集中在以下几个方面: 有人认为这种新格式比其他流行的分组量化更具计算效率。也有人提出要检查结果的统计显著性,认为可能没有使用足够的数据。还有人询问如何自行尝试或将模型转换为 FP6,得到了可以在命令中添加特定参数的回答。
有用户表示 FP8 在某些方面的表现,比如在 Ampere+ 中的情况,以及和其他格式的比较。有人质疑这种新格式在计算能力 6.0 下是否可行。
大家在性能、适用范围、与其他量化方式的比较等方面存在不同看法。但总体上,对于这种新的自定义浮点数格式在 LLMs 运行中的应用和潜力表现出了浓厚的兴趣。
未来,我们期待看到这一技术的进一步发展和完善,为 LLMs 的高效运行带来更多可能。
感谢您的耐心阅读!来选个表情,或者留个评论吧!