Skip to content

[ROCm][CI] Build and publish TheRock nightly docker images - #55014

Merged
dllehr-amd merged 5 commits into
vllm-project:mainfrom
Rohan138:rock-nightly-pipeline
Sep 4, 2026
Merged

dllehr-amd merged 5 commits into
vllm-project:mainfrom
Rohan138:rock-nightly-pipeline

Conversation

@Rohan138

@Rohan138 Rohan138 commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Purpose

docker/Dockerfile.rock_base and docker/Dockerfile.rock were added in #49925 but nothing references them. This duplicates ROCm release-pipeline Jobs 1 and 6 (plus the nightly publish) for them, producing on NIGHTLY=1, in the existing vllm/vllm-openai-rocm repo:

  • vllm/vllm-openai-rocm:base-nightly-rocm714 / -<commit>Dockerfile.rock_base
  • vllm/vllm-openai-rocm:nightly-rocm714 / -<commit>Dockerfile.rock --target vllm-openai

The TheRock images share the existing vllm/vllm-openai-rocm repo and are distinguished by a tag variant (rocm714, from ROCM_SDK_VERSION=7.14.0), leaving room for nightly-rocm714-ubuntu2404, nightly-rocm100, etc. as more TheRock variants land.

push-nightly-builds-rocm.sh takes [ECR_TAG_SUFFIX TAG_VARIANT] (both or neither): the repo is fixed to vllm/vllm-openai-rocm, no args publishes the ROCm apt build as :nightly (unchanged), and rock rocm714 publishes the TheRock build as :nightly-rocm714.

Notes for review:

  • ROCm Jobs 2–5 (wheel build/upload/index) are not duplicated — vllm-openai doesn't consume docker/context/base-wheels/, so the base step caches the ECR image only and skips the S3 wheel cache.
  • Cleanup prefix overlap: the existing ROCm cleanup uses startswith("nightly-"), which also matches nightly-rocm714-<commit>. The two variants therefore share a single 14-tag retention budget in the repo. The rock step cleans its own nightly-rocm714- / base-nightly-rocm714- prefixes, but until the plain-ROCm cleanup is tightened (or given a variant tag of its own), a burst of TheRock nightlies could evict plain ROCm ones early. Flagging rather than reworking the shared cleanup here.
  • Build steps are ungated like their ROCm counterparts, so they run on every release-pipeline build.
  • publish-release-images.sh is intentionally untouched — no latest/versioned TheRock release tag yet; that's a follow-up.

Draft: the image builds haven't been through Buildkite yet, and there are no docs changes. This builds on @AndreasKaratzas's "Harden ROCm nightly image publishing" commit (strict mode, BASE_ECR_IMAGE dry-run path, fail-hard metadata), which is preserved.

Not a duplicate: gh pr list --state open --search "Dockerfile.rock" / "vllm-openai-rock" / "TheRock" returns no PR wiring these Dockerfiles into a pipeline; #49925 that added them is merged, and the other open TheRock PRs (#47092, #53837) are test fixes.

AI assistance was used (Claude Code); the diff and reasoning have been reviewed by me and I own defending them in review.

Test Plan

CI-only change — no vLLM runtime code is touched, so there are no model/accuracy implications.

# YAML parses; the new group's inline scripts are valid bash after Buildkite $$ de-escaping.
python3 -c "import yaml; yaml.safe_load(open('.buildkite/release-pipeline.yaml'))"
shellcheck -s bash --format=gcc .buildkite/scripts/push-nightly-builds-rocm.sh

# Both invocations, docker/aws/buildkite-agent stubbed on PATH, base image via BASE_ECR_IMAGE:
BUILDKITE_COMMIT=deadbeef DRY_RUN=1 BASE_ECR_IMAGE=.../vllm-release-repo:key-rocm-base \
  bash .buildkite/scripts/push-nightly-builds-rocm.sh
BUILDKITE_COMMIT=deadbeef DRY_RUN=1 BASE_ECR_IMAGE=.../vllm-release-repo:key-rock-base \
  bash .buildkite/scripts/push-nightly-builds-rocm.sh rock rocm714

Test Result

YAML parses, shellcheck clean. No-arg invocation emits docker pull/tag/push targets identical to the pre-change ROCm behaviour (vllm/vllm-openai-rocm:{base-,}nightly{,-deadbeef}). rock rocm714 emits vllm/vllm-openai-rocm:{base-,}nightly-rocm714{,-deadbeef} from the -rock ECR images. Arg-count guards reject 1 and 3 args with exit 2.

Not yet run through Buildkite — neither Dockerfile has been built in CI; that is what this draft is for, and I will post the pipeline result here before marking it ready.

@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Team

Run ID: 413e87d6-b55b-46cd-9ca5-33dc7c632275

📥 Commits

Reviewing files that changed from the base of the PR and between 3c52c93 and 4d080cd.

📒 Files selected for processing (1)
  • .buildkite/release-pipeline.yaml

Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Summary

Summary by CodeRabbit

  • New Features

    • Added automated ROCk release builds for x86_64.
    • Added nightly ROCk image publishing to Docker Hub.
    • Added support for variant-specific ROCm nightly builds with customized image tags.
  • Improvements

    • Improved reuse of cached release base images.
    • Added stricter validation and clearer error handling for nightly publishing.
    • Added controlled local testing support for nightly image workflows.

Walkthrough

The PR adds a ROCk x86_64 release pipeline. It caches and reuses the ROCk base image in ECR, builds the release image, pushes a -rock tag, and publishes variant-aware nightly images to DockerHub.

Changes

ROCK release flow

Layer / File(s) Summary
ROCK base and release image pipeline
.buildkite/release-pipeline.yaml
Buildkite caches the ROCk base image in ECR, builds the ROCk release image, stores its metadata, and pushes a commit-specific -rock tag.
Variant-aware nightly publishing
.buildkite/scripts/push-nightly-builds-rocm.sh
The script validates optional variant arguments, resolves suffix-specific metadata, supports restricted dry-run overrides, computes variant-aware tags, and pushes images to DockerHub.
ROCK nightly publication wiring
.buildkite/release-pipeline.yaml
The pipeline invokes nightly publishing with rock rocm714 and removes matching nightly and base-nightly tags.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to 4d080

This change enables ROCk nightly image publishing and allows cold-cache base-image builds up to six hours. The current implementation has no identified merge-blocking risk.

Sequence Diagram(s)

sequenceDiagram
  participant Buildkite
  participant ECR
  participant ROCkBuild
  participant DockerHub
  Buildkite->>ECR: Check or build cached ROCk base image
  Buildkite->>ROCkBuild: Build ROCk release image
  ROCkBuild->>ECR: Push commit-specific -rock image
  Buildkite->>DockerHub: Publish ROCk nightly variants
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 1 files. (1 skipped: 1 … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the ROCm CI change: building and publishing TheRock nightly Docker images.
Description check ✅ Passed The description directly explains the pipeline changes, image tags, script behavior, validation, and current Buildkite testing status.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 1 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mergify mergify Bot added ci/build rocm Related to AMD ROCm labels Sep 2, 2026
@github-project-automation github-project-automation Bot moved this to Todo in AMD Sep 2, 2026
@Rohan138
Rohan138 force-pushed the rock-nightly-pipeline branch 3 times, most recently from 901125f to 158cad8 Compare September 2, 2026 21:07
@Rohan138 Rohan138 changed the title [ROCm][CI] Build and publish nightly TheRock (rock) docker images [ROCm][CI] Build and publish nightly ROCk docker images Sep 2, 2026
docker/Dockerfile.rock_base and docker/Dockerfile.rock were added in vllm-project#49925
but are not wired into any pipeline. Duplicate ROCm release-pipeline Jobs 1
and 6 for them so the release pipeline produces a base image and a
vllm-openai image from TheRock wheels, and publishes them to Docker Hub as
vllm/vllm-openai-rock:{base-,}nightly{,-<commit>} when NIGHTLY=1.

push-nightly-builds-rocm.sh now takes the target Docker Hub repo and the ECR
tag suffix as arguments, defaulting to the current ROCm values, so both
variants share one script.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Rohan Potdar <rohan.potdar@amd.com>
@Rohan138
Rohan138 force-pushed the rock-nightly-pipeline branch from 158cad8 to 2eb7c2f Compare September 2, 2026 21:10
@Rohan138
Rohan138 marked this pull request as ready for review September 3, 2026 01:19

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This pull request is from a fork — automated review is disabled. A repository maintainer can comment @claude review to run a one-time review.

@Rohan138 Rohan138 added the ready ONLY add when PR is ready to merge/full CI is needed label Sep 3, 2026
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

@Rohan138, CI is now available for this PR.

  • /ci run starts upstream CI; /amd-ci run starts AMD CI only.
  • /ci retry retries failed jobs in the CI build for the current PR head. If the current head has no CI build, it starts a new CI build for the current head containing only jobs that failed in the latest earlier CI build for this PR.
  • /amd-ci retry retries failed jobs in AMD CI for the current PR head. Use /amd-ci run when the current head has no AMD CI build.
  • /ci cancel cancels scheduled or running CI builds for this PR branch; /amd-ci cancel does the same for AMD CI only.

@AndreasKaratzas

Copy link
Copy Markdown
Member

/ci run

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

✅ Triggered Buildkite CI #86986 for commit 6229b7a843d4.

@rasmith

rasmith commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Looks good to me, but I'm not super familiar with these things.

else
echo "CACHE MISS - Building from scratch..."

DOCKER_BUILDKIT=1 docker buildx build \

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you need DOCKER_BUILDKIT=1 if using buildx?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I think this is a remnant of the fact that the regular ROCm build stage does the same:

DOCKER_BUILDKIT=1 docker buildx build \

But I think you're right that it's unnecessary, maybe we can remove it in both places.

# Save ECR tag for downstream jobs
buildkite-agent meta-data set "rock-base-image-tag" "$${ECR_CACHE_TAG}"
env:
DOCKER_BUILDKIT: "1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here, is it necessary or is this just something you need for buildkite?

echo " BUILDKITE_COMMIT: $${BUILDKITE_COMMIT}"
echo "========================================"

DOCKER_BUILDKIT=1 docker build \

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same question


docker push public.ecr.aws/q9t5s3a7/vllm-release-repo:$${BUILDKITE_COMMIT}-rock
env:
DOCKER_BUILDKIT: "1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same question

@AndreasKaratzas

Copy link
Copy Markdown
Member

@Rohan138 I just added a small patch. Also I think Randy is right here. Could we test this with his suggestions integrated?

Co-authored-by: OpenAI Codex <noreply@openai.com>
Signed-off-by: Andreas Karatzas <Andreas.Karatzas@amd.com>
echo "CACHE MISS - Building from scratch..."

DOCKER_BUILDKIT=1 docker buildx build \
--file docker/Dockerfile.rock_base \

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One other question, do you want to copy build/requirements/rock.txt to build/requirements/rocm.txt before building? Not sure if necessary.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well currently rock.txt and rocm.txt are more or less identical (and also partially unused as long as we use the dockerfiles as our primary source of truth). I'll come back and clean this up in future PRs.

…y-rocm714

Instead of a separate vllm/vllm-openai-rock Docker Hub repo, publish the
TheRock nightly into the existing vllm/vllm-openai-rocm repo under a tag
variant (rocm714, from ROCM_SDK_VERSION=7.14.0). This leaves room for
nightly-rocm714-ubuntu2404, nightly-rocm100, etc. as more TheRock variants
land, and keeps a single repo for ROCm-family images.

push-nightly-builds-rocm.sh now takes [ECR_TAG_SUFFIX TAG_VARIANT] rather
than [DOCKERHUB_REPO ECR_TAG_SUFFIX]: the repo is fixed to vllm/vllm-openai-rocm
and the second arg becomes the Docker Hub tag flavor. No args still publishes
the ROCm apt build as :nightly, unchanged; "rock rocm714" publishes the
TheRock build as :nightly-rocm714. The arg-count discipline, strict mode,
BASE_ECR_IMAGE dry-run path and fail-hard metadata read are preserved.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Rohan Potdar <rohan.potdar@amd.com>
@Rohan138 Rohan138 changed the title [ROCm][CI] Build and publish nightly ROCk docker images [ROCm][CI] Build and publish TheRock nightly docker images Sep 3, 2026
@Rohan138

Rohan138 commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator Author

@AndreasKaratzas can I clean up DOCKER_BUILDKIT=1 in a follow-up? There's multiple other follow-ups to be done here on e.g. getting ROCm 7.14 wheels and artifacts up, enabling ub2404 builds, unifying the release and CI pipelines, etc, so I'm using this PR just to get an initial ROCm 7.14 nightly image out before we iterate.

@AndreasKaratzas

Copy link
Copy Markdown
Member

@AndreasKaratzas can I clean up DOCKER_BUILDKIT=1 in a follow-up? There's multiple other follow-ups to be done here on e.g. getting ROCm 7.14 wheels and artifacts up, enabling ub2404 builds, unifying the release and CI pipelines, etc, so I'm using this PR just to get an initial ROCm 7.14 nightly image out before we iterate.

I think that's a good idea sure

@micah-wil micah-wil left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Am I understanding correctly that this PR will essentially be reverted once we fully move on from ROCm 7.2? If so, maybe we can add a TODO for that to make it clear.

Also, should we choose a different naming convention besides nightly-rocm714? Otherwise let's just make sure we remember to update it if/when we move to ROCm 10 previews ("nightly-rocm10").

@rasmith rasmith left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The things I had question about are harmless, just little cleanups.

@dllehr-amd dllehr-amd left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Trying this out

@Rohan138

Rohan138 commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator Author

/ci run

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

✅ Triggered Buildkite CI #87150 for commit 3c52c9329d18.

The seed (cold-cache) build of the ROCk base compiles AITER (PREBUILD_KERNELS,
gfx942;gfx950) and flash-attention from scratch; both were still running at
~176 min when the 180-min limit hit in release-v2 vllm-project#6076. Raise the limit so the
first build can populate the ECR image cache, after which later runs skip it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Rohan Potdar <rohan.potdar@amd.com>
@Rohan138

Rohan138 commented Sep 4, 2026

Copy link
Copy Markdown
Collaborator Author

/ci run

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

✅ Triggered Buildkite CI #87171 for commit 4d080cd16e16.

@dllehr-amd
dllehr-amd merged commit 7dc30f5 into vllm-project:main Sep 4, 2026
22 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in AMD Sep 4, 2026
ItsRoy69 pushed a commit to ItsRoy69/vllm that referenced this pull request Sep 10, 2026
…ect#55014)

Signed-off-by: Rohan Potdar <rohan.potdar@amd.com>
Signed-off-by: Andreas Karatzas <Andreas.Karatzas@amd.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Andreas Karatzas <Andreas.Karatzas@amd.com>
Co-authored-by: OpenAI Codex <noreply@openai.com>
Signed-off-by: Jyotirmoy Roy <jyotirmoyroy649@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/build ready ONLY add when PR is ready to merge/full CI is needed rocm Related to AMD ROCm

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants