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"))

📚 文档与社区


📈 项目成熟度

  • 发布于 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 位于 模型准备 与 运行推理 之间:

  1. 输入 – Hugging Face 检查点(支持任何架构)。
  2. 处理 – 通过库 API 进行量化/剪枝。
  3. 输出 – compressed‑tensors 检查点。
  4. 运行 – 使用 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
  • 项目