feat: support Azure Linux ARM64 images on NVIDIA GB200/300 - #9365
Open
Mitch Zhu (miz060) wants to merge 3 commits into
Open
feat: support Azure Linux ARM64 images on NVIDIA GB200/300#9365Mitch Zhu (miz060) wants to merge 3 commits into
Mitch Zhu (miz060) wants to merge 3 commits into
Conversation
Install standard and HWE kernels in the Azure Linux 3 ARM64 image. Select HWE with Grace boot arguments only on NVIDIA Grace hardware while ordinary ARM64 keeps the standard kernel. Signed-off-by: Mitch Zhu <mitchzhu@microsoft.com>
Enable standard non-FIPS Azure Linux 3 ARM64 while preserving the existing install-or-validate dispatch. Resolve cuda-open packages against the running standard or HWE kernel from current repository state. Signed-off-by: Mitch Zhu <mitchzhu@microsoft.com>
Verify the dual-kernel image contract, GRUB selection, and ordinary ARM64 boot behavior. Run VHD validation from the requested fork and captured source SHA. Signed-off-by: Mitch Zhu <mitchzhu@microsoft.com>
Contributor
Windows Unit Test Results 3 files 13 suites 51s ⏱️ Results for commit 22e4909. |
Mitch Zhu (miz060)
marked this pull request as ready for review
September 2, 2026 17:01
Mitch Zhu (miz060)
requested review from
Devinwong,
Sri Harsha (SriHarsha001),
Abdul Asfari (aboodasfari),
Nishchay (awesomenix),
Ben Brady (benjamin-brady),
Calvin S. (calvin197),
Cameron Meissner (cameronmeissner),
Sylvain Boily (djsly),
fcher,
Ganeshkumar Ashokavardhanan (ganeshkumarashok),
janenotjung-hue,
Karen Chen (karenychen),
lilypan26,
Mark Ibrahim (mxj220),
Peter Damianov (pdamianov-dev),
Patrick W. Healy (phealy),
r2k1,
Runzhen (runzhen),
Shun Lyu (sinmentis),
sulixu,
Tim Wright (timmy-wright),
Thibault Cohen (titilambert),
Xu Xue (xuexu6666) and
Zachary (zachary-bailey)
as code owners
September 2, 2026 17:01
Mitch Zhu (miz060)
requested a review
from Abigail Liang (abigailliang-aks-sig-node)
as a code owner
September 2, 2026 17:01
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Kernel and GRUB update handling can break dual-kernel booting, and driver selection does not reliably distinguish kernel tracks.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Adds Azure Linux 3 ARM64 support for NVIDIA Grace systems using a shared dual-kernel VHD and managed GPU drivers.
Changes:
- Installs standard and HWE kernels with hardware-aware GRUB selection.
- Enables Azure Linux ARM64 NVIDIA driver installation and validation.
- Expands VHD and ShellSpec coverage.
File summaries
| File | Description |
|---|---|
vhdbuilder/packer/vhd-image-builder-mariner-arm64.json |
Uploads NVIDIA GRUB files. |
vhdbuilder/packer/test/run-test.sh |
Passes configurable repository URL. |
vhdbuilder/packer/test/linux-vhd-content-test.sh |
Tests dual-kernel VHD contents. |
vhdbuilder/packer/pre-install-dependencies.sh |
Co-installs kernels and GRUB modules. |
vhdbuilder/packer/packer_source.sh |
Installs GRUB selector configuration. |
spec/vhdbuilder/packer/test/linux_vhd_content_test_helpers_spec.sh |
Tests source checkout behavior. |
spec/parts/linux/cloud-init/artifacts/cse_install_mariner_spec.sh |
Tests HWE driver selection. |
spec/parts/linux/cloud-init/artifacts/cse_config_spec.sh |
Tests ARM64 GPU dispatch. |
spec/parts/linux/cloud-init/artifacts/azure_nvidia_spec.sh |
Tests kernel selector behavior. |
pkg/agent/baker_test.go |
Covers GB GPU mappings. |
parts/linux/cloud-init/artifacts/mariner/cse_install_mariner.sh |
Supports HWE OpenRM packages. |
parts/linux/cloud-init/artifacts/cse_config.sh |
Enables supported ARM64 GPU setup. |
parts/linux/cloud-init/artifacts/51-azure-nvidia.cfg |
Documents Grace argument handling. |
parts/linux/cloud-init/artifacts/10_azure_nvidia |
Selects kernels using hardware detection. |
Review details
- Files reviewed: 14/14 changed files
- Comments generated: 3
- Review effort level: Balanced
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| elif [ "$driver_ret" -eq 0 ]; then | ||
| echo "VM SKU ${VM_SKU} uses NVIDIA OpenRM driver (cuda-open)" | ||
| CUDA_PACKAGE=$(dnf repoquery -y --available "cuda-open*" | grep -E "^cuda-open-[0-9]+.*_${KERNEL_VERSION}" | sort -V | tail -n 1) | ||
| CUDA_PACKAGE=$(getLatestAzureLinuxNvidiaDriverPackageForKernel "cuda-open*" "^cuda-open(-hwe)?-[0-9]" "$KERNEL_VERSION") |
| dnf_install 30 1 600 dnf5 || exit "$ERR_APT_INSTALL_TIMEOUT" | ||
| fi | ||
|
|
||
| dnf5 install -y kernel-hwe || exit "$ERR_APT_INSTALL_TIMEOUT" |
Comment on lines
+225
to
+230
| install -d -m 0755 "$grub_module_destination" | ||
| install -m 0644 \ | ||
| "$grub_module_source/extcmd.mod" \ | ||
| "$grub_module_source/smbios.mod" \ | ||
| "$grub_module_source/moddep.lst" \ | ||
| "$grub_module_destination/" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this PR does / why we need it:
We want to support NVIDIA Grace GB200 and GB300 VMs on Azure Linux 3. These VMs require
kernel-hweand Grace-specific boot arguments, while standard ARM64 nodes usekernelwithout those arguments. Maintaining a separate VHD image series for GB200 and GB300 is undesirable, so this PR installs both kernels in one ARM64 image and selects the correct kernel and boot arguments based on the underlying hardware. It also enables managed NVIDIA driver setup for the AzureLinux 3 ARM64 GPU path.
Changes:
kernelandkernel-hwe, plus the GRUB modules required for boot-time hardware detection.10_azure_nvidiato selectkernel-hwewith Grace arguments on GB200/GB300 andkernelwithout those arguments on standard ARM64. Existing Ubuntu behavior remains unchanged.cuda-openorcuda-open-hwefrom the running kernel and current repository state without pinning an Azure Linux release.Validation: