Views
No views yet
| Weights | INT8, per-tensor, symmetric, static |
| Activations | INT8, per-tensor, symmetric, static |
| Algorithm | Qronos (arXiv:2505.11695) |
| Quark scheme | int8 |
| Expert path | unfused |
| Export | HF safetensors, real_quantized |
| Size | 40 GB (from 67 GB BF16) |
qwen3_5_moe recipe quantizes the routed MoE experts only — 30,720
linears (40 layers x 256 experts x 3 projections). 462 modules are excluded and remain
BF16:lm_head, model.visual.* (vision tower), mtp.*, *mlp.gate, *shared_expert_gate*, *.linear_attn.*, *.self_attn.*, *.shared_expert.*1python examples/torch/language_modeling/llm_ptq/quantize_quark.py \
2 --model_dir Qwen/Qwen3.6-35B-A3B \
3 --device cuda --data_type bfloat16 --model_attn_implementation eager \
4 --dataset pileval --num_calib_data 128 --seq_len 512 --batch_size 1 \
5 --quant_scheme int8 \
6 --quant_algo qronos --quant_algo_config_file qronos <config.json> \
7 --model_export hf_format --export_weight_format real_quantized \
8 --output_dir <out> --skip_evaluation0.13+50dac6e159a.pileval (mit-han-lab/pile-val-backup), 128 samples, seq_len=512.MODEL_ARCH.LLAMA and supports asymmetric INT4 per-group-32 weight-only on Llama2/Llama3, while this model is Qwen3_5MoeForConditionalGeneration. Safetensors is published instead.--preserve_fused_experts when reproducing this scheme. QuantBatchedExpertLinear.unfuse builds each per-expert child as QLayerConfig(weight=child_qspec) with no input qspec (quark/torch/quantization/nn/modules/quantize_fused_experts.py:235), so the activation quantizer is dropped and the exporter emits no input_scale — yielding a checkpoint that advertises static activations while shipping none. This one was built unfused and contains all 30,720 input_scale tensors.Qwen/Qwen3.6-35B-A3B).| Metric | bf16 baseline | this checkpoint | recovery |
|---|---|---|---|
| GSM8K flexible-extract | 0.3798 | 0.6694 | 176.3% |
| GSM8K strict-match | 0.3821 | 0.7149 | 187.1% |
| WikiText-2 word_perplexity | 8.1511 | 8.7258 | 93.4% |
max_gen_toks=256 truncated this thinking model's <think> traces before reaching an answer (fixed: raised to 2048); (2) a real, reproducible bug in vLLM's Triton implementation of the chunk_gated_delta_rule custom op on this ROCm build causes some bf16 generations to collapse into a fixed degenerate phrase and stop early -- confirmed via a working reference PyTorch implementation (transformers eager, no custom kernel) producing coherent output on the identical prompt/weights, and confirmed in both eager and CUDA-graph-compiled vLLM modes (ruling out graph capture as the cause). Workaround: compilation_config={"custom_ops": ["-chunk_gated_delta_rule"]} forces the correct fallback path. Cross-validated against a 150-example CPU ground-truth run for both base models -- the bug's net effect on the aggregate GSM8K score was small, so the baseline numbers above (measured with the workaround applied) should be reliable. Separately, several checkpoints in this family genuinely score well above the bf16 baseline on GSM8K (a 15-45 point jump in some cases). We verified this is real, not a measurement artifact: it persists identically with and without the kernel-bug workaround applied. It most likely reflects quantization noise suppressing this reasoning model's tendency to enter long, sometimes unproductive chains of self-questioning on the unquantized baseline -- not a genuine capability improvement from quantization. WikiText-2 perplexity (likelihood-based, not generation-based, and unaffected by either bug) shows the expected small regression from quantization and is the more trustworthy signal of quantization quality here.