🚀 QWQ-32B-INT8-W8A8
QWQ-32BのINT8量子化バージョンで、GPUメモリ要件を削減し、計算スループットを向上させます。

✨ 主な機能
モデル概要
- モデルアーキテクチャ:RoPE、SwiGLU、RMSNorm、およびAttention QKVバイアスを備えたTransformers
- モデル最適化:
- リリース日:2025年3月13日
このモデルは、QWQ-32B をINT8データ型に量子化したものです。
モデル最適化
このモデルは、QWQ-32B の重みと活性化をINT8データ型に量子化することで得られました。この最適化により、重みと活性化を表すビット数が16から8に減少し、GPUメモリ要件が約50%削減され、行列乗算の計算スループットが約2倍に増加します。重み量子化により、ディスクサイズ要件も約50%削減されます。
Transformerブロック内の線形演算子の重みと活性化のみが量子化されます。重みは対称的なチャネルごとのスキームを使用して量子化され、活性化は対称的なトークンごとのスキームを使用して量子化されます。量子化には、llm-compressor ライブラリで実装された GPTQ アルゴリズムが適用されます。
📦 インストール
vLLMでの使用
OpenAI互換の vLLM Dockerイメージを使用してデプロイする例を以下に示します。
#!/bin/bash
NAME_SUFFIX=""
PORT=8010
GPUS="0,1"
while getopts "s:p:g:" opt; do
case $opt in
s) NAME_SUFFIX="$OPTARG";;
p) PORT="$OPTARG";;
g) GPUS="$OPTARG";;
?) echo "Usage: $0 [-s suffix] [-p port] [-g gpus]"
exit 1;;
esac
done
model=ospatch/QwQ-32B-INT8-W8A8
volume=~/.cache/huggingface/hub
revision=main
version=latest
context=16384
base_name="vllm-qwq-int8"
container_name="${base_name}${NAME_SUFFIX}"
sudo docker run --restart=unless-stopped --name $container_name --runtime nvidia --gpus '"device='"$GPUS"'"' \
--shm-size 1g -p $PORT:8000 -e NCCL_P2P_DISABLE=1 -e HUGGING_FACE_HUB_TOKEN=<user_token> \
-v $volume:/root/.cache/huggingface/hub vllm/vllm-openai:$version --model $model \
--revision $revision --tensor-parallel-size 2 \
--gpu-memory-utilization 0.97 --max-model-len $context --enable-chunked-prefill
デフォルト設定では、コマンドライン引数は必要ありません。
💻 使用例
基本的な使用法
このモデルは、llm-compressor を使用して作成されました。以下のコードスニペットを実行することで作成できます。レシピは Neural Magic のものです。
from transformers import AutoModelForCausalLM, AutoTokenizer
from datasets import load_dataset
from llmcompressor.modifiers.quantization import QuantizationModifier
from llmcompressor.modifiers.smoothquant import SmoothQuantModifier
from llmcompressor.transformers import oneshot
from llmcompressor.transformers.compression.helpers import calculate_offload_device_map
model_stub = "Qwen/QwQ-32B"
model_name = model_stub.split("/")[-1]
num_samples = 1024
max_seq_len = 8192
tokenizer = AutoTokenizer.from_pretrained(model_stub)
device_map = calculate_offload_device_map(
model_stub,
reserve_for_hessians=True,
num_gpus=4,
torch_dtype="auto",
)
model = AutoModelForCausalLM.from_pretrained(
model_stub,
device_map=device_map,
torch_dtype="auto",
)
def preprocess_fn(example):
return {"text": tokenizer.apply_chat_template(example["messages"], add_generation_prompt=False, tokenize=False)}
ds = load_dataset("neuralmagic/LLM_compression_calibration", split="train")
ds = ds.map(preprocess_fn)
recipe = [
SmoothQuantModifier(smoothing_strength=0.7),
QuantizationModifier(
targets="Linear",
scheme="W8A8",
ignore=["lm_head"],
dampening_frac=0.1,
),
]
oneshot(
model=model,
dataset=ds,
recipe=recipe,
max_seq_length=max_seq_len,
num_calibration_samples=num_samples,
)
save_path = model_name + "-INT8-W8A8"
model.save_pretrained(save_path)
tokenizer.save_pretrained(save_path)
print(f"Model and tokenizer saved to: {save_path}")
📚 ドキュメント
使用ガイド
QWQ-32B のモデルカードを参照してください。
評価と精度
このモデルはバイブチェックに合格していますが、量子化モデルの精度損失の評価は行われていません。
📄 ライセンス
このモデルは、Apache-2.0ライセンスの下で提供されています。