A build-and-run record for vLLM from source on an AMD Strix Halo APU (Ryzen AI MAX+ 395, Radeon 8060S, gfx1151) against system ROCm 7.2.2 with AMD's gfx1151 nightly PyTorch wheels. This repo preserves the two build failures that matter, the source patches the model set required, and an honest account of why this stack was eventually parked in production in favor of llama.cpp.
What works: vLLM 0.22.1rc1.dev322+rocm722 builds from source on
Ubuntu 26.04 + ROCm 7.2.2 + Python 3.14 and serves quantized LLMs on a
Strix Halo APU.
The one-line fix: point ROCM_PATH and ROCM_HOME at the system
ROCm (/opt/rocm-7.2.2), not the pip-bundled ROCm SDK that ships inside
the nightly torch wheels. The pip SDK is a runtime, not a build SDK.
Why it was retired: For single-user interactive latency on a
unified-memory APU, llama.cpp fit the workload shape better. vLLM's
continuous-batching machinery pays off for multi-client throughput, not
batch-1 latency. See docs/LESSONS.md for the measured reasoning.
| Component | Version |
|---|---|
| APU | AMD Ryzen AI MAX+ 395 / Radeon 8060S (gfx1151) |
| System RAM / VRAM partition | 128 GB total; ~103 GiB visible to ROCm with the BIOS partition used here |
| OS | Ubuntu 26.04 LTS |
| Kernel | 7.0.0-22-generic |
| GCC | 15.2.0 |
| Python | 3.14.4 |
| System ROCm | 7.2.2 at /opt/rocm-7.2.2 (HIP 7.2.53211) |
| PyTorch | 2.12.0a0+rocm7.13.0a20260411 from https://rocm.nightlies.amd.com/v2/gfx1151/ |
| Triton | 3.7.0+git8108eb2c.rocm7.13.0a20260411 |
| vLLM source | upstream main, commit c9c1540e61 (2026-07-01) |
| vLLM built version | 0.22.1rc1.dev322+gc9c1540e6.d20260701.rocm722 |
There are no stable gfx1151 wheels; the nightly index is the only
source, and the tag rolls. The lockfiles in env/ pin a known-good
freeze from the working venv.
export VLLM_SRC="${VLLM_SRC:-/path/to/vllm-src}" # where to clone vLLM
export VENV="${VENV:-/path/to/venv-vllm}" # Python venv for the build
export ROCM_HOME="${ROCM_HOME:-/opt/rocm-7.2.2}" # system ROCm SDK
export MODEL="${MODEL:-/path/to/your/model}" # HF hub id or local pathscripts/build-vllm-rocm.shThis:
- Creates the venv and installs the gfx1151 nightly torch stack.
- Checks out vLLM commit
c9c1540e61. - Applies the two local patches in
patches/. - Builds with
ROCM_PATH=$ROCM_HOME. - Removes
tilelangand upgradestensorizer.
Do not shortcut this script — the ROCM_PATH fix, tilelang removal, and
tensorizer upgrade are all load-bearing. See docs/BUILD.md for the
full explanation.
scripts/vllm-serve.sh --port 8001Or, to run under systemd, copy systemd/vllm-openai.service and
systemd/env.example to /etc/vllm-openai/env, edit MODEL and any
other variables, then run:
sudo systemctl enable --now vllm-openai.service# List models
curl -s http://localhost:8001/v1/models | head -c 400
# One-line chat completion
curl -s http://localhost:8001/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"'"$(basename "$MODEL")"'","messages":[{"role":"user","content":"Say hello"}],"max_tokens":20}'After the build:
source "$VENV/bin/activate"
python -c "import vllm; print(vllm.__version__)" # expect ...rocm722 tag
python -c "import torch; print(torch.version.hip)" # expect 7.13.x runtime
python patches/patch_vllm.py --vllm-src "$VLLM_SRC" --check
pip show tilelang # expect *not* installedA smoke-test matrix from the working venv is in docs/LESSONS.md. The
logs in logs/ are the primary source for every build claim.
- No stable gfx1151 wheels. The nightly wheel index at
rocm.nightlies.amd.com/v2/gfx1151/is the only source; tags roll. - Python 3.14 dependency friction. vLLM pins
tensorizer==2.10.1, which breaks on 3.14; override to>=2.12.tilelangmust be uninstalled after every vLLM reinstall. - torch / ROCm symbol interposition. Nightly torch loads a bundled
librocm_smi64.so.1withRTLD_GLOBAL; patchtorch/_rocm_init.pyto usertld_global=Falseto avoid exit-time crashes when the system'slibrocm_smi64.so.7is also loaded. - FP8 is slow on gfx1151 (RDNA3.5 has no native FP8 arithmetic). Prefer AWQ / GPTQ / NF4 checkpoints.
--enforce-eageris required for the V1 engine on this stack, because torch.compile cache serialization fails to pickle across spawn-based workers.- Single-user latency is not vLLM's strength. This stack was retired in favor of llama.cpp for batch-1 interactive use on a unified-memory APU.
- All build claims trace to
logs/vllm-build-v2-rocm713-FAILED.logandlogs/vllm-build-v2-rocm722-SUCCESS.log. - Runtime claims trace to the build notes and
logs/vllm-service-final-crash.log. patches/patch_vllm.pyis idempotent and backs up files. Re-run--checkafter every upstream sync.env/contains apip freezelockfile and venv snapshot from the working environment; treat them as a known-good freeze, not a reproducibility contract.
PolyForm Noncommercial 1.0.0 — see LICENSE.
Required Notice: Copyright 2026 LucRoot (info@lucasroot.com).
Author: Dr. Lucas Root, Ph.D. — info@lucasroot.com