Summary
When manually overriding LLAMA_IMAGE to point at a generic llama.cpp:server-vulkan image on an AMD host, model load fails with:
Internal Server Error ("Unable to find group render: no matching entries in group file")
Switching the same instance back to the ROCm image (server-rocm) loads the model successfully with no changes to host permissions.
Environment
- Host: TrueNAS SCALE (Docker, not k3s)
- GPU: 2x AMD RX 9060 XT (RDNA4 / gfx1200), ROCm-capable
- Host GIDs:
render = 107, video = 44 (confirmed via getent group)
/dev/dri/renderD128 and renderD129 owned by render group on host
- llamaMan spawns llama-server as a sibling container over the Docker socket, as documented
What I believe is happening
Per the README, GPU vendor auto-detection (GPU_TYPE) only recognizes cuda, rocm, and intel. There's no first-class vulkan vendor path. On my AMD host, the ROCm device-mapping path is used (attaches /dev/kfd + /dev/dri), but does not group_add the container to video/render — presumably because that's not required for the ROCm runtime itself.
However, the generic Vulkan/RADV image needs the container process to be a member of the render (and typically video) group to open the render node, per llama.cpp's own Docker guidance for AMD/RADV. Since LLAMA_IMAGE can be overridden independently of GPU_TYPE, selecting a Vulkan image while GPU_TYPE resolves to rocm results in a container with the device node mounted but no matching group membership, hence the render group lookup failure inside the container.
I found that manually forcing GPU_TYPE=intel (which does document requiring /dev/dri + video/render group access) works around the issue, since that appears to be the only vendor path that performs group_add. This isn't a real fix though — it repurposes a vendor path with unrelated semantics (e.g. GPU Devices selection is documented as unsupported under Intel Arc) just to get the group mapping.
Reproduction
- AMD ROCm host, llamaMan configured normally with
GPU_TYPE auto-detected as rocm.
- Override
LLAMA_IMAGE to a llama.cpp:server-vulkan-style image.
- Launch/load any model.
- Observe:
Internal Server Error ("Unable to find group render: no matching entries in group file").
- Revert
LLAMA_IMAGE to server-rocm (leave GPU_TYPE untouched) → loads fine.
- Workaround: set
GPU_TYPE=intel explicitly while keeping the Vulkan LLAMA_IMAGE → loads fine.
Request
Could Vulkan be supported as a proper first-class vendor path (e.g. GPU_TYPE=vulkan) that attaches /dev/dri and performs group_add for video/render (mirroring what's already done for Intel Arc), independent of whether the host GPU is AMD, Intel, or otherwise Vulkan-capable? This would let users on ROCm-unstable setups (e.g. current RDNA4/gfx1200 driver issues) fall back to Vulkan without hijacking the Intel Arc detection path.
Summary
When manually overriding
LLAMA_IMAGEto point at a genericllama.cpp:server-vulkanimage on an AMD host, model load fails with:Internal Server Error ("Unable to find group render: no matching entries in group file")Switching the same instance back to the ROCm image (
server-rocm) loads the model successfully with no changes to host permissions.Environment
render= 107,video= 44 (confirmed viagetent group)/dev/dri/renderD128andrenderD129owned byrendergroup on hostWhat I believe is happening
Per the README, GPU vendor auto-detection (
GPU_TYPE) only recognizescuda,rocm, andintel. There's no first-classvulkanvendor path. On my AMD host, the ROCm device-mapping path is used (attaches/dev/kfd+/dev/dri), but does notgroup_addthe container tovideo/render— presumably because that's not required for the ROCm runtime itself.However, the generic Vulkan/RADV image needs the container process to be a member of the
render(and typicallyvideo) group to open the render node, per llama.cpp's own Docker guidance for AMD/RADV. SinceLLAMA_IMAGEcan be overridden independently ofGPU_TYPE, selecting a Vulkan image whileGPU_TYPEresolves torocmresults in a container with the device node mounted but no matching group membership, hence therendergroup lookup failure inside the container.I found that manually forcing
GPU_TYPE=intel(which does document requiring/dev/dri+video/rendergroup access) works around the issue, since that appears to be the only vendor path that performsgroup_add. This isn't a real fix though — it repurposes a vendor path with unrelated semantics (e.g. GPU Devices selection is documented as unsupported under Intel Arc) just to get the group mapping.Reproduction
GPU_TYPEauto-detected asrocm.LLAMA_IMAGEto allama.cpp:server-vulkan-style image.Internal Server Error ("Unable to find group render: no matching entries in group file").LLAMA_IMAGEtoserver-rocm(leaveGPU_TYPEuntouched) → loads fine.GPU_TYPE=intelexplicitly while keeping the VulkanLLAMA_IMAGE→ loads fine.Request
Could Vulkan be supported as a proper first-class vendor path (e.g.
GPU_TYPE=vulkan) that attaches/dev/driand performsgroup_addforvideo/render(mirroring what's already done for Intel Arc), independent of whether the host GPU is AMD, Intel, or otherwise Vulkan-capable? This would let users on ROCm-unstable setups (e.g. current RDNA4/gfx1200 driver issues) fall back to Vulkan without hijacking the Intel Arc detection path.