许可证:apache-2.0
库名称:transformers
语言:
- 英文
基础模型:
- Qwen/QwQ-32B
标签:
- int8
- qwen2
- qwq
- vllm
基础模型关系:量化
流水线标签:文本生成
QWQ-32B-INT8-W8A8

模型概述
- 模型架构: 采用RoPE、SwiGLU、RMSNorm和Attention QKV偏置的Transformer
- 模型优化:
- 发布日期: 2025年3月13日
QWQ-32B的INT8量化版本。
模型优化
本模型通过对QWQ-32B的权重和激活进行INT8量化获得。
该优化将权重和激活的表示位数从16位降至8位,减少了GPU内存需求(约降低50%),并提升了矩阵乘法计算吞吐量(约提升2倍)。权重量化还使磁盘空间需求减少约50%。
仅对Transformer块内线性算子的权重和激活进行量化。权重采用逐通道对称量化方案,激活采用逐令牌对称量化方案。量化过程应用了GPTQ算法,由llm-compressor库实现。
与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 "用法: $0 [-s 后缀] [-p 端口] [-g gpu]"
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=<用户令牌> \
-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"模型和分词器保存至: {save_path}")
使用指南
请参考QWQ-32B的模型卡片。
评估与精度
模型通过基础验证,但未对量化后的精度损失进行专门评估。