vllm-project/llm-compressor

State-of-the-art LLM compression, built for production inference with vLLM

📦 llmcompressor – vLLM向け高速・柔軟なLLM量子化ツール

概要 – llmcompressor は、vLLM ランタイムでの効率的な推論のために大規模言語モデルのチェックポイントを準備するPythonライブラリです。幅広い量子化アルゴリズム(重みのみ、アクティベーション、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に変換し、パープレキシティを維持しつつVRAMを70%以上削減。
巨大なMoEモデル(例:Qwen‑3.8‑2.4T)を制限されたハードウェアで実行 REAP エキスパートプルーニング + NVFP4パイプラインを使用し、量子化前に重要度の低いエキスパートを削除。
多くのモデルに対して高速な量子化パイプラインが必要 TritonアクセラレーションによるGPTQとバッチ処理により、エンドツーエンドの時間を数日から数時間に短縮。
既存のHugging‑Faceワークフローを維持したい AutoModelForCausalLM / AutoTokenizer と直接連携し、vLLMが LLM(<path>) で読み込める標準的な compressed‑tensors チェックポイントを出力。

⚙️ 主な機能(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
  • プロジェクト