Name and Version
llama.cpp 0.4.0, revs 18443257 and 96ffdc4. My build pin/config: pkgs/llama-cpp/default.nix (source rev + patches), and shikanime-labs/machines#1357 is the backend flip this issue motivated.
Operating systems
Linux (NixOS 26.11.20260829.d2f6794).
GGML backends
Vulkan (RADV) — fails as below. ROCm (HIP/rocblas), same rev, same GPU — qwen4exp passes (model loads and decodes: 8-token completion, ~19 tok/s, no asserts, no device loss). deepseek-v4 on ROCm: untested.
Hardware
AMD Ryzen AI Max+ 395 / Radeon 8060S (gfx1151), 128 GB unified LPDDR5X (UMA) (Minisforum MS-S1 MAX)
Models
- qwen4exp:
unsloth/Qwen3.8-Flash-Next-GGUF, revision UD-Q4_K_XL
- deepseek-v4:
lmstudio-community/DeepSeek-V4-Flash-0731-GGUF, revision MXFP4
Problem description & steps to reproduce
On AMD Strix Halo (Radeon 8060S iGPU, gfx1151, RADV), any decode of qwen4exp (Qwen3.8-Flash-Next) or deepseek-v4 (DeepSeek-V4-Flash) fails. The same build and GGUF of qwen4exp runs cleanly on the same GPU with the ROCm backend (deepseek-v4 not yet retried on ROCm).
Failure modes on Vulkan/RADV:
-
Full offload (--n-gpu-layers 999, both archs): weights load to 100%, then the first llama_context::decode aborts:
/build/source/ggml/src/ggml-backend.cpp:283: GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor read out of bounds") failed
-
Partial offload (deepseek-v4, --n-gpu-layers 48): the assert is bypassed, weights load, and the first graph compute loses the device:
terminate called after throwing an instance of 'vk::DeviceLostError'
what(): vk::Queue::submit: ErrorDeviceLost
Worker process dies with SIGSEGV (exit 139). Backtrace: vk_queue_handle_unsynchronized::submit → ggml_backend_graph_compute → rpc_server::graph_compute.
Backtrace of the assert path (router child, verbatim frames): ggml_abort → ggml_backend_tensor_get_async (ggml-backend.cpp:283) → llama_context::decode → llama_decode → common_init_from_params → server_context_impl::load_model.
Reproduced identically: over RPC (Vulkan device held by a worker) and node-local; with and without --no-warmup; with and without --fit off; on two revs (above), the newer of which equals master at test time.
Older-arch models (qwen3.8-27b) run continuously on the same RADV device without incident, so the defect is specific to these new-arch graphs.
The Kubernetes manifests: shikanime-labs/manifests/apps/llama-cpp and shikanime-labs/manifests/apps/llama-cpp-rpc
Steps to reproduce:
llama-server -hf unsloth/Qwen3.8-Flash-Next-GGUF:UD-Q4_K_XL --n-gpu-layers 999 -c 2048
# send any single completion; the ggml-backend.cpp:283 abort fires at first decode
DeviceLost variant: lmstudio-community DeepSeek-V4-Flash MXFP4 GGUF with --n-gpu-layers 48.
First Bad Commit
Unknown. Both tested revs fail; the newer (96ffdc4) equals master HEAD at test time, so this reproduces on current master.
Relevant log output
Assert path (full offload, first decode):
/build/source/ggml/src/ggml-backend.cpp:283: GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor read out of bounds") failed
DeviceLost path (deepseek-v4, --n-gpu-layers 48, worker SIGSEGV exit 139):
terminate called after throwing an instance of 'vk::DeviceLostError'
what(): vk::Queue::submit: ErrorDeviceLost
Related but distinct (checked before filing)
Name and Version
llama.cpp 0.4.0, revs
18443257and96ffdc4. My build pin/config: pkgs/llama-cpp/default.nix (source rev + patches), and shikanime-labs/machines#1357 is the backend flip this issue motivated.Operating systems
Linux (NixOS 26.11.20260829.d2f6794).
GGML backends
Vulkan (RADV) — fails as below. ROCm (HIP/rocblas), same rev, same GPU — qwen4exp passes (model loads and decodes: 8-token completion, ~19 tok/s, no asserts, no device loss). deepseek-v4 on ROCm: untested.
Hardware
AMD Ryzen AI Max+ 395 / Radeon 8060S (gfx1151), 128 GB unified LPDDR5X (UMA) (Minisforum MS-S1 MAX)
Models
unsloth/Qwen3.8-Flash-Next-GGUF, revisionUD-Q4_K_XLlmstudio-community/DeepSeek-V4-Flash-0731-GGUF, revisionMXFP4Problem description & steps to reproduce
On AMD Strix Halo (Radeon 8060S iGPU, gfx1151, RADV), any decode of qwen4exp (Qwen3.8-Flash-Next) or deepseek-v4 (DeepSeek-V4-Flash) fails. The same build and GGUF of qwen4exp runs cleanly on the same GPU with the ROCm backend (deepseek-v4 not yet retried on ROCm).
Failure modes on Vulkan/RADV:
Full offload (
--n-gpu-layers 999, both archs): weights load to 100%, then the firstllama_context::decodeaborts:Partial offload (deepseek-v4,
--n-gpu-layers 48): the assert is bypassed, weights load, and the first graph compute loses the device:Worker process dies with SIGSEGV (exit 139). Backtrace:
vk_queue_handle_unsynchronized::submit→ggml_backend_graph_compute→rpc_server::graph_compute.Backtrace of the assert path (router child, verbatim frames):
ggml_abort→ggml_backend_tensor_get_async(ggml-backend.cpp:283) →llama_context::decode→llama_decode→common_init_from_params→server_context_impl::load_model.Reproduced identically: over RPC (Vulkan device held by a worker) and node-local; with and without
--no-warmup; with and without--fit off; on two revs (above), the newer of which equals master at test time.Older-arch models (qwen3.8-27b) run continuously on the same RADV device without incident, so the defect is specific to these new-arch graphs.
The Kubernetes manifests: shikanime-labs/manifests/apps/llama-cpp and shikanime-labs/manifests/apps/llama-cpp-rpc
Steps to reproduce:
DeviceLost variant: lmstudio-community DeepSeek-V4-Flash MXFP4 GGUF with
--n-gpu-layers 48.First Bad Commit
Unknown. Both tested revs fail; the newer (
96ffdc4) equals master HEAD at test time, so this reproduces on current master.Relevant log output
Assert path (full offload, first decode):
DeviceLost path (deepseek-v4,
--n-gpu-layers 48, worker SIGSEGV exit 139):Related but distinct (checked before filing)
common_speculative_processrunsllama_decode(ctx_dft)after every prefill ubatch #27306: RADV/gfx1151 DeviceLost, but mid-prefill under draft-MTP draft decodes, process survives as a zombie. Mine: first decode, no speculative decoding, process dies.//////), no crash.