You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Qwen3.5 batched prefill has no f32 dequant for IQ2_XXS, IQ3_S, IQ3_XXS, Q2_K: apr run --gpu exits 14 on Qwen3.5-0.8B-UD-IQ2_XXS #4952
Sub-ticket of #3953. apr run --gpu on Qwen3.5-0.8B-UD-IQ2_XXS.gguf exits 14 at main9259972. It fails closed: generation falls back to the CPU, and --gpu refuses to call that a success.
Cause
The Qwen3.5 batched prefill dequantizes every projection weight to f32 (qwen35_dequant_f32, crates/aprender-serve/src/cuda/executor/gdn_prefill_ops.rs) before its GEMM.
It does this in every APR_QWEN35_PREFILL_GEMM mode. The f16 mode caches an f16 copy of each weight, but it builds that copy from the same f32 dequant.
APR_QWEN35_SESSION_PREFILL=per-token does not avoid it either, because the parity probe always runs the batched prefill.
qwen35_dequant_f32 has device kernels for Q4_K, Q5_K, Q6_K, Q8_0, F16 and IQ4_XS. Any other type returns InvalidParameter("no f32 dequant kernel").
This model holds five types with no prefill dequant. The decode GEMVs for all five are on main. #3953's "four types" counted the missing GEMVs; IQ3_S already had a GEMV but has no dequant.
Decided by a planted quorum round (3 of 3 counted lanes, degraded: same-family): the IQ2_S dequant lands alone under #3953, and the other four go here, started at once, not deferred.
Landed in #5131, merge commit 5f8f904 on main. The Qwen3.5 batched prefill now has f32 dequant kernels for IQ2_S, IQ2_XXS, IQ3_S, IQ3_XXS and Q2_K, so apr run --gpu on Qwen3.5-0.8B-UD-IQ2_XXS.gguf no longer exits 14.
GB10 device tests (--features cuda): 893 passed, 0 failed, 0 SKIP lines. Every real tensor of each type in the model (sha256 a369165c…53e54) is bit-exact against the CPU oracle: IQ2_XXS 95, IQ3_XXS 24, IQ3_S 5, Q2_K 3, IQ2_S 5.
Planted faults: all 16 turned at least one test RED, and the restored tree is GREEN (868 passed).
sm_89 RTX 4060 Laptop:apr run --gpu … --trace exited 0 with Backend: GPU (CUDA, NVIDIA GeForce RTX 4060 Laptop GPU …) and batched prefill: 12 tokens in 13 ms (… attention cuBLAS f32).
Activity
ci(lab): jetson fast-verbs build at -j 2 for the 8 GB Orin
ci(jetson-nightly): no paths in the public log; device proof per verb
style(cuda): rustfmt the include!d #4952 dequant files
noahgift commentedon Oct 11, 2026
Landed in #5131, merge commit 5f8f904 on
main. The Qwen3.5 batched prefill now has f32 dequant kernels for IQ2_S, IQ2_XXS, IQ3_S, IQ3_XXS and Q2_K, soapr run --gpuonQwen3.5-0.8B-UD-IQ2_XXS.ggufno longer exits 14.Receipts, all measured on the tree #5131 merged:
--features cuda): 893 passed, 0 failed, 0 SKIP lines. Every real tensor of each type in the model (sha256a369165c…53e54) is bit-exact against the CPU oracle: IQ2_XXS 95, IQ3_XXS 24, IQ3_S 5, Q2_K 3, IQ2_S 5.apr run --gpu … --traceexited 0 withBackend: GPU (CUDA, NVIDIA GeForce RTX 4060 Laptop GPU …)andbatched prefill: 12 tokens in 13 ms (… attention cuBLAS f32).apr, sha256d50193db49f3fcad7c3cce62d4fc49fd652e1197b27da6e2e14101a20256672e.apr run --gpu … --traceexited 0 withBackend: GPU (CUDA, NVIDIA GeForce RTX 4090, 24035 MB VRAM), the F2 guard passed fresh, andbatched prefill: 12 tokens in 4 ms (2722 tok/s …). Receipt: fix(cuda): Qwen3.5 batched prefill f32 dequants for IQ2_S, IQ2_XXS, IQ3_S, IQ3_XXS and Q2_K #5120 (comment)Follow-up: #5119, the Q2_K kernel gives NaN on a non-finite
d/dminwhere the CPU gives 0.fix(cuda): Qwen3.5 batched prefill f32 dequants for IQ2_S, IQ2_XXS, I…
test(cuda): prefill dequants vs the CPU oracle on NaN/Inf scales (#5119)