Skip to content

Eval bug: qwen4exp / deepseek-v4 abort at first decode on Vulkan (RADV, gfx1151) #29028

Description

@shikanime

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:

  1. 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
    
  2. 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::submitggml_backend_graph_computerpc_server::graph_compute.

Backtrace of the assert path (router child, verbatim frames): ggml_abortggml_backend_tensor_get_async (ggml-backend.cpp:283) → llama_context::decodellama_decodecommon_init_from_paramsserver_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)

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