Transformers 现在支持 GGUF 量化模型

来自 Hugging Face · 期号 2026-09-22

摘要

Hugging Face 在 transformers 中加入了对 GGUF 格式的原生支持。用户可以用熟悉的 from_pretrained 接口加载量化后的模型,在本地 Apple Silicon 上运行。 GGUF 是 llama.cpp 生态的模型打包格式,把权重、分词器和聊天模板塞进一个文件,支持多种量化等级。Hugging Face 复用了 llama.cpp 底层的 ggml 内核来加速计算,在 M2 Max 上的生成速度已经接近原生 llama.cpp。 更大的意义在于:ggml 内核现在可以通过 PyTorch 调用,这意味着 transformers 可以加速那些 llama.cpp 本身不支持的模型架构,包括视觉、音频和多模态模型。 本文是使用详解,附有完整的加载、推理和部署示例。

深读

导读 Hugging Face 在 transformers 库中加入了对 GGUF 格式的原生支持,用户现在可以用熟悉的 from_pretrained 接口加载量化后的模型,在本地 Apple Silicon 上运行。这项工作的核心是复用了 llama.cpp 底层的 ggml 内核,并通过优化 generate 循环来减少同步开销,使得生成速度已接近原生 llama.cpp。读完本文可以了解如何用 Python/PyTorch 加载和部署 GGUF 模型,以及这一集成对未来支持更多模型架构(包括视觉、音频和多模态模型)的意义。 关键信息 - GGUF 是 llama.cpp 生态的模型打包格式,将权重、分词器和聊天模板塞进一个文件,支持多种量化等级(如 Q4_K_M、Q5_K_M、Q6_K)。 - 以 Unsloth 的 Qwen3.5-4B 为例,BF16 版本大小 8.42 GB,Q4_K_M 版本仅 2.74 GB,是本地推理的实用起点。 - 在 M2 Max(32 GB 统一内存)上,transformers 加载 Qwen3.5-4B Q4_K_M 的生成速度已接近 llama.cpp 的 llama-bench 结果(后者仅测解码,前者包含预填充)。 - 复用 ggml 的 Metal 内核包括:ggml-quantization(直接读取量化权重)、ggml-norm(融合归一化)、ggml-attn(Metal flash attention)、ggml-gated-delta-net(加速线性注意力层),以及自实现的 topk(MoE 路由)。 - 两项 generate 循环优化(#48814 和 #47975)对所有 transformers 模型有效,不仅限于 GGUF:提前移除无填充输入的注意力掩码、异步执行停止检查以减少 GPU-CPU 同步等待。 逐节讲解 GGUF 文件格式与量化选择 GGUF 把模型权重、分词器信息和聊天模板打包成一个文件,支持不同量化等级。文章以 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。建议从 Q4_K_M 开始尝试,如果内存充裕再试 Q5_K_M 或 Q6_K。更激进的量化能让更大模型装进内存,但质量损失取决于模型和任务,需要在实际工作上评估。 用 transformers 加载 GGUF 模型 需要 Apple Silicon Mac、兼容的 PyTorch 版本以及最新版 transformers 和 kernels 库。加载时只需将 Hub 上的模型 ID 和 GGUF 文件名传给 from_pretrained 的 gguf_file 参数,后续的 t…

读原文

本站只做摘要与索引,全部内容版权归原作者所有。