Skip to content

HRX: decode_split_next_q8 gives wrong, nondeterministic attention at short context (up to 3.66 nats between identical requests) #140

Description

@bong-water-water-bong

Greedy decode on HRX0 gives different output across identical runs (same seed, temperature 0, fresh process). The same runs on Vulkan0 are identical every time.

Repro (strixhalo, llama.cpp pin 83e1c41, HRX build): run the command below 5 times and compare the md5 of each output.

llama-completion -m Qwen3-0.6B-Q4_K_M.gguf --device HRX0 -ngl 99 -c 2048 -n 24 --temp 0 --seed 1 -no-cnv -p "The capital of France is"
run set (5 runs each, Qwen3-0.6B Q4_K_M) distinct outputs
default 2 (4 × 460e86, 1 × d2a6c4)
GGML_HRX_DISABLE_DISPATCH=decode_split 1
GGML_HRX_DISABLE_DISPATCH=fused 1

ZAYA1-8B Q4_K_M behaves the same way: 2 of 3 runs identical. Prefill is unaffected, and perplexity at batch 512 is stable.

Where. With the decode-split dispatch disabled the output is deterministic, so it comes from flash_attention_decode_split_next_q8 (context under 2048, so the multi-pass path from #123 isn't involved). Two readings, not yet told apart:

What would tell them apart: the logits of two differing runs at the first divergent step. A difference around 1e-3 means rounding; larger means a real race. A fixed-order reduction would make it deterministic either way.

Found while A/B-testing a ZAYA graph change on HRX: the change looked like it altered HRX decode output until repeated identical runs showed the baseline varies too.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions