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-4B Q4_K_M: F2 guard rejects the CUDA path on GB10 at the first decode position (cosine 0.8675); 0.70.3 too, sm_89 passes #4958
On a GB10 (sm_121), the F2 CPU-parity guard rejects the CUDA path for Qwen3.5-4B Q4_K_M at position 64. That is the first decode step after the 64-position batched prefill. The serve then falls back to CPU, so apr code on this model and host runs on CPU.
Backend: GPU (CUDA, NVIDIA GB10, 122502 MB VRAM) [qwen35 hybrid forward, #3090]
F2 guard: validating on this run (no receipt for this model) [source=fresh]
warning: GPU output diverges from CPU at position 64 (argmax 74455 != 74455, cosine 0.8675); min cosine 0.8675, validated via batched prefill — falling back to CPU
warning: GPU (CUDA) qwen35 path rejected, falling back to CPU: the F2 CPU-parity guard rejected the GPU path
Cosine 0.8675 is below F2_CATASTROPHIC_COSINE (0.90), so the guard is right to refuse.
It is not a regression since 0.70.3
serve child
host
model
F2
main-based build c24c648bd
GB10, driver 590.48.01
4B
reject, pos 64, cos 0.8675
main-based build de984eb49 (earlier)
GB10
4B
reject, pos 64, cos 0.8675
released 0.70.3 (95f64ba14)
GB10
4B
reject, pos 64, cos 0.8675
c24c648bd
GB10
Qwen3.5-9B Q4_K_M
pass, 65 positions
c24c648bd
RTX 4090 (sm_89), driver 580.119.02
4B, same file
pass, 65 positions
The model file is the same on both hosts: sha256 00fe7986ff5f6b463e62455821146049db6f9313603938a70800d1fb69ef11a4.
The prompt is the same on every row. It is the exact apr code request (fixture system prompt with APR_CONFIG set to an empty dir), and the driver binary is the same.
The swap row changed only the serve child. It is the released 0.70.3 binary, and the GPU line above is its own stderr.
F2 runs fresh every time: each run uses an empty APR_F2_RECEIPT_DIR.
The failure is deterministic: three runs gave the same position and the same cosine to four digits.
It depends on the prompt. A shorter, hand-built prompt passes F2 on the same GB10 and model, so this repro needs the full apr code prompt.
A second, smaller defect: the message
f2_divergence_msg (crates/aprender-serve/src/infer/inference_result.rs) always prints argmax {gpu} != {cpu}. Here both are 74455. The rejection is on cosine alone, but the line reads as an argmax mismatch. When the two match, it should say so, for example argmax 74455 (agrees), cosine 0.8675 < 0.90, and name the floor that fired.
Repro
The harness is on branch fix/3719-apr-code-qwen35-cuda-071. That branch is not yet in a PR, because it waits for a slot.
Parked at the cop's order (E3 was 10/9): unlinked from E3 #3994, milestone 0.71.0 -> 0.71.1, owner apr-4918 kept. It re-enters E3 when an E3 child closes. GB10-only, idle since 2026-10-09 16:34Z.
Work not yet on origin: 3 local commits (60c1195, 2ac48d3, 7fb7221) sit on branch fix/4958-gb10-prefill in apr-4918's worktree. apr-4918 is asked to push that branch (branch only, no PR) at its next ticket boundary so the work is not lost.
Update from apr-4918: the branch push is held until a local gate is green (fmt, clippy cuda, 4B CPU test, queued on intel lane S), ETA 05:30Z. A home path added in a test is fixed in f97f988. The branch will be pushed branch-only, no PR.
merged into #5317 (master ticket for epic #4381; triage rule 7b, 2026-10-14). It is a checklist row there; reopen this issue when work on it starts or its PR opens.
Activity
noahgift commentedon Oct 10, 2026
Parked at the cop's order (E3 was 10/9): unlinked from E3 #3994, milestone 0.71.0 -> 0.71.1, owner apr-4918 kept. It re-enters E3 when an E3 child closes. GB10-only, idle since 2026-10-09 16:34Z.
Work not yet on origin: 3 local commits (60c1195, 2ac48d3, 7fb7221) sit on branch fix/4958-gb10-prefill in apr-4918's worktree. apr-4918 is asked to push that branch (branch only, no PR) at its next ticket boundary so the work is not lost.
noahgift commentedon Oct 10, 2026
Update from apr-4918: the branch push is held until a local gate is green (fmt, clippy cuda, 4B CPU test, queued on intel lane S), ETA 05:30Z. A home path added in a test is fixed in f97f988. The branch will be pushed branch-only, no PR.
noahgift commentedon Oct 14, 2026
merged into #5317 (master ticket for epic #4381; triage rule 7b, 2026-10-14). It is a checklist row there; reopen this issue when work on it starts or its PR opens.