[ROCm][CI] Bump ROCk base to ROCm 10.0 (#55246)

Signed-off-by: Rohan Potdar <rohan.potdar@amd.com> Co-authored-by: Randall Smith <Randall.Smith@amd.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

Rohan Potdar committed Sep 3, 2026 at 22:38 UTC 156050598eea0bb1124b9c106b22ba4a8c56f82a
2 files changed +26 -53
.buildkite/release-pipeline.yaml
+3 -3
@@ -1085,10 +1085,10 @@ steps:
1085 agents:
1086 queue: small_cpu_queue_release
1087 commands:
1088 - - "bash .buildkite/scripts/push-nightly-builds-rocm.sh rock rocm714"
1088 + - "bash .buildkite/scripts/push-nightly-builds-rocm.sh rock rocm100"
1089 # Clean up old nightly builds (keep only last 14)
1090 - - "bash .buildkite/scripts/cleanup-nightly-builds.sh nightly-rocm714- vllm/vllm-openai-rocm"
1091 - - "bash .buildkite/scripts/cleanup-nightly-builds.sh base-nightly-rocm714- vllm/vllm-openai-rocm"
1090 + - "bash .buildkite/scripts/cleanup-nightly-builds.sh nightly-rocm100- vllm/vllm-openai-rocm"
1091 + - "bash .buildkite/scripts/cleanup-nightly-builds.sh base-nightly-rocm100- vllm/vllm-openai-rocm"
1092 plugins:
1093 - docker-login#v3.0.0:
1094 username: vllmbot
docker/Dockerfile.rock_base
+23 -50
@@ -1,13 +1,12 @@
1 ARG BASE_IMAGE=ubuntu:22.04
2 ARG PYTHON_VERSION=3.12
3 -ARG TORCH_VERSION=2.12.0+rocm7.14.0
4 -ARG TORCHVISION_VERSION=0.27.0+rocm7.14.0
5 -ARG TORCHAUDIO_VERSION=2.11.0+rocm7.14.0
6 -ARG TRITON_BRANCH="f0b55c07da61c71775bef6d1a15ebf846430ac75" # release/internal/3.7.x as of 08/13
7 -ARG TRITON_REPO="https://github.com/ROCm/triton.git"
3 +ARG TORCH_VERSION=2.12.0+rocm10.0.0
4 +ARG TORCHVISION_VERSION=0.27.0+rocm10.0.0
5 +ARG TORCHAUDIO_VERSION=2.11.0+rocm10.0.0
6 +ARG TRITON_VERSION=3.8.0+git4cff872c.rocm10.0.0
7 ARG FA_BRANCH="0e60e394"
8 ARG FA_REPO="https://github.com/Dao-AILab/flash-attention.git"
10 -ARG AITER_BRANCH="v0.1.19"
9 +ARG AITER_BRANCH="v0.1.21.post1"
10 ARG AITER_REPO="https://github.com/ROCm/aiter.git"
11 ARG MORI_BRANCH="f95cd5e0ca7b730f92f9ffdfb358484d6965d9f7" # TheRock compatible v1.1.0
12 ARG MORI_REPO="https://github.com/ROCm/mori.git"
@@ -15,9 +14,9 @@ ARG MORI_REPO="https://github.com/ROCm/mori.git"
14
15 # TheRock configuration
16 ARG SITE_PACKAGES=/usr/local/lib/python${PYTHON_VERSION}/dist-packages
18 -ARG ROCM_RELEASE_WHEELS_MULTIARCH_URL="https://repo.amd.com/rocm/whl-multi-arch/" # For pre-built GPU images, packages, etc.
19 -ARG ROCM_NIGHTLY_WHEELS_MULTIARCH_URL="https://rocm.nightlies.amd.com/whl-multi-arch/" # For torch, triton, etc. wheels with latest fixes.
20 -ARG ROCM_SDK_VERSION=7.14.0
17 +ARG ROCM_RELEASE_WHEELS_MULTIARCH_URL="https://stable.repo.amd.com/rocm/whl-next/" # For pre-built GPU images, packages, etc.
18 +ARG ROCM_NIGHTLY_WHEELS_MULTIARCH_URL="https://nightly.repo.amd.com/rocm/whl-next/" # For torch, triton, etc. wheels with latest fixes.
19 +ARG ROCM_SDK_VERSION=10.0.0
20
21 # Build configuration
22 ARG PYTORCH_ROCM_ARCH="gfx90a;gfx942;gfx950;gfx1100;gfx1101;gfx1200;gfx1201;gfx1150;gfx1151"
@@ -89,16 +88,19 @@ RUN pip install --index-url ${ROCM_RELEASE_WHEELS_MULTIARCH_URL} \
88 && rocm-sdk init
89
90 # Install PyTorch wheels (nightly for latest torch, release as fallback)
91 +# Triton is pinned here rather than left to torch's Requires-Dist, so a wheel bump that
92 +# moves the triton torch wants fails resolution instead of quietly changing compilers.
93 ARG TORCH_VERSION
94 ARG TORCHAUDIO_VERSION
95 ARG TORCHVISION_VERSION
96 +ARG TRITON_VERSION
97 RUN pip install \
98 --index-url ${ROCM_RELEASE_WHEELS_MULTIARCH_URL} \
99 --extra-index-url ${ROCM_NIGHTLY_WHEELS_MULTIARCH_URL} \
100 "torch==${TORCH_VERSION}" \
101 "torchaudio==${TORCHAUDIO_VERSION}" \
100 - "torchvision==${TORCHVISION_VERSION}"
101 -RUN python3 -c "import torch; print(f'torch={torch.__version__}, hip={torch.version.hip}')"
102 + "torchvision==${TORCHVISION_VERSION}" \
103 + "triton==${TRITON_VERSION}"
104
105 # Install the AMD-compiled device kernels corresponding to PYTORCH_ROCM_ARCH:
106
@@ -185,20 +187,6 @@ ENV SCCACHE_S3_NO_CREDENTIALS=${USE_SCCACHE:+${SCCACHE_S3_NO_CREDENTIALS}}
187 ENV SCCACHE_IDLE_TIMEOUT=${USE_SCCACHE:+0}
188
189
188 -###
189 -### Triton Build
190 -###
191 -FROM base AS build_triton
192 -ARG TRITON_BRANCH
193 -ARG TRITON_REPO
194 -RUN git clone ${TRITON_REPO}
195 -RUN cd triton \
196 - && git checkout ${TRITON_BRANCH} \
197 - && if [ ! -f setup.py ]; then cd python; fi \
198 - && python3 setup.py bdist_wheel --dist-dir=dist \
199 - && mkdir -p /app/install && cp dist/*.whl /app/install
200 -
201 -
190 ###
191 ### MORI Build
192 ###
@@ -245,8 +233,8 @@ RUN git clone --recursive --branch ${AITER_BRANCH} ${AITER_REPO}
233 RUN cd aiter \
234 && git submodule update --init --recursive \
235 && pip install -r requirements.txt
248 -# AITER_USE_SYSTEM_TRITON keeps setup.py off the index triton, which would
249 -# otherwise displace the one we built.
236 +# AITER_USE_SYSTEM_TRITON keeps setup.py from resolving its own triton, which would
237 +# displace the pinned one already installed in base.
238 RUN pip install pyyaml && cd aiter \
239 && if [ "$USE_SCCACHE" = "1" ]; then \
240 export HIP_CLANG_PATH=/opt/sccache-wrappers \
@@ -262,12 +250,10 @@ RUN mkdir -p /app/install && cp /app/aiter/dist/*.whl /app/install
250 ### Final Build
251 ###
252
265 -# Wheel release stage -
253 +# Wheel release stage -
254 # only includes dependencies used by wheel release pipeline
255 FROM base AS debs_wheel_release
256 RUN mkdir /app/debs
269 -RUN --mount=type=bind,from=build_triton,src=/app/install/,target=/install \
270 - cp /install/*.whl /app/debs
257 RUN --mount=type=bind,from=build_fa,src=/app/install/,target=/install \
258 cp /install/*.whl /app/debs
259 RUN --mount=type=bind,from=build_aiter,src=/app/install/,target=/install \
@@ -275,8 +261,6 @@ RUN --mount=type=bind,from=build_aiter,src=/app/install/,target=/install \
261
262 FROM base AS debs
263 RUN mkdir /app/debs
278 -RUN --mount=type=bind,from=build_triton,src=/app/install/,target=/install \
279 - cp /install/*.whl /app/debs
264 RUN --mount=type=bind,from=build_fa,src=/app/install/,target=/install \
265 cp /install/*.whl /app/debs
266 RUN --mount=type=bind,from=build_aiter,src=/app/install/,target=/install \
@@ -286,22 +270,15 @@ RUN --mount=type=bind,from=build_mori,src=/app/install/,target=/install \
270
271 FROM base AS final
272
289 -# Remove the torch wheel's Requires-Dist: triton entry in METADATA and the SHA
290 -# hash (its optional) from RECORD. These will cause Python to reinstall
291 -# Triton and a constraints file can't fix it. This doesn't exist for source
292 -# builds, so it wasn't needed there.
293 -RUN TORCH_DIST_INFO=$(ls -d ${SITE_PACKAGES}/torch-*.dist-info) \
294 - && grep -q '^Requires-Dist: triton' "$TORCH_DIST_INFO/METADATA" \
295 - && sed -i '/^Requires-Dist: triton/d' "$TORCH_DIST_INFO/METADATA" \
296 - && sed -i "s|^\(${TORCH_DIST_INFO##*/}/METADATA\),.*|\1,,|" "$TORCH_DIST_INFO/RECORD"
297 -
298 -# Other wheels first, so they resolve against the index triton. Ours goes in last
299 -# with --no-deps, where it can't pull the resolver anywhere.
273 +# torch 2.12 implicitly attaches rocprofiler-sdk; its queue interposition hangs at HSA
274 +# teardown, so disable it. TODO: drop once ROCm's stock rocprofiler carries the fix.
275 +ENV ROCPROFILER_QUEUE_INTERPOSITION=0
276 +
277 +ARG TRITON_VERSION
278 RUN --mount=type=bind,from=debs,src=/app/debs,target=/install \
301 - pip install $(ls /install/*.whl | grep -v '/triton-') \
302 - && pip install --no-deps --force-reinstall /install/triton-*.whl \
303 - # With the pin gone this must be clean, so any complaint is real.
279 + pip install /install/*.whl \
280 && ! pip check 2>&1 | grep -iE '^(torch|triton) ' \
281 + && test "$(pip show triton | awk '/^Version:/ {print $2}')" = "${TRITON_VERSION}" \
282 # Create a constraints file to protect the versions we need, especially
283 # triton, requirements will try to reinstall repeatedly.
284 && pip list --format=freeze \
@@ -321,8 +298,6 @@ ARG TORCHAUDIO_VERSION
298 ARG TORCHVISION_VERSION
299 ARG PYTORCH_ROCM_ARCH
300 ARG AITER_ROCM_ARCH
324 -ARG TRITON_BRANCH
325 -ARG TRITON_REPO
301 ARG FA_BRANCH
302 ARG FA_REPO
303 ARG AITER_BRANCH
@@ -338,8 +313,6 @@ RUN echo "BASE_IMAGE: ${BASE_IMAGE}" > /app/versions.txt \
313 && echo "TORCHVISION_VERSION: ${TORCHVISION_VERSION}" >> /app/versions.txt \
314 && echo "PYTORCH_ROCM_ARCH: ${PYTORCH_ROCM_ARCH}" >> /app/versions.txt \
315 && echo "AITER_ROCM_ARCH: ${AITER_ROCM_ARCH}" >> /app/versions.txt \
341 - && echo "TRITON_BRANCH: ${TRITON_BRANCH}" >> /app/versions.txt \
342 - && echo "TRITON_REPO: ${TRITON_REPO}" >> /app/versions.txt \
316 && echo "FA_BRANCH: ${FA_BRANCH}" >> /app/versions.txt \
317 && echo "FA_REPO: ${FA_REPO}" >> /app/versions.txt \
318 && echo "AITER_BRANCH: ${AITER_BRANCH}" >> /app/versions.txt \