Downloads · 30 days
33
32% of all-time downloads
soyrsoyr/Qwen3.6-27B-FP8-dynamic
Qwen3.6-27B-FP8-dynamic is a image-text-to-text model from soyrsoyr. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for transformers. The card lists the license as apache-2.0.
FP8-dynamic (W8A8) quantization of Qwen/Qwen3.6-27B, produced with llm-compressor and served with vLLM.
Downloads · 30 days
33
32% of all-time downloads
All-time downloads
103
Public
Parameters
27.4B
35.9 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors35.9 GB · 100%
How the weights are stored.
F8_E4M318.8B · 69%
From the Hugging Face model README
FP8-dynamic (W8A8) quantization of Qwen/Qwen3.6-27B, produced with llm-compressor and served with vLLM.
FP8_DYNAMIC (weights quantized to FP8 (E4M3),
per-channel, round-to-nearest; activations quantized to FP8 per-token with
dynamic scales computed at runtime, no calibration data required).Linear layers. The vision
tower (re:.*visual.*), the hybrid linear-attention layers
(re:.*linear_attn.*), the MoE router (re:.*mlp.gate), and lm_head stay
in the original precision.vision_config) is saved, so it loads directly in vLLM.vllm serve soyrsoyr/Qwen3.6-27B-FP8-dynamic
from vllm import LLM, SamplingParams
llm = LLM(model="soyrsoyr/Qwen3.6-27B-FP8-dynamic")
out = llm.generate(["The capital of France is"], SamplingParams(max_tokens=32))
print(out[0].outputs[0].text)
Quantized with llm-compressor. Because current vLLM only registers the
multimodal Qwen3_5ForConditionalGeneration architecture, the model is loaded
with AutoModelForImageTextToText and the full model is saved (text
quantized, vision tower kept in bf16).
from transformers import AutoModelForImageTextToText, AutoTokenizer
from llmcompressor import oneshot
from llmcompressor.modifiers.quantization import QuantizationModifier
MODEL_ID = "Qwen/Qwen3.6-27B"
model = AutoModelForImageTextToText.from_pretrained(MODEL_ID, dtype="bfloat16")
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
recipe = QuantizationModifier(
targets="Linear",
scheme="FP8_DYNAMIC",
ignore=["lm_head", "re:.*visual.*", "re:.*linear_attn.*", "re:.*mlp.gate$"],
)
oneshot(model=model, recipe=recipe) # data-free
model.save_pretrained("Qwen3.6-27B-FP8-dynamic", save_compressed=True, save_original_format=False)
tokenizer.save_pretrained("Qwen3.6-27B-FP8-dynamic")
Evaluated with lm-evaluation-harness (OpenLLM Leaderboard v1) and lighteval (generative reasoning suite), both via the vLLM backend.
| Benchmark (OpenLLM v1) | Metric | Qwen3.6-27B (base) | FP8-dynamic | Recovery |
|---|---|---|---|---|
| ARC-Challenge (25-shot) | acc_norm | 48.04 | 49.06 | 102.1% |
| HellaSwag (10-shot) | acc_norm | 71.25 | 71.63 | 100.5% |
| TruthfulQA-mc2 (0-shot) | acc | 55.06 | 55.65 | 101.1% |
| Winogrande (5-shot) | acc | 77.19 | 77.43 | 100.3% |
| Average | 62.89 | 63.44 | 100.9% |
FP8-dynamic recovers 100.9% of the base model's average score on these tasks, i.e. quantization is effectively lossless here.
MMLU and GSM8k are omitted: Qwen3.6-27B is a reasoning ("thinking") model, and
under the OpenLLM v1 protocol both collapse to a harness artifact rather than a
real score. GSM8k is generative and its chain-of-thought is truncated by the
default max_gen_toks before the final answer, and MMLU's letter-answer
loglikelihood is measured at the position where the model wants to emit its
<think> block, so every subject lands at random chance (MMLU scored 23.02 for
the base model and 23.05 for FP8, both at the 25% four-way chance level, which
confirms it is a measurement artifact and not quantization damage). Math and
knowledge are better captured by the generative reasoning suite (AIME, MATH-500,
GPQA).
The eval that actually reflects a thinking model: single-sample pass@1, model allowed to reason (temperature 0.6, top_p 0.95, up to 32k generated tokens), scored with lighteval.
| Benchmark | Metric | Qwen3.6-27B (base) | FP8-dynamic | Recovery |
|---|---|---|---|---|
| AIME-24 | pass@1 | 83.33 | 73.33 | 88.0% |
| AIME-25 | pass@1 | 73.33 | 73.33 | 100.0% |
| MATH-500 | pass@1 | 86.60 | 86.20 | 99.5% |
| Average | 81.09 | 77.62 | 95.7% |
AIME-25 and MATH-500 are effectively lossless (100.0% and 99.5%). The AIME-24 number is a single-sample (pass@1, n=1) score over only 30 problems, so its standard error is large (~7 points, i.e. roughly a 2-problem swing); the 10-point gap there is within that sampling noise rather than clear quantization damage. For a lower-variance figure one would average over multiple samples (e.g. avg@64), which was out of scope for this single-GPU run. GPQA-diamond will be included once dataset access is granted (it is a gated dataset on the Hub).
OpenLLM v1 (lm-evaluation-harness):
lm_eval --model vllm \
--model_args pretrained=soyrsoyr/Qwen3.6-27B-FP8-dynamic,dtype=auto,gpu_memory_utilization=0.8,max_model_len=16384,max_num_seqs=256 \
--tasks arc_challenge --num_fewshot 25 --apply_chat_template --fewshot_as_multiturn --batch_size auto
# ...repeated for hellaswag (10), truthfulqa_mc2 (0), winogrande (5)
Reasoning suite (lighteval), scored pass@1 with the model's own chat template:
lighteval vllm \
"model_name=soyrsoyr/Qwen3.6-27B-FP8-dynamic,dtype=auto,max_model_length=40960,generation_parameters={temperature:0.6,top_p:0.95,top_k:20,max_new_tokens:32768}" \
"aime24|0,aime25|0,math_500|0" --save-details