Transformers 支持直接运行 llama.cpp 的 GGUF 量化模型
来源Hugging Face Blog查看原文
速览
- transformers 现在能直接加载 GGUF 量化模型,本地推理多了一个 PyTorch 原生选项。
- 官方建议从 Q4_K_M 量化开始,内存充足再尝试 Q5_K_M 或 Q6_K。
- 性能接近 llama.cpp,但官方仍推荐 llama.cpp 作为高效本地推理引擎。
- 复用 ggml Metal 内核,并优化 generate 循环以减少 CPU-GPU 同步。
- 目前仅支持 Apple Silicon 和 Qwen3.5 架构,打包推理限 MPS。
- 可用 transformers serve 提供 OpenAI 兼容接口,连接 Jan、Pi 等客户端。
- 支持反量化后微调,通过 GgufConfig(dequantize=True) 实现。
- 未来计划把 ggml 内核扩展到更多架构和多模态模型。
Hugging Face 在官方博客宣布,transformers 现已支持高效运行 GGUF 格式模型,用户可以直接从 Hub 上选取 GGUF 检查点,通过熟悉的 from_pretrained 接口加载并生成内容。GGUF 由 llama.cpp 团队开发,是本地推理广泛使用的格式,支持多种量化等级,例如 Q4_K_M 在 Unsloth 的 Qwen3.5-4B 上把文件从 BF16 的 8.42 GB 压缩到 2.74 GB。为接近 llama.cpp 的性能,transformers 复用了其底层 ggml 内核,并优化了 generate 循环,减少 CPU 与 GPU 之间的同步开销。目前该功能主要面向 Apple Silicon 本地推理,首批支持 Qwen3.5 架构,打包推理路径仅限 MPS。官方基准显示,在 MacBook Pro M2 Max 上,transformers 在三个 GGUF 检查点上的表现已接近 llama.cpp。
关键事实
- transformers 新增对 GGUF 模型的支持,可通过 from_pretrained 加载并生成内容。
- GGUF 由 llama.cpp 团队开发,支持多种量化等级,Q4_K_M 是官方建议的本地推理起点。
- 以 Unsloth 的 Qwen3.5-4B 为例,BF16 文件为 8.42 GB,Q6_K 为 3.53 GB,Q5_K_M 为 3.14 GB,Q4_K_M 为 2.74 GB。
- transformers 通过 kernels 库复用 ggml 的 Metal 内核,包括 ggml-quantization、ggml-norm、ggml-attn、ggml-gated-delta-net,以及自研的 topk 内核。
- generate 循环有两项优化:提前移除不必要的 attention mask(#48814),以及延迟停止检查(#47975),这些改进对所有 transformers 模型生效。
- 基准测试在 MacBook Pro M2 Max、32 GB 统一内存、macOS 26.6、PyTorch 2.12.1、kernels 0.17.0 上完成,transformers 在三个 GGUF 检查点上接近 llama.cpp。
本站视角
对中文开发者和本地 AI 工具用户来说,这次集成降低了在 PyTorch 生态里使用量化模型的门槛。过去想跑 GGUF,基本只能用 llama.cpp 或基于它的 Ollama、LM Studio、Jan;现在可以在 transformers 里用同一份检查点做实验、调试和评估,不必在推理运行时和训练框架之间来回切换。对做 Agent、代码助手、本地知识库的团队,这意味着原型验证和效果评估可以统一在一套 Python 工作流里,尤其适合需要 hooks、自定义 logits processor 或修改 forward 的研究场景。但需要冷静看待:官方明确说 llama.cpp 仍是高效本地推理的首选,transformers 的定位是方便开发,不是取代。当前限制也很实在——仅 Apple Silicon、仅 MPS、仅 Qwen3.5 架构,padding 和 batching 性能还有待改进,这意味着 Windows 和 NVIDIA 用户暂时用不上打包内核,只能走反量化路径。基准数据来自 Hugging Face 自己,且 transformers 的测量包含 prefill 而 llama-bench 只报告 decode 吞吐,两者条件并不完全相同,官方也在文中承认了这一点,所以“接近 llama.cpp”的结论需要更多第三方复现。我们认为,这次更新的真正价值不在跑分,而在于把 ggml 内核引入 PyTorch 生态的路径打通;如果后续能覆盖更多架构和多模态模型,受益的将是那些 llama.cpp 尚未支持的新模型,而不是已经跑得很好的主流模型。
背景与影响
GGUF 是 llama.cpp 团队开发的本地推理格式,将模型权重、tokenizer 信息和可选聊天模板打包在一个文件中,并支持不同量化等级。GGML 和 llama.cpp 加入 Hugging Face 后,双方角色互补:llama.cpp 提供本地推理基础,transformers 提供模型定义基础。此次 GGUF 支持把两者拉近。此前,用户若想在 transformers 中使用 GGUF,通常需要反量化,会占用更多内存;现在通过复用 ggml 的 Metal 内核,可以直接读取打包的量化权重,降低内存占用并提升速度。这一集成让开发者能在 Python 和 PyTorch 环境中试验 GGUF 模型、检查中间激活、评估量化质量、验证转换正确性,甚至从 GGUF 检查点反量化后继续微调。官方表示,更大的机会在于把 ggml 的性能带给 llama.cpp 尚未支持的模型,例如新架构、研究模型和自定义变体,未来还可能扩展到计算机视觉、音频和多模态模型。
本文由 AI 辅助整理自公开信源,事实部分以原文为准;「本站视角」一节为编辑部判断,欢迎指正。版权归原作者所有,如有异议请联系我们。