Skip to content

Build Targets And Tags

Sixteen targets. Every published repository is under snoc-strix.fold-leaffish.ts.net:8080/rocm-pytorch/, elided below.

Each target emits three tags: a versioned one, :latest, and an immutable -g<sha> tag whenever VCS_REF is non-empty.

Target Repository Versioned tag
rocm-runtime rocm-runtime ${ROCM_VERSION}-${ARCH}
pytorch-src pytorch-src ${PYTORCH_VERSION} (no arch, no ROCm)
pytorch-base base ${ROCM_VERSION}-${PYTHON_VERSION}-${ARCH}
pytorch pytorch ${PYTORCH_VERSION}-${ROCM_VERSION}-${ARCH}
pytorch-wheel pytorch-wheel ${PYTORCH_VERSION}-${ROCM_VERSION}-${ARCH}
pytorch-run runtime ${PYTORCH_VERSION}-${ROCM_VERSION}-${ARCH}
pytorch-test pytorch ${PYTORCH_VERSION}-${ROCM_VERSION}-${ARCH}-test
triton-wheel triton-wheel ${TRITON_VERSION}-${ROCM_VERSION}
aiter-wheel aiter-wheel ${PYTORCH_VERSION}-${ROCM_VERSION}-${ARCH}
torchvision-wheel torchvision-wheel ${TORCHVISION_REF}-${ROCM_VERSION}-${ARCH}
cupy-wheel cupy-wheel ${CUPY_REF}-${ROCM_VERSION}-${ARCH}
nixl-wheel nixl-wheel ${NIXL_REF}-${ROCM_VERSION}-${ARCH}
vllm vllm ${VLLM_REF}-${ROCM_VERSION}-${ARCH}
vllm-wheel vllm-wheel ${VLLM_REF}-${ROCM_VERSION}-${ARCH}
lmcache lmcache ${LMCACHE_REF}-${ROCM_VERSION}-${ARCH}
lmcache-wheel lmcache-wheel ${LMCACHE_REF}-${ROCM_VERSION}-${ARCH}

With the current defaults that resolves to:

rocm-runtime:10.1.0-full-gfx950
base:10.1.0-full-3.14-gfx950
pytorch-src:2.15.0
pytorch:2.15.0-10.1.0-full-gfx950
pytorch-wheel:2.15.0-10.1.0-full-gfx950
runtime:2.15.0-10.1.0-full-gfx950
triton-wheel:3.9.0-10.1.0-full
aiter-wheel:2.15.0-10.1.0-full-gfx950
torchvision-wheel:v0.29.2-10.1.0-full-gfx950
cupy-wheel:v14.2.0-10.1.0-full-gfx950
nixl-wheel:v1.5.2-10.1.0-full-gfx950
vllm:v0.33.0-10.1.0-full-gfx950
vllm-wheel:v0.33.0-10.1.0-full-gfx950
lmcache:v0.5.7-10.1.0-full-gfx950
lmcache-wheel:v0.5.7-10.1.0-full-gfx950

make zot-tags REPO=rocm-pytorch/pytorch lists what is actually published.

Three Tags That Are Not What You Would Guess

triton-wheel carries no architecture and is version-prefixed. Triton is a compiler and publishes one noarch wheel, so the tag is 3.9.0-10.1.0-full. wheelhouse.py parses it without a gfx component.

pytorch-run publishes to runtime, with the architecture. It compiles nothing and takes no PYTORCH_ROCM_ARCH, but it COPYs the torch wheel out of pytorch, so what it ships is as architecture-specific as that wheel. Without the architecture in the tag a gfx1201 runtime overwrote the gfx950 one.

base carries the architecture now, and did not used to. It builds FROM rocm-runtime, which holds kernel libraries for one card only, so the apt and pip layers on top are architecture-independent while what is underneath them is not. Without the architecture in the tag a gfx950 base would overwrite a gfx1201 one exactly as runtime once did.

Groups

Group Members
default rocm-runtime, pytorch-src, pytorch-base, pytorch, pytorch-wheel, triton-wheel, aiter-wheel, torchvision-wheel, cupy-wheel, nixl-wheel, vllm, vllm-wheel, lmcache, lmcache-wheel
wheels pytorch-wheel, triton-wheel, aiter-wheel, nixl-wheel, torchvision-wheel, cupy-wheel, vllm-wheel, lmcache-wheel
serving torchvision-wheel, cupy-wheel, nixl-wheel, vllm, vllm-wheel, lmcache, lmcache-wheel

There is no all group. pytorch-test and pytorch-run are deliberately outside default — why. wheels is separate because each of its members builds FROM an image that must already be published, so the group cannot run against a cold registry. WHEEL_REPOS in the Makefile must match it; check-defaults.py fails CI if it drifts.

Dockerfiles

Every Dockerfile lives in docker/, and the build context is always the repository root.

File Produces
Dockerfile.base pytorch-base
Dockerfile.pytorch pytorch, pytorch-wheel, pytorch-test
Dockerfile.runtime pytorch-run
Dockerfile.triton triton-wheel
Dockerfile.aiter aiter-wheel
Dockerfile.torchvision torchvision-wheel
Dockerfile.cupy cupy-wheel
Dockerfile.nixl nixl-wheel
Dockerfile.vllm vllm, vllm-wheel
Dockerfile.lmcache lmcache, lmcache-wheel

A wheel target is the same Dockerfile built to its wheel stage, which is why each *-wheel inherits from its image target.

Image Lifecycle

flowchart LR
    up["rocm/dev-ubuntu-26.04:10.1.0-full"] --> base
    base["<b>base</b><br/>+ Python 3.14<br/>+ dev tools<br/>+ sccache client"]
    base --> pt["<b>pytorch</b><br/>built from source<br/>+ HIP/ROCm<br/>+ our triton wheel"]
    pt --> rt["<b>runtime</b><br/>torch wheel installed<br/>no build tools"]

Cache Repositories

Each target exports its layers to a *-cache repository, listed in Caching. make clean-cache removes only four of them, locally; the registry must be pruned separately.