vllm-project/llm-compressor
State-of-the-art LLM compression, built for production inference with vLLM
📦 llmcompressor – 针对 vLLM 的快速、灵活 LLM 量化工具
简介 – llmcompressor 是一个 Python 库,用于准备大型语言模型检查点,以便在 vLLM 运行环境中进行高效推理。它通过应用广泛的量化算法(仅权重、激活、KV 缓存、注意力)和模型级转换来实现此目的,然后将结果保存为 vLLM 可直接加载的 compressed‑tensors 格式。
重要性 – 量化可以将 30B 参数模型缩小至原始 VRAM 占用空间的一小部分,同时保持大部分原始质量。llmcompressor 增加了:
- 高速内核 – 基于 Triton 的 GPTQ 内核,比之前的 eager 实现快约 15 倍,并且可以批处理相同形状的层。
- 多种精度格式 – INT4、FP8、NVFP4、MXFP4、混合精度组合(例如 W4A16、NVFP4A16)以及低位元自定义格式。
- 支持特殊架构 – MoE 模型、视觉语言、音频语言,甚至是无模型定义的架构。
- 可扩展的工作流程 – DDP 和磁盘卸载功能让您可以在单个 GPU 或小型 GPU 集群上压缩数千亿参数的模型。
🎯 典型使用案例
| 情境 | llmcompressor 如何协助 |
|---|---|
| 在单个 GPU 上部署 30B 参数 LLM | 将权重/激活转换为 FP8 或 NVFP4,在保持困惑度 (perplexity) 的同时减少 > 70 % 的 VRAM 使用量。 |
| 在有限硬件上运行大型 MoE 模型(例如 Qwen‑3.8‑2.4T) | 使用 REAP 专家剪枝 + NVFP4 流水线,在量化前剔除最不显著的专家。 |
| 需要为多个模型提供快速量化流水线 | Triton 加速的 GPTQ 和批处理将端到端时间从数天缩短至数小时。 |
| 希望保留原始 Hugging‑Face 工作流程 | 该库直接与 AutoModelForCausalLM / AutoTokenizer 搭配使用,并输出标准的 compressed‑tensors 检查点,vLLM 可通过 LLM(<path>) 加载。 |
⚙️ 核心功能(如 README 中所列)
- 量化算法:简单 PTQ、GPTQ、AWQ、SmoothQuant、AutoRound、SpinQuant、QuIP、REAP 专家剪枝。
- 支持的精度:W8A8、W4AFP8、NVFP4、MXFP4、MXFP8、FP8、INT4,以及任意位元 (WNA4/8/16)。
- 混合精度流水线:结合仅权重(例如 INT4)与仅激活(FP8)或块格式。
- KV 缓存与注意力量化:FP8 和 NVFP4 选项,包括每头变体。
- 架构特定支持:MoE LLM、视觉语言、音频语言以及没有 Hugging‑Face 定义的模型。
- 可扩展执行:分布式数据并行 (DDP) 量化、顺序加载以及针对无法放入 GPU 内存模型的磁盘卸载。
- 无缝 vLLM 集成:产生的检查点可直接由
vllm.LLM使用。
📦 安装
pip install llmcompressor # 拉取库及其依赖项
(若要使用产生的检查点进行推理,请另外安装 vllm。)
🛠️ 快速入门示例(来自 README)
from compressed_tensors.offload import dispatch_model
from transformers import AutoModelForCausalLM, AutoTokenizer
from llmcompressor import oneshot
from llmcompressor.modifiers.quantization import QuantizationModifier
MODEL_ID = "Qwen/Qwen3-30B-A3B"
model = AutoModelForCausalLM.from_pretrained(MODEL_ID)
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
# 将权重与激活量化为 FP8(块级)并跳过几个层
recipe = QuantizationModifier(
targets="Linear",
scheme="FP8_BLOCK",
ignore=["lm_head", "re:.*mlp.gate$"],
)
oneshot(model=model, recipe=recipe) # 原地应用量化
# 验证简短生成
dispatch_model(model)
ids = tokenizer("Hello my name is", return_tensors="pt").input_ids.to(model.device)
print(tokenizer.decode(model.generate(ids, max_new_tokens=20)[0]))
# 保存以供 vLLM 使用
SAVE_DIR = "Qwen3-30B-A3B-FP8-BLOCK"
model.save_pretrained(SAVE_DIR)
tokenizer.save_pretrained(SAVE_DIR)
然后使用 vLLM 运行:
from vllm import LLM
llm = LLM("Qwen3-30B-A3B-FP8-BLOCK")
print(llm.generate("My name is"))
📚 文档与社区
- 完整文档 – https://docs.vllm.ai/projects/llm-compressor/en/latest/(安装、逐步压缩指南、常见问题)。
- 博客公告 – https://neuralmagic.com/blog/llm-compressor-is-here-faster-inference-with-vllm/。
- 社区 – vLLM Slack (
#sig-quantization,#llm-compressor)。 - 问卷 – README 中链接的 1 分钟用户问卷,欢迎提供反馈。
📈 项目成熟度
- 发布于 PyPI (
llmcompressor),版本 ≥ 0.13.0。 - 由 Red Hat AI 和 vLLM Project 积极维护。
- 提供许多生产就绪的检查点(GLM‑5.3、Qwen 3.8、Nemotron 3.5、Muse‑Glimmer、Kimi‑K3 等),托管于 Hugging Face。
- 包含涵盖所有量化路径的广泛示例脚本。
🧩 生态系统契合度
llmcompressor 位于 模型准备 与 运行推理 之间:
- 输入 – Hugging Face 检查点(支持任何架构)。
- 处理 – 通过库 API 进行量化/剪枝。
- 输出 –
compressed‑tensors检查点。 - 运行 – 使用 vLLM 加载检查点以进行超快速服务。
📜 引用
若您在研究或产品中使用此库,请引用:
@software{llmcompressor2024,
title={{LLM Compressor}},
author={Red Hat AI and vLLM Project},
year={2024},
month={8},
url={https://github.com/vllm-project/llm-compressor},
}
总结 – llmcompressor 是一个生产级、高度优化的工具组,用于将大型且通常难以处理的 LLM 检查点转换为紧凑、vLLM 就绪的成品,支持最新的量化研究(GPTQ、AWQ、AutoRound、REAP 等),并可扩展至数千亿参数的模型。
相关
- 项目
- 项目
- 项目
- Dispatch
- 项目