Add multi-arch (x86, arm) container image support#720
Conversation
- Create reusable multi-arch build workflow - Build AMD64 with all extras, ARM64 with recommended extras - Generate manifest lists for automatic platform selection - Update development, nightly, and release workflows - Update container maintenance to handle arch-specific tags Fixes vllm-project#498 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> Signed-off-by: Maryam Tahhan <mtahhan@redhat.com>
Reusable workflows need explicit permissions passed from the caller. Added 'packages: write' permission to all three workflow callers. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> Signed-off-by: Maryam Tahhan <mtahhan@redhat.com>
|
If you look at the original issue, we outlined that we do not want to publish official container images for a platform until we can fully support it will all features. I think |
|
The issue is if we want to benchmark inference on Arm platforms (which we do) We have to use an out of tree build and point folks to that, in our own quay repos. We would rather use an official guidellm build. Why not support the limited Arm image till the depedency is resolved and document the limitation? There's no clear timeline for the dependency being resolved in the meantime. |
jaredoconnell
left a comment
There was a problem hiding this comment.
Looks good to me. I think it's a positive that it moves the shared logic to one place.
dbutenhof
left a comment
There was a problem hiding this comment.
Looks good to me. I think it's a positive that it moves the shared logic to one place.
Agreed. I like the refactor.
The issue I see is whether we want to release/support a "watered down" arm64 container. I do think there's a potential cost in people grabbing it without understanding the limitations, but that may be justified as a (hopefully temporary) compromise.
Is there a good place to document this limitation? Having a container that supports all recommended dependencies isn't too bad. |
|
Some update on this, it looks like the only blocker on the |
|
I don't think this has to block on that. We can change it after we verify compatibility. |
My point is that this has been addressed (that PR merged) so I assume we can now build aarch64 with the |
Add ARM64 container image support
Fixes #498
Summary
This PR adds multi-architecture container image support for GuideLLM, enabling the container to run on both AMD64 (x86_64) and ARM64 (aarch64) platforms. This addresses issue #498 where users on ARM systems (e.g., Ampere processors) could not run the published container images.
The implementation creates a reusable workflow that builds architecture-specific images and combines them into manifest lists, allowing users to pull images without specifying architecture tags. The container runtime automatically selects the correct architecture.
Key architectural decision: ARM64 images are built with
recommendedextras (excludes audio/vision) because PyTorch CPU wheels are not available for ARM64 Linux. AMD64 images continue to be built withallextras for full feature support.Details
New reusable workflow (
.github/workflows/build-multiarch-container.yml):linux/amd64andlinux/arm64platforms in parallel using matrix strategyworkflow_callandworkflow_dispatchtriggers for flexibilityUpdated workflows to use the reusable workflow:
development.yml: Simplified to call reusable workflow withpr-<number>tagsnightly.yml: Simplified to call reusable workflow withnightlytagrelease.yml: Added version extraction job, calls reusable workflow with release version tagContainer maintenance (
.github/workflows/container-maintenance.yml):pr-N-amd64,pr-N-arm64)stable/latesttag updates)Build configuration:
GUIDELLM_BUILD_EXTRAS=all(includes audio, vision, perf, tokenizers)GUIDELLM_BUILD_EXTRAS=recommended(perf + tokenizers only)Test Plan
Local Testing (if you have podman/docker):
Verify Manifest List:
Expected output: Two manifests (amd64 and arm64)
CI Validation:
Related Issues
Use of AI
## WRITTEN BY AI ##)