llmcompressor 是一个易于使用的库,用于优化模型以便通过 vllm 进行部署,主要功能包括:
safetensors 的文件格式,兼容 vllmaccelerate 支持大模型✨ 阅读发布博客 请点击这里! ✨
💬 加入我们的 vLLM 社区 Slack,并在以下频道分享您的问题、想法或建议:
#sig-quantization#llm-compressorLLM Compressor 迎来了重大更新!想深入了解,请查看 LLM Compressor 概述。
一些令人兴奋的新功能包括:
uv pip install transformers>=5.5)。对于 RedHat 团队已量化并发布的模型,可以考虑使用:uv pip install --upgrade transformers 更新本地 transformers 版本,如果使用 <0.11 版本的 LLM Compressor,则需要从源码安装。更新后,您应该能够端到端地运行 MoE 和 非 MoE 变体的 Qwen 3.5 示例。对于 RedHat 团队已量化并发布的模型,可以考虑使用 NVFP4 以及 Qwen3.5-122B 和 Qwen3.5-397B 的 FP8 检查点。model_free_ptq。该路径允许您在无需 Hugging Face 模型定义的情况下量化模型,这在 oneshot 可能失败的情况下尤其有用。该路径目前仅支持无数据路径,例如 FP8 量化,并已用于量化 Mistral Large 3 模型。新增的示例展示了如何使用 LLM Compressor 处理 Kimi K2。per-head 尺度量化 KV Cache 并在 vLLM 中运行。更通用的注意力和 KV Cache 量化示例可以在实验文件夹中找到。有关可用优化方案及其使用场景的详细信息,请参阅 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)
由 llmcompressor 创建的检查点可以在 vllm 中加载和运行:
安装:
pip install vllm
运行:
from vllm import LLM
model = LLM("Qwen/Qwen3-30B-A3B-FP8-BLOCK")
output = model.generate("My name is")
如果您在研究中或项目中觉得 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 支持。