Views
No views yet
quantization_config at build time,
not guessed. No calibration dataset is needed (dynamic activation scheme): only weights are
quantized, block-wise, from their own value range. Roughly 56% of the source bf16 size
(~31 GB vs ~55 GB).embed_tokens, lm_head, and the Gated-DeltaNet
SSM-specific parameters (A_log, conv1d, dt_bias, internal norm). Everything else
(attention QKVO on full-attention layers, FFN, Gated-DeltaNet's own in_proj/out_proj
matrices) is quantized.ValueError: Weight output_partition_size = 48 is not divisible by weight quantization block_n = 128,
delete your local copy / re-download so you get the fixed config.json. Root cause: the
modules_to_not_convert list must use bare module paths (...linear_attn.in_proj_ba) --
sglang resolves fused GDN layers through their shard names (in_proj_b, in_proj_a),
so tensor-name-style entries (....weight) never match and a merged projection got FP8'd
despite being bf16 in the checkpoint. Weights were always correct and are unchanged.| What | Where | Result |
|---|---|---|
| Structural integrity | build time | Zero NaN/Inf; vision/MTP tensors byte-identical to the bf16 source; size ratio as expected |
transformers load + generation | A100 (auto-dequantizes to bf16 below compute capability 8.9) | Coherent output; token counts matched the bf16 model on a reasoning-loop repro -- i.e. validated on dequantized-bf16 compute, not native FP8 |
| Native FP8 execution under sglang | RTX PRO 6000 Blackwell Server Edition (sm_120), sglang nightly cu129 stack | Full construction + all 1599 tensors loaded; server came up healthy across five consecutive runs; a real chat completion returned generated text with default sampling parameters |
| MTP / speculative decoding (NEXTN) | same GPU | Draft head (Qwen3_5ForCausalLMMTP, fp8) loads and serves; the internal warmup request completes through the draft/verify pipeline |
| Parity check | same GPU | Qwen's own official FP8 release behaves identically through the identical pipeline (same stages, same failure points when the test GPU's environment interferes) |
| Task | Metric | BF16 source | FP8 build | Δ (FP8−BF16) |
|---|---|---|---|---|
| MMLU | acc | 0.8474 | 0.8462 | −0.0012 |
| HellaSwag | acc_norm | 0.7520 | 0.7480 | −0.0040 |
| ARC-Challenge | acc_norm | 0.6240 | 0.6180 | −0.0060 |
lm-evaluation-harness 0.4.12 · transformers 5.15.0 · torch 2.11.0+cu128--model hf) — no serving layer, no batching nondeterminismbfloat16 for both checkpoints · chat template OFF · 0-shot (--num_fewshot 0)--limit 500 (QUICK mode) · --batch_size 16 · --seed 12341python3 -m lm_eval \
2 --model hf \
3 --model_args pretrained=<CHECKPOINT>,dtype=bfloat16,trust_remote_code=True \
4 --tasks mmlu,hellaswag,arc_challenge \
5 --num_fewshot 0 \
6 --batch_size 16 \
7 --limit 500 \
8 --seed 1234 \
9 --output_path <OUT_DIR>pip install "kernels==0.16.0" — otherwise you'll hit ImportError: finegrained-fp8 kernel unavailable at the first FP8 linear layer.1python3 -m sglang.launch_server \
2 --model-path barozp/Qwen3.8-27B-Opus-Distill-v2-FP8 \
3 --trust-remote-code1python3 -m sglang.launch_server \
2 --model-path barozp/Qwen3.8-27B-Opus-Distill-v2-FP8 \
3 --trust-remote-code \
4 --attention-backend triton \
5 --disable-cuda-graph \
6 --sampling-backend pytorch1 --speculative-algorithm NEXTN \
2 --speculative-num-steps 3 \
3 --speculative-eagle-topk 1 \
4 --speculative-num-draft-tokens 41from transformers import AutoModelForCausalLM, AutoTokenizer
2import torch
3
4model = AutoModelForCausalLM.from_pretrained(
5 "barozp/Qwen3.8-27B-Opus-Distill-v2-FP8", dtype=torch.bfloat16, device_map="auto",
6)
7tokenizer = AutoTokenizer.from_pretrained("barozp/Qwen3.8-27B-Opus-Distill-v2-FP8")transformers will automatically dequantize to bf16
at load time (you'll see a warning) -- this still works correctly, it just won't give you
the FP8 memory/speed benefit.