QWQ-32B-INT8-W8A8

image/jpeg

Model Overview

  • Model Architecture: Transformers with RoPE, SwiGLU, RMSNorm, and Attention QKV bias
    • Input: Text
    • Output: Text
  • Model Optimizations:
    • Weight quantization: INT8
    • Activation quantization: INT8
  • Release Date: 3/13/2025

INT8 quantized version of QWQ-32B.

Model Optimizations

This model was obtained by quantizing the weights and activations of QWQ-32B to INT8 data type. This optimization reduces the number of bits used to represent weights and activations from 16 to 8, reducing GPU memory requirements (by approximately 50%) and increasing matrix-multiply compute throughput (by approximately 2x). Weight quantization also reduces disk size requirements by approximately 50%.

Only the weights and activations of the linear operators within transformers blocks are quantized. Weights are quantized using a symmetric per-channel scheme, whereas quantizations are quantized using a symmetric per-token scheme. The GPTQ algorithm is applied for quantization, as implemented in the llm-compressor library.

Use with vLLM

I deploy using the OpenAI-compatible vLLM Docker image, as shown in the example below.

#!/bin/bash

# Default values
NAME_SUFFIX=""
PORT=8010
GPUS="0,1"  # Default GPUs

# Parse command line arguments
while getopts "s:p:g:" opt; do
    case $opt in
        s) NAME_SUFFIX="$OPTARG";;    # suffix for container name
        p) PORT="$OPTARG";;          # port number
        g) GPUS="$OPTARG";;          # GPU devices (e.g., "2,3")
        ?) 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

No command line arguments are needed for the default configuration.

Creation

This model was created with llm-compressor by running the code snippet below. Credit to Neural Magic for the recipe.

## script copied from 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

# Load model
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)

# Configure the quantization algorithm and scheme
recipe = [
    SmoothQuantModifier(smoothing_strength=0.7),
    QuantizationModifier(
        targets="Linear",
        scheme="W8A8",
        ignore=["lm_head"],
        dampening_frac=0.1,
    ),
]

# Apply quantization
oneshot(
    model=model,
    dataset=ds, 
    recipe=recipe,
    max_seq_length=max_seq_len,
    num_calibration_samples=num_samples,
)

# Save to disk in compressed-tensors format
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}")

Usage Guidelines

Please reference the model card for QWQ-32B.

Evaluation & Accuracy

The model passes the vibe check, but no attempt was made to evaluate the quantized model for accuracy loss.

Downloads last month
368
Safetensors
Model size
32.8B params
Tensor type
BF16
·
I8
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for ospatch/QwQ-32B-INT8-W8A8

Base model

Qwen/Qwen2.5-32B
Finetuned
Qwen/QwQ-32B
Quantized
(137)
this model