Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

vLLM recipes (pick a path)

WIP: Stack picks and tok/s figures are community-reported (#vllm-rdna, Sep 2026). See Verification status. Prefer this page when you want “which image / which model / how many cards” — not a kernel deep-dive.

Discord keeps asking the same questions: which Docker stack, which Hugging Face weights, and whether 1× V620 is enough. This page consolidates those answers. Details for env vars and CUDA graphs live on Configuration; fork history on vLLM forks.

Which stack?

GoalUseImage / repo
Day-to-day serving with RDNA HIP kernelsHub -extrasblivioniag/vllm-rdna:v0.31.0-extras (same digest as v0.31.0-extras-rocm7.14.0) — Onboard / Running. #announcements (11 Oct 2026). Older v0.27.1-extras* / v0.28.0-extras* stay on Hub for A/B.
Latest Flash-Next / kernels newer than the bakeHost venv or Hub 0.31Clone opengfx1030/vllm-rdna (rdna_extras = v0.31.0) + Host venv, then tools/rdna/serve_rdna.sh. The 0.31 Hub tag already served Flash-Next MTP-2 (BF16 + INT4-disk) — Onboard.
Tuned 27B / 122B presets, host needs only amdgpu + DockerRecipe book containerghcr.io/leapdragon/vllm-rdna2-recipe:0.27.1-rocm7.2.3-gfx1030 (preset:…) — mirror opengfx1030/vllm-rdna2-recipe
Qwen3.8 Flash-Next on 4× V620Hub 0.31 or host venv + launchertools/rdna/serve_rdna.sh RECIPE=flashnext-mtp2 (or flashnext / flashnext-mtp0). HEAD also has flashnext-dflash2 (#132) — MTP-2 still the daily path. Default branch is rdna_extras (v0.31.0). Docker: blivioniag/vllm-rdna:v0.31.0-extras — overview

#vllm-rdna (Sep 2026): the recipe repo is treated as a parts pile (compose/env/patches against pristine vLLM 0.27.1). New Flash-Next work lives on opengfx1030/vllm-rdna rdna_extras (Sep 14–15 cherry-picks); vllm-rdna2-qwen is the older published container. Official kernel development is the same org extras repo — Hub -extras tags may lag HEAD until bake retargets.

Do not mix host ROCm userspace into the recipe container — the image carries its own stack. Mounting host ROCm into it is a common break (recipe TROUBLESHOOTING.md).

Pick by card count

CardsCommunity starting point (#vllm-rdna)
1× V620 (32 GB)Prefer MoE (e.g. Qwen3.6 35B-A3B, Ornith-class) over dense 27B when prefill matters. Dense Qwen3.8-27B AWQ works for day-to-day chat; expect weaker PP than MoE. Flash-Next is not a 1-card path without heavy CPU/DRAM offload (weights ~60+ GB class + PLE). GLM-5.3-Flash is an 8× community path, not 1-card even with 256 GB host RAM — GLM-5.3-Flash.
2× V620Recipe TP=2 presets for 27B GPTQ / AWQ / MixedInt4, or Hub -extras / a host-venv clone with --tensor-parallel-size 2. #vllm-rdna (Sep 26): one host built vllm-rdna from source and served cyankiwi 27B AWQ-INT4 TP=2 — community table. #vllm-rdna (Oct 6): Qwen3.8-27B fp16 TP=2 + MTP ~40–48 t/s single-stream; a Swift 1.5 27B tune on the same layout ~48 t/s single / ~70 t/s across two instances — not Flash-Next. Flash-Next on 2 cards still needs host RAM for experts: HEAD after #146 (28 Oct) has tools/rdna/mono/serve_offload.sh — 2× offload. That is not a Hub / serve_rdna.sh recipe. llama.cpp RAM/MoE offload remains the non-HEAD path (#vllm-rdna Sep 14) — llama.cpp 2×.
3× V620vLLM tensor parallel needs an even world size. Use pipeline parallel 3 (PP=3, TP=1). Current rdna_extras HEAD: RECIPE=flashnext-pp3 / flashnext-pp3-mtp2 — PP3 recipes. Hub v0.31.0-extras (11 Oct) lags those recipes. Older pins corrupted PP3 output — corruption. Pin b33f9b6 (Sep 19) boots graphs but dies on small captured prefill — KeyError. llama.cpp can still report TP across three cards (TP3 has crash notes).
4× V620Best vLLM path for Flash-Next is still TP=4. Prefer latest rdna_extras with merged vllm-rdna#17 (23 Sep) — fast stack. #vllm-rdna (Sep 19): PP=4 can look great on 32k prefill then tank decode. #vllm-rdna (Sep 21): #15-only public merge reproduced ~1.1–1.45k PP. Prefer TP4 over PP4. Hub v0.31.0-extras is the current extras bake. Needs verify on a second host. Same gfx1030 class: #benchmarks (Oct 10) 4× W6800X Duo, vLLM 0.30.0 TP4, Qwen3.8-27B fp16, ALU 0.9.4, MTP-2 — community table. Not a V620 serve line.
6× V620Flash-Next minimum is 3 cards. #vllm-rdna (Sep 24): start with PP=3 + TP=2 or PP=6; keep TP power-of-2 (avoid PP=2 + TP=3 as the first try). Clone HEAD + host venv — Hub tags lag. Disagg prefill/decode across switches is open #23 (Needs verify).
8× V620Not a Flash-Next recipe. #vllm-rdna (Sep 30): community GLM-5.3-Flash AWQ on a local vLLM 0.30 fork, TP=8, P2P off, 150 W — GLM-5.3-Flash. Day-to-day org extras are now Hub v0.31.0-extras (11 Oct); that GLM serve was still a local 0.30 fork, not Hub — Needs verify.

Also see What fits well on V620.

#vllm-rdna (Oct 8), for llama.cpp migrants: --pipeline-parallel-size N is the vLLM analogue of llama.cpp layer split (-sm layer); --tensor-parallel-size N is the analogue of tensor split (-sm row / -ts). vLLM can combine them (example: TP=2 + PP=2 on four cards). Prefer power-of-2 TP. Flash-Next on four cards still wants TP=4, not PP=4 (PP=4 can look great on long prefill then tank decode — table above).

Gemma 4 note

Community reports Gemma 4 ~26B still fails or is unfinished on current gfx1030 vLLM paths (#vllm-rdna, Sep 13 2026). Prefer Qwen / Ornith until someone posts a working recipe.

Model cheat sheet

ModelCardsStackNotes
cyankiwi/Qwen3.8-27B-AWQ-INT41–4×Hub -extras or recipe presetCurrent day-to-day 27B pick in #vllm-rdna (Sep 13 2026). compressed-tensors AWQ.
btbtyler09/Qwen3.8-27B-GPTQ-4bit2×+Recipe preset:qwen38-27b-gptq or Hub -extrasRecipe reference preset; native GPTQ → RDNA2W4A16 on -extras.
Pilcothink/Qwen3.8-27B-MixedInt4-AutoRound2×Recipe builds/AutoRound MixedInt4 sibling in the recipe book.
Intel/Qwen3.5-122B-A10B-int4-AutoRound3–4×Recipe builds/ (not a one-line preset)MoE 122B — needs recipe wrapper / weight prep; see build BUILD.md.
Qwen3.6 35B-A3B (FP16 / community quants)1–4×Hub -extrasMoE sweet spot; MTP helps c=1, hurts high concurrency — Quantization.
wtdcode/Qwen3.8-Flash-Next-AWQ-W4A16 + primitive-ai/Qwen3.8-Flash-Next-PLE-quant4×Flash-Next forkProduction Flash-Next weights + PLE sidecar in #vllm-rdna.
Intel/Qwen3.8-Flash-Next-W4A16-AutoRound4×rdna_extras HEAD (QSA #15) / draft #5W4A16 + original BF16 CPU PLE. QSA live-context merge: overview. Not Hub -extras.
cyankiwi/Qwen3.8-Flash-Next-AWQ-INT44×Experimental#vllm-rdna (Oct 11): incoherent output on one 4× host — prefer wtdcode AWQ-W4A16 + primitive-ai PLE.
ukisai/Swift-1.5-Qwen3.8-Flash-Next-W4A16-AWQ3–4×rdna_extras HEAD / host venv#vllm-rdna Sep 25–26 — shorter-reasoning AWQ. 3× community ~1300 PP / ~45 TG. Two-card fit unconfirmed. Swift.
wtdcode/GLM-5.3-Flash-AWQ-W4A168×Local vLLM 0.30 fork (not Hub / not rdna_extras HEAD)#vllm-rdna Sep 30 — TP=8, MTP-2, P2P off. Notes.

Small-VRAM experiment: Ornith 9B EXL3 (~6.8 GB) vs AWQ (~9 GB) — experimental, not in published -extras tags yet. See Quantization.


docker pull docker.io/blivioniag/vllm-rdna:v0.31.0-extras

docker run -it --rm \
  --device /dev/kfd --device /dev/dri \
  --group-add video --group-add render \
  --security-opt seccomp=unconfined \
  --ipc host \
  -p 8000:8000 \
  -v "$HOME/.cache/huggingface:/root/.cache/huggingface" \
  docker.io/blivioniag/vllm-rdna:v0.31.0-extras \
  vllm serve cyankiwi/Qwen3.8-27B-AWQ-INT4 \
    --dtype float16 \
    --max-model-len 8192 \
    --language-model-only --skip-mm-profiling --trust-remote-code

Short V620 walkthrough: Onboard on V620.

  • Add --tensor-parallel-size N for multi-GPU. Enable PCIe P2P when possible.
  • Prefer --dtype float16. Mount Triton / torch-compile caches for faster restarts — Configuration.
  • Force the native W4A16 path when needed: VLLM_DISABLED_KERNELS=ExllamaLinearKernel,TritonW4A16LinearKernel — confirm Using RDNA2W4A16LinearKernel in logs.

Full env block and Compose (GPTQ + MTP): Configuration.

Hub -extras TP4 Qwen3.8-27B AWQ

Sanitized from a #vllm-rdna (Aug 31 2026) bench recipe on 4× V620 with working P2P / custom all-reduce. Drop the custom-AR block if P2P is broken on your board — use VLLM_DISABLE_CUSTOM_ALL_REDUCE=1 instead (Configuration).

export VLLM_USE_V2_MODEL_RUNNER=1
export VLLM_ROCM_USE_AITER=0
export VLLM_ROCM_USE_AITER_MOE=0
export FLASH_ATTENTION_TRITON_AMD_ENABLE=TRUE
export VLLM_RDNA_FORCE_FP16=1
export VLLM_USE_RDNA2_FA=1
export TORCH_BLAS_PREFER_HIPBLASLT=0
export PYTORCH_TUNABLEOP_ENABLED=1
export PYTORCH_TUNABLEOP_HIPBLASLT_ENABLED=0
export VLLM_WORKER_MULTIPROC_METHOD=spawn
export VLLM_BATCH_INVARIANT=0
export GPU_MAX_HW_QUEUES=2

# Only when GPU↔GPU P2P works:
export VLLM_FORCE_CUSTOM_ALL_REDUCE=1
export NCCL_P2P_LEVEL=pix
export RCCL_P2P_NET_DISABLE=1
export RCCL_P2P_BATCH_ENABLE=1
export NCCL_PROTO=Simple
export RCCL_MSCCL_ENABLE=0

cd /tmp   # avoid sys.path collisions with a local vllm checkout
vllm serve cyankiwi/Qwen3.8-27B-AWQ-INT4 \
  --port 8000 \
  --tensor-parallel-size 4 \
  --max-model-len 20480 \
  --max-num-seqs 8 \
  --gpu-memory-utilization 0.88 \
  --dtype float16 \
  --language-model-only --skip-mm-profiling --trust-remote-code \
  --enable-prefix-caching --enable-chunked-prefill \
  --compilation-config '{"cudagraph_mode": "FULL_AND_PIECEWISE", "compile_ranges_endpoints": []}'

Host-venv TP=2 Qwen3.8-27B AWQ (community, Sep 26)

#vllm-rdna (Sep 26): one host cloned opengfx1030/vllm-rdna and built from source (not a Hub tag), then served cyankiwi AWQ-INT4 at TP=2. Same short test on both models; answers coherent, no NaNs. Community / Needs verify.

Qwen3-14B, TP=2Qwen3.8-27B, TP=2
Weights per GPU4.69 GiB9.73 GiB
KV cache (logged)266k tokens (4k context)159k tokens (32k context)
Engine start39 s425 s (first run only)
4 prompts at once88.3 tok/s46.9 tok/s
One prompt, decode59.5 tok/s29.5 tok/s

Day-to-day 27B on 4 cards still uses the TP4 block or a recipe preset. This table is only the two-card / source-build snapshot.

#vllm-rdna (Oct 6): a different 2× host ran unquantized fp16 Qwen3.8-27B at TP=2 with MTP and reported ~40–48 t/s single-stream. A shorter-reasoning Swift 1.5 27B (not the Flash-Next Swift packs) on the same card count was ~48 t/s single-stream and ~70 t/s across two instances. Community / Needs verify. Concurrency notes for wvSplitK vs stacked LLMM1: troubleshooting.


Path B — Recipe container (27B / 122B presets)

Fastest path when you want the recipe book’s measured knobs without installing ROCm on the host:

IMG=ghcr.io/leapdragon/vllm-rdna2-recipe:0.27.1-rocm7.2.3-gfx1030
docker pull "$IMG"
docker run --rm "$IMG" list-presets

docker run -d --name vllm-rdna2 --network=host \
  --device /dev/kfd --device /dev/dri \
  --group-add "$(getent group render | cut -d: -f3)" \
  --group-add "$(getent group video | cut -d: -f3)" \
  --ipc=host --ulimit memlock=-1 --security-opt seccomp=unconfined \
  -e ROCR_VISIBLE_DEVICES=0,1 \
  -v "$HOME/.cache/huggingface:/root/.cache/huggingface" \
  "$IMG" preset:qwen38-27b-gptq
KnobMeaning
preset:qwen38-27b-gptqReference GPTQ 27B (TP=2). AWQ / MixedInt4 siblings are also presets.
ROCR_VISIBLE_DEVICESExactly two indices for TP=2 presets.
MTP=0..3Speculative depth (default 2 in the recipe image).
list-presets / DRYRUN=1Enumerate presets or print the resolved vllm serve line.

First boot cold-compiles for ~10–15 minutes; mount /compile-cache and Triton caches for ~3 min warm boots — see the recipe containers/README.md. Community ballpark on 2× V620: ~40–49 tok/s decode when TunableOp rows are seeded; ~27 t/s flat if they are missing (recipe troubleshooting).

122B builds need the repo wrapper / one-time weight prep — not a bare preset: one-liner.


Path C — Flash-Next

Flash-Next (Qwen3.8, PLE sidecar, 3×/4× V620 serve lines, AutoRound, DeepSeek-V4) lives on Flash-Next. This page stays the picker for Hub -extras and the recipe-container presets.

GLM-5.3-Flash (community, Needs verify)

#vllm-rdna (Sep 30): a community 8× V620 host served public wtdcode/GLM-5.3-Flash-AWQ-W4A16 (AWQ W4A16 of zai-org/GLM-5.3-Flash; routed experts INT4, attention / vision / MTP left BF16) on a local vLLM 0.30 fork. TP=8, MTP-2, P2P off (PLX), 150 W caps, dual-socket Broadwell-EP class. This is not Hub -extras and not rdna_extras HEAD.

Org draft opengfx1030/vllm-rdna#2 is a runtime-unverified Glm5Next load path on a side branch (later/glm53-flash-awq); HIP gates default off. #vllm-rdna (Sep 30): at that time day-to-day extras were still 0.28 and the maintainer paused the 0.30 rebase, inviting a PR of the community 0.30 work. #announcements (11 Oct 2026): day-to-day is now Hub v0.31.0-extras — re-check GLM on that line before treating the Sep 30 pause as current. V2 model runner can work on the local-fork line.

Community snapshot (one host — Needs verify):

MetricBefore local-fork workAfter
Decode~2.2 t/s~32 t/s
Prefill~50 t/s~320–500 t/s (others called this low vs Flash-Next; hoped ~1000)
Context—262k with vision; needle tests to 180k
Reliability—377 agent requests at 40–125k tokens: 0 failures / 0 GPU faults; 5–8 s TTFT with prefix cache

gfx1030-relevant lessons (do not treat the unpublished kernel list as a Hub recipe):

  • Serve --dtype float16, not bf16 — no bf16 hardware. Same quality; community +68% decode on this host.
  • Vision: MIOpen compiled the downsample conv per image size (3–4 min; killed the engine once). Community used conv-as-matmul (158 s → 4 ms). Separate from the Flash-Next max_pixels OOM — troubleshooting.
  • Indexer / tiled-fp8 / fused mHC / skinny-int4 MoE work lived on the local fork.

Not a drop-in for 4× Flash-Next hosts. #general (25 Oct): 1× V620 + host-RAM offload is also a poor fit. Community Maya snapshot ~200 PP / ~13 TG on one host (Needs verify, not recently rechecked). Public 18B active implies a theoretical decode ceiling around 30 t/s before MTP if experts stayed on-GPU; real offload will not get close.