Int8 quant for optimized performance on Ampere.
1uv venv --python 3.12
2
3uv pip install sglang[all] --find-links https://flashinfer.ai/whl/cu124/torch2.5/flashinfer-python
4
5uv run python -m sglang.launch_server --model-path nytopop/Qwen3-14B.w8a8 --quantization w8a8_int8 --reasoning-parser qwen3
1from transformers import AutoTokenizer, AutoModelForCausalLM
2from datasets import load_dataset
3from llmcompressor import oneshot
4from llmcompressor.modifiers.quantization import GPTQModifier
5from llmcompressor.modifiers.smoothquant import SmoothQuantModifier
6from llmcompressor.transformers.compression.helpers import calculate_offload_device_map
7
8model_id = "Qwen/Qwen3-14B"
9model_out = "Qwen3-14B.w8a8"
10
11num_samples = 256
12max_seq_len = 4096
13
14tokenizer = AutoTokenizer.from_pretrained(model_id)
15
16def preprocess_fn(example):
17 return {"text": tokenizer.apply_chat_template(example["messages"], add_generation_prompt=False, tokenize=False)}
18
19ds = load_dataset("neuralmagic/LLM_compression_calibration", split="train")
20ds = ds.shuffle().select(range(num_samples))
21ds = ds.map(preprocess_fn)
22
23device_map = calculate_offload_device_map(
24 model_id, reserve_for_hessians=True, num_gpus=1, torch_dtype="bfloat16"
25)
26
27for k, v in device_map.items():
28 if v == 'disk':
29 device_map[k] = 'cpu'
30
31model = AutoModelForCausalLM.from_pretrained(
32 model_id,
33 device_map=device_map,
34 torch_dtype="bfloat16",
35)
36
37recipe = [
38 SmoothQuantModifier(smoothing_strength=0.7),
39 GPTQModifier(sequential=True,targets="Linear",scheme="W8A8",ignore=["lm_head"],dampening_frac=0.01),
40]
41
42oneshot(
43 model=model,
44 dataset=ds,
45 recipe=recipe,
46 max_seq_length=max_seq_len,
47 num_calibration_samples=num_samples,
48 output_dir=model_out,
49)