x4 pair round two: pure Vulkan changes nothing, and the first verdict was wrong
Asked whether Vulkan on both devices unlocks the split. It does not: the per-tensor design aborts byte-identically, because the gate is not the driver mix but `--override-tensor` — `has_tensor_overrides()` is a required term of the scheduler's `pipeline_parallel` flag (llama-context.cpp:433, the only place in the tree that reads it), and that flag sets `n_copies` in `ggml_backend_sched_new`. With `n_copies == 1` a pre-allocated weight on a non-primary device has no backend and the graph aborts. Chasing it exposed a harness artifact that invalidated the earlier conclusion: llama-bench splits a device LIST with `/` and SWEEP values with `,`, so `-dev CUDA0,Vulkan1` was two single-device runs all along (and `-ts 0.85,0.15` two sweep values, i.e. device 0 takes everything — which is where the bogus OOM came from). With the correct syntax two-device splits work in both flavours: pure Vulkan -dev Vulkan1/Vulkan0 -ts 0.85/0.15 -> 27.55 tok/s @64k (12.8 GiB on the 3090) cross-vendor -dev CUDA0/Vulkan1 -ts 0.15/0.85 -> 27.23 tok/s @64k, pp512 268.5 (15.0 GiB) iGPU alone 25.77 tok/s @64k, pp512 231.8 +7 % decode, +16 % prefill — real but not a regime change, and it costs the 3090 ~15 GiB, which this fleet spends on its only vision endpoint. The design's premise still fails: whole layers carry their experts (1.62 GiB each), the 12 attention layers are spread every 4th, and the 32.8 GiB PLE must stay on the main device, so KV cannot be consolidated on the 3090. Also records the evening's incident (a dead rootless podman pause process took all container management down; `podman system migrate` panics in 5.7.0; reboot repaired it) and the netavark host-address lesson from the hermes 502.
This commit is contained in:
@@ -196,9 +196,10 @@ The LLM inference fleet on the two hosts. Full index:
|
||||
- [[qwen3.8-strix-optimizations]] — Strix Halo tuning notes
|
||||
- [[x4-pair-experiment]] — what a 3090 + Strix Halo combination can and cannot
|
||||
do in mainline llama.cpp (measured 2026-09-16): the tensor inventory that
|
||||
decides a split, the scheduler limits that kill a cross-backend one, and the
|
||||
iGPU-only result that matches halogen's decode rate while leaving the 3090
|
||||
idle — for 116 of the host's 121 GiB
|
||||
decides a split, the one flag (`-ot`) that kills per-tensor placement across
|
||||
devices, the two-device layer splits that DO work (pure-Vulkan and cross-vendor
|
||||
CUDA+Vulkan, +7 % decode at 64k), and the harness-parsing trap that made the
|
||||
first round of measurements say otherwise
|
||||
|
||||
### Memory and Hardware
|
||||
|
||||
|
||||
Reference in New Issue
Block a user