OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  LLM Compressor — 面向大模型压缩与加速的工具集

LLM Compressor — 面向大模型压缩与加速的工具集

 
  postgresql ·  2026-04-15 11:00:27 · 6 次点击  · 0 条评论  

工具图标 LLM Compressor

[![文档](https://img.shields.io/badge/docs-LLM--Compressor-blue)](https://docs.vllm.ai/projects/llm-compressor/en/latest/) [![PyPI](https://img.shields.io/pypi/v/llmcompressor.svg)](https://pypi.org/project/llmcompressor/)

llmcompressor 是一个易于使用的库,用于优化模型以便通过 vllm 进行部署,主要功能包括:

  • 全面的量化算法集,支持仅权重量化和激活量化
  • 与 Hugging Face 模型和仓库的无缝集成
  • 基于 safetensors 的文件格式,兼容 vllm
  • 通过 accelerate 支持大模型

✨ 阅读发布博客 请点击这里! ✨

LLM Compressor 流程


💬 加入我们的 vLLM 社区 Slack,并在以下频道分享您的问题、想法或建议:

  • #sig-quantization
  • #llm-compressor

🚀 最新动态!

LLM Compressor 迎来了重大更新!想深入了解,请查看 LLM Compressor 概述

一些令人兴奋的新功能包括:

  • Gemma4 支持:现在可以使用 LLM Compressor 对 Gemma 4 进行量化。支持已进入主分支,需要更新 transformers 至 5.5 版本(uv pip install transformers>=5.5)。对于 RedHat 团队已量化并发布的模型,可以考虑使用:
  • gemma-4-31B-it-NVFP4
  • gemma-4-31B-it-FP8-block
  • gemma-4-31B-it-FP8-Dynamic
  • gemma-4-26B-A4B-it-FP8-Dynamic
  • gemma-4-26B-A4B-it-NVFP4
  • Qwen3.5 支持:现在可以使用 LLM Compressor 对 Qwen 3.5 进行量化。您需要使用 uv pip install --upgrade transformers 更新本地 transformers 版本,如果使用 <0.11 版本的 LLM Compressor,则需要从源码安装。更新后,您应该能够端到端地运行 MoE非 MoE 变体的 Qwen 3.5 示例。对于 RedHat 团队已量化并发布的模型,可以考虑使用 NVFP4 以及 Qwen3.5-122BQwen3.5-397B 的 FP8 检查点。
  • 更新的卸载和模型加载支持:现在支持加载已卸载到磁盘和/或跨分布式进程卸载的 transformers 模型。磁盘卸载允许用户加载和压缩通常无法放入 CPU 内存的超大模型。卸载功能不再通过 accelerate 支持,而是通过添加到 compressed-tensors 的模型加载工具实现。有关更新后的单进程和分布式流程加载与卸载功能的完整总结,请参阅 大模型与分布式支持指南
  • 分布式 GPTQ 支持:GPTQ 现在支持分布式数据并行(DDP)功能,可显著改善校准运行时间。使用 DDP 进行 GPTQ 的示例可以在这里找到。
  • 更新的 FP4 微尺度支持:GPTQ 现在支持 FP4 量化方案,包括 MXFP4NVFP4。MXFP4 支持也得到了改进,更新了权重尺度生成。自 vLLM v0.14.0 起,采用 MXFP4 格式的仅权重量化模型现在可以在 vLLM 中运行。对于 compressed-tensors 模型,采用激活量化的 MXFP4 模型目前尚未在 vLLM 中得到支持。
  • 新的无模型 PTQ 路径:LLM Compressor 新增了一个无模型 PTQ 路径,称为 model_free_ptq。该路径允许您在无需 Hugging Face 模型定义的情况下量化模型,这在 oneshot 可能失败的情况下尤其有用。该路径目前仅支持无数据路径,例如 FP8 量化,并已用于量化 Mistral Large 3 模型。新增的示例展示了如何使用 LLM Compressor 处理 Kimi K2。
  • MXFP8 微尺度支持(实验性):LLM Compressor 现在通过 PTQ 支持 MXFP8 量化。W8A8 (MXFP8) 和 W8A16 仅权重 (MXFP8A16) 模式均可用。
  • 扩展的 KV Cache 和注意力量化支持:LLM Compressor 现在支持注意力量化,以及细粒度的 KV Cache 量化。以前仅支持张量级别的 KV Cache 量化。现在,您可以使用 per-head 尺度量化 KV Cache 并在 vLLM 中运行。更通用的注意力和 KV Cache 量化示例可以在实验文件夹中找到。

支持的格式

  • 激活量化:W8A8 (int8 和 fp8),MXFP8 (实验性)
  • 混合精度:W4A16, W8A16, MXFP8A16 (实验性), NVFP4 (支持 W4A4 和 W4A16)

支持的算法

  • 简单 PTQ
  • GPTQ
  • AWQ
  • SmoothQuant
  • AutoRound

何时使用哪种优化

有关可用优化方案及其使用场景的详细信息,请参阅 compression_schemes.md

安装

pip install llmcompressor

快速开始

端到端示例

使用 llmcompressor 应用量化:
* 激活量化到 int8
* 激活量化到 fp8
* 激活量化到 MXFP8 (实验性)
* 仅权重量化到 MXFP8A16 (实验性)
* 激活量化到 fp4
* 使用 AutoRound 激活量化到 fp4
* 激活量化到 fp8 和权重量化到 int4
* 仅权重量化到 fp4 (NVFP4 格式)
* 仅权重量化到 fp4 (MXFP4 格式)
* 使用 GPTQ 仅权重量化到 int4
* 使用 AWQ 仅权重量化到 int4
* 使用 AutoRound 仅权重量化到 int4
* KV Cache 量化到 fp8
* 使用 per-head 将 KV Cache 量化到 fp8
* 注意力量化到 fp8
* 使用 SpinQuant 将注意力量化到 nvfp4 (实验性)
* 量化 MoE LLMs
* 量化视觉语言模型
* 量化音频语言模型
* 非均匀量化模型

用户指南

深入探讨 llmcompressor 的高级用法:
* 使用顺序加载量化大模型

快速体验

让我们使用 Round-to-Nearest 算法将 Qwen3-30B-A3B 量化为 FP8 权重和激活。

请注意,模型可以替换为本地或远程的 HF 兼容检查点,并且可以更改 recipe 以针对不同的量化算法或格式。

应用量化

通过选择算法并调用 oneshot API 来应用量化。

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, dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)

# 配置量化算法和方案。
# 在本例中,我们:
#   * 使用 RTN 和 block_size 128 将权重量化为 FP8
#   * 在推理过程中将激活动态量化为 FP8
recipe = QuantizationModifier(
    targets="Linear",
    scheme="FP8_BLOCK",
    ignore=["lm_head", "re:.*mlp.gate$"],
)

# 应用量化。
oneshot(model=model, recipe=recipe)

# 确认量化模型的生成结果看起来正常。
print("========== 示例生成 ==============")
dispatch_model(model)
input_ids = tokenizer("Hello my name is", return_tensors="pt").input_ids.to(
    model.device
)
output = model.generate(input_ids, max_new_tokens=20)
print(tokenizer.decode(output[0]))
print("==========================================")

# 以 compressed-tensors 格式保存到磁盘。
SAVE_DIR = MODEL_ID.split("/")[1] + "-FP8-BLOCK"
model.save_pretrained(SAVE_DIR)
tokenizer.save_pretrained(SAVE_DIR)

使用 vLLM 进行推理

llmcompressor 创建的检查点可以在 vllm 中加载和运行:

安装:

pip install vllm

运行:

from vllm import LLM
model = LLM("Qwen/Qwen3-30B-A3B-FP8-BLOCK")
output = model.generate("My name is")

问题 / 贡献

  • 如果您有任何问题或需求,请提交一个 issue,我们将添加示例或文档。
  • 我们欢迎对代码、示例、集成和文档的贡献,以及错误报告和功能请求!在此了解如何贡献

引用

如果您在研究中或项目中觉得 LLM Compressor 有用,请考虑引用它:

@software{llmcompressor2024,
    title={{LLM Compressor}},
    author={Red Hat AI and vLLM Project},
    year={2024},
    month={8},
    url={https://github.com/vllm-project/llm-compressor},
}

!!! warning
由于缺乏硬件支持和实际使用,稀疏压缩(2:4 稀疏度)不再受 LLM Compressor 支持。

6 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 30 ms
Developed with Cursor