llm-compressor
vLLM 官方模型压缩工具,集成 GPTQ/AWQ/FP8 等多种量化算法,显存占用降低 75%,推
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
vLLM 官方模型压缩工具,集成 GPTQ/AWQ/FP8 等多种量化算法,显存占用降低 75%,推
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
一个普通的 AI 开发团队,预算只够买两块 A100 40GB 显卡。他们想跑 Llama 3.1 70B——全精度版本需要约 140GB 显存,直接爆显存。他们该怎么办?买更多 GPU?放弃这个模型?还是接受慢吞吞的推理速度?
LLM Compressor 正是为解决这个痛点而生的工具。它是 vLLM 官方团队维护的模型压缩库,通过量化技术把大模型的权重从 FP16/BF16 压缩到 INT4、FP8 等低精度格式,显存占用最多降低 75%,推理速度最高提升 4 倍。更关键的是,压缩后的模型可以直接被 vLLM 加载运行,无需额外适配。
这个库最初由 Neural Magic 公司开发并开源,后来 vLLM 团队将其纳入官方生态,成为官方推荐的模型压缩方案。目前 GitHub 获得 3300+ Stars,由 vLLM 官方组织(vllm-project)维护,活跃度极高。
可以把大模型理解为一台精密机器,里面有无数个"齿轮"(权重参数)。全精度(FP16)下每个齿轮都是精密加工的,精度高但占地方大。量化就是把这些齿轮从"精密加工"降级为"标准件",精度略微损失,但体积大大缩小。
LLM Compressor 支持多种量化算法,每种算法有不同的适用场景:
不同精度格式对应不同的硬件和场景:W4A16(INT4 权重)适合 Ampere 以上 GPU,最高 4 倍延迟提升;W8A8-FP8 适合 Hopper 架构(如 H100),吞吐翻倍;NVFP4/MXFP4 是 Blackwell 专属,适合追求极致压缩的场景。
LLM Compressor 的代码库采用高度模块化的设计,核心代码在 src/llmcompressor/ 下:
modifiers/ 目录包含各类量化算法的实现。GPTQ、AWQ、Wanda、SparseGPT、AutoRound、SmoothQuant 等算法各有独立子目录,每种算法的核心逻辑(如 gptq_quantize.py、wanda_sparsify.py)结构清晰,便于理解和扩展。
transform/ 目录提供量化前的预处理变换,包括 AWQ 映射、SmoothQuant 缩放、Importance Matrix (imatrix) 计算、QuIP 和 SpinQuant 旋转矩阵生成。这些变换可以组合使用,在量化之前对模型进行"预处理",减少精度损失。
pipelines/ 目录定义了量化工作流。oneshot.py 是最常用的单步量化入口,sequential.py 支持顺序执行多个量化步骤,data_free 和 independent 提供了不同的量化路径。
recipe/ 目录实现了声明式量化配方机制。用户可以定义一个 recipe(如 [SmoothQuantModifier, GPTQModifier]),指定量化目标精度、目标层、校准数据等参数,系统自动执行完整的压缩流程——类似于 Makefile 的依赖管理思想。
modeling/ 目录包含对特定模型架构的特殊支持。LLM Compressor 针对主流大模型(Qwen、DeepSeek、GLM、LLaMA、Gemma 等)分别写了专门的 patch 文件,因为不同模型架构的 Attention 模式、MoE 实现存在差异,需要定制化处理。
使用 LLM Compressor 量化模型非常简洁,整个流程只需 3 步:
from llmcompressor.modifiers.quantization import GPTQModifier
from llmcompressor.modifiers.smoothquant import SmoothQuantModifier
from llmcompressor.transformers import oneshot
# 第一步:选择量化算法组合
recipe = [
SmoothQuantModifier(smoothing_strength=0.8),
GPTQModifier(scheme="W8A8", targets="Linear", ignore=["lm_head"]),
]
# 第二步:执行量化压缩
oneshot(
model="meta-llama/Meta-Llama-3.1-8B-Instruct",
dataset="open_platypus",
recipe=recipe,
output_dir="Meta-Llama-3.1-8B-Instruct-INT8",
max_seq_length=2048,
num_calibration_samples=512,
)
# 第三步:交给 vLLM 推理
from vllm import LLM
model = LLM("./Meta-Llama-3.1-8B-Instruct-INT8")
output = model.generate("My name is")
项目在 examples/ 目录下提供了大量实战示例,覆盖了几乎所有主流模型和各种量化格式组合:LLaMA、Qwen、DeepSeek、Gemma、Mistral 等模型的 W4A16、W4A4、W8A8、FP8 量化都有可直接运行的代码示例。此外还支持多模态模型(视觉、语言)、音频模型、大模型分布式量化、KV Cache 量化等高级场景。
LLM Compressor 最大的优势在于与 vLLM 的深度集成。量化后的模型以 compressed-tensors 格式保存,vLLM 能自动识别 config.yaml 并加载压缩后的权重,无需用户做任何额外配置。
实测精度损失极小:在 Llama 3.1 70B 上,W8A8 INT8 量化后 MMLU 基准仅下降 0.1%,GSM8K 甚至略有提升(量化引入了轻微正则化效应)。更重要的是,在高并发场景下,量化模型的吞吐量优势非常明显:W8A8 模型用 2 张 GPU 就能达到全精度模型 4 张 GPU 的性能。
LLM Compressor 也有其局限性。首先,它主要面向 NVIDIA GPU 生态,虽然文档中提到 AMD/Google/Intel 支持计划,但目前实际可用的高性能 kernel 仍以 NVIDIA 为主。其次,极低比特量化(如 INT2)虽然技术上可行,但精度损失在实际任务中往往难以接受,项目也没有对此做过多宣传。此外,大模型量化需要足够的校准数据,数据质量直接影响量化效果——如果校准数据分布与实际推理场景差异较大,精度损失会比预期更大。
LLM Compressor 的出现让"用消费级显卡跑大模型"成为可能。一个 24GB 显存的 4090 显卡,通过 INT4 量化可以运行 Qwen2.5-72B 模型,这在全精度下是不可想象的。这对于中小企业、个人开发者以及学术研究团队意义重大——他们不需要购买昂贵的 H100 集群,也能用上主流大模型。
从行业趋势看,模型压缩已经成为 LLM 落地的重要环节。随着 vLLM 官方持续加大对压缩工具的投入,量化、剪枝、蒸馏等技术的组合使用将更加成熟。LLM Compressor 作为 vLLM 官方推荐的压缩方案,有望在未来成为 LLM 部署流水线的标准一环。