# ROCm Docker Image Update - February 2026 ## Issue Summary The custom-built ROCm container for llama-swap failed to build due to changes in the llama-swap repository structure: - UI directory changed from `ui` to `ui-svelte` - Build output changed from `ui/dist` to `proxy/ui_dist` - Go build was failing with "pattern ui_dist: no matching files found" ## Resolution Switched to using **official llama.cpp ROCm Docker images** which are now available since PR #18439 was merged on December 29, 2025. ### What Changed 1. **Base Image**: Now using `ghcr.io/ggml-org/llama.cpp:server-rocm` instead of building llama.cpp from source 2. **UI Build Path**: Updated to use `ui-svelte` directory (was `ui`) 3. **Simpler Build**: Removed custom llama.cpp compilation stage - official image already includes optimized ROCm build ### Benefits of Official Image - **Maintained by upstream**: Always up-to-date with latest llama.cpp ROCm optimizations - **Pre-compiled**: Faster build times, no need to compile llama.cpp from source - **Tested**: Official builds are tested by llama.cpp CI/CD - **Smaller Dockerfile**: Reduced from 4 stages to 3 stages ## Updated Dockerfile Structure ### Stage 1: UI Builder (Node.js) - Clones llama-swap repository - Builds UI from `ui-svelte` directory - Outputs to `proxy/ui_dist` ### Stage 2: Binary Builder (Go) - Copies llama-swap source with built UI - Compiles Go binary with `GOTOOLCHAIN=auto` ### Stage 3: Runtime (Official ROCm Image) - Based on `ghcr.io/ggml-org/llama.cpp:server-rocm` - Includes llama-server with ROCm support - Adds llama-swap binary - Creates non-root user with GPU access groups - Sets environment variables for AMD RX 6800 (gfx1030) ## Environment Variables ```bash HSA_OVERRIDE_GFX_VERSION=10.3.0 # RX 6800 compatibility ROCM_PATH=/opt/rocm HIP_VISIBLE_DEVICES=0 ``` ## GPU Access Groups - GID 187: `hostrender` group (render access) - GID 989: `hostvideo` group (kfd/video access) ## References - **Upstream Issue**: https://github.com/ggml-org/llama.cpp/issues/11913 - **Fix PR**: https://github.com/ggml-org/llama.cpp/pull/18439 - **llama-swap Repo**: https://github.com/mostlygeek/llama-swap - **Official ROCm Images**: `ghcr.io/ggml-org/llama.cpp:server-rocm` ## Testing After building, verify GPU detection: ```bash docker compose up llama-swap-amd -d docker compose exec llama-swap-amd rocminfo ``` Expected output should show AMD RX 6800 (gfx1030) device. ## Migration Notes If you had the old custom-built container running: 1. Stop the old container: `docker compose down llama-swap-amd` 2. Remove old image: `docker rmi miku-discord-llama-swap-amd` 3. Rebuild with new Dockerfile: `docker compose build llama-swap-amd` 4. Start new container: `docker compose up llama-swap-amd -d` Configuration files (`llama-swap-rocm-config.yaml`) remain unchanged.