A single OpenAI-compatible llama-server running the official Vulkan image
directly. Models are loaded from HuggingFace. All runtime flags are driven
from .env. No orchestrator.
.env— every tunable parameter (model, flags, paths, port, GPU GIDs)compose.yaml— thellamaservice + AMD/dev/dripassthrough + healthchecksetup-env.sh— resolves host-specific values (RENDER_GID,VIDEO_GID,HF_CACHE_DIR) and writes them into.env
# Resolves GPU group IDs and your HF cache dir, writes them into .env
bash setup-env.sh
docker compose up -dsetup-env.sh fills in:
RENDER_GID/VIDEO_GID— read fromgetent group render/videoHF_CACHE_DIR— set to$HOME/.cache/llama.cpp, created if missing; mounted into the container so downloads persist across restarts
Set HF_REPO and HF_FILE in .env:
HF_REPO=unsloth/Qwen3-Coder-30B-A3B-GGUF
HF_FILE=Qwen3-Coder-30B-A3B-Instruct-UD-Q4_K_XL.gguf
The file is downloaded on first start and cached in HF_CACHE_DIR — no
re-download on restart. For gated/private repos, uncomment HF_TOKEN in .env.
curl http://localhost:8080/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"x","messages":[{"role":"user","content":"hi"}]}'Edit .env, then:
docker compose up -dCompose recreates the container with the new parameters (full stop + reload, weights into VRAM, KV cache starts empty).
- Pin
BASE_TAGto a dated build (server-vulkan-bNNNN) for stability; seeghcr.io/ggml-org/llama.cpptags.server-vulkan-latestfloats. - The Vulkan image sometimes can't see the GPU until extra GL libs are present
(
libglvnd0 libgl1...). If it loads on CPU, that's the cause. -fa onon Vulkan can disable integer-dot on some builds (perf quirk, not a correctness issue). Benchmarkonvsoff.- The healthcheck assumes
curlexists in the image; the slim server image may not include it. Drop the block or add curl via a tiny Dockerfile if so. --slot-save-pathenables/slots/<id>/save|restoreso you can persist KV to disk manually; nothing automatic happens on a restart.