Skip to content

Enable managed GPU driver install on arm64 (GB200/GB300)#8950

Open
xuexu6666 wants to merge 1 commit into
mainfrom
xuxue/gb300-arm64-managed-gpu-driver
Open

Enable managed GPU driver install on arm64 (GB200/GB300)#8950
xuexu6666 wants to merge 1 commit into
mainfrom
xuxue/gb300-arm64-managed-gpu-driver

Conversation

@xuexu6666

Copy link
Copy Markdown
Contributor

What

Enable the managed GPU driver install on arm64 (Grace-Blackwell: GB200 / GB300).

ensureGPUDrivers() returns immediately on arm64, so --gpu-driver Install
(ConfigGPUDriverIfNeeded + EnableNvidia) is a no-op on GB300. This PR scopes
the early-return so arm64 Ubuntu proceeds through the existing container-based
install path in configGPUDrivers (which pulls the now-published aks-gpu-cuda-lts
arm64 image and runs nvidia-modprobe / nvidia-smi). Non-Ubuntu arm64 keeps skipping
(no arm64 GPU driver path there).

 ensureGPUDrivers() {
-    if [ "$(isARM64)" -eq 1 ]; then
+    if [ "$(isARM64)" -eq 1 ] && [ "$OS" != "$UBUNTU_OS_NAME" ]; then
         return
     fi

Why / evidence

Traced on a live GB300 node (Standard_ND128isr_GB300_v6, kernel
6.14.0-1007-azure-nvidia) provisioned via the new e2e:

  • CSE resolves the right image (NVIDIA_DRIVER_IMAGE=mcr.microsoft.com/aks/aks-gpu-cuda-lts)
    and the gate passes (GPU_NODE=true, SkipGpuDriverInstall unset).
  • But ensureGPUDrivers logs Start configuring GPU drivers and
    End configuring GPU drivers in the same second — it hits isARM64 → return.
  • Result: no /usr/local/nvidia, no DKMS module, lsmod empty, nvidia-smi absent.

The aks-gpu-cuda-lts arm64 image exists and pulls on the node, so the only blocker
is this CSE short-circuit.

Test

Adds e2e/scenario_gb300_managed_driver_test.go
Test_Ubuntu2404Arm64_GB300_ManagedDriver: provisions an 18-node GB300 arm64 rack
(dual-kernel 2404gen2arm64containerd image → boots linux-azure-nvidia), drives the
managed install, and validates nvidia-smi + 580.x + the NVIDIA open kernel module
(/proc/driver/nvidia/version).

GB300-specific VMSS wiring discovered while getting the raw VMSS to allocate (all matching
a real AKS GB300 nodepool VMSS): SinglePlacementGroup=false (Vertical Connect / NVLink
rack), ephemeral OS disk on CacheDisk (1024 GB, Standard_LRS), and the image's
DiskControllerTypes: SCSI,NVMe feature.

Notes / follow-ups (not in this PR)

  • The RP independently blocks --gpu-driver Install for GB300
    (VMSizeDoesNotSupportGPU, because Compute SKU metadata lacks the GPUs capability), so
    this CSE change stays dormant in production until that gate is lifted. The e2e sets
    EnableNvidia directly to bypass it.
  • validateGPUDrivers() (the prebaked-driver path, used when
    ConfigGPUDriverIfNeeded=false) still early-returns on arm64 — left as-is since the GB
    images aren't prebaked; worth revisiting if that changes.
  • localdns.service fails to start on GB300 and CSE retries it ~100× (separate issue); the
    e2e disables localdns to keep the run in budget.
  • make generate: no testdata changes. Its validate-shell step fails on a pre-existing,
    unrelated
    SC3014 warning in disk_queue.sh (not touched here).

Needs an image/VHD build + a real GB300 run to validate end-to-end.

ensureGPUDrivers() returns immediately on arm64, so the managed driver
install (--gpu-driver Install / ConfigGPUDriverIfNeeded) is a no-op on the
Grace-Blackwell arm64 SKUs. On a GB300 node CSE logs 'Start configuring GPU
drivers' and 'End configuring GPU drivers' in the same second and nothing is
installed (no /usr/local/nvidia, no DKMS module, nvidia-smi absent), even
though aks-gpu-cuda-lts now publishes an arm64 image and CSE resolves it.

Scope the early-return so arm64 Ubuntu (the GB SKUs) proceeds through the
container-based install path in configGPUDrivers, which pulls the arm64
aks-gpu-cuda-lts image and runs nvidia-modprobe/nvidia-smi. Non-Ubuntu arm64
still skips (no arm64 GPU driver path there).

Adds e2e Test_Ubuntu2404Arm64_GB300_ManagedDriver that provisions an 18-node
GB300 arm64 rack and validates the R580 open kernel module on-node.
@github-actions

Copy link
Copy Markdown
Contributor

PR Title Lint Failed ❌

Current Title: Enable managed GPU driver install on arm64 (GB200/GB300)

Your PR title doesn't follow the expected format. Please update your PR title to follow one of these patterns:

Conventional Commits Format:

  • feat: add new feature - for new features
  • fix: resolve bug in component - for bug fixes
  • docs: update README - for documentation changes
  • refactor: improve code structure - for refactoring
  • test: add unit tests - for test additions
  • chore: remove dead code - for maintenance tasks
  • chore(deps): update dependencies - for updating dependencies
  • ci: update build pipeline - for CI/CD changes

Guidelines:

  • Use lowercase for the type and description
  • Keep the description concise but descriptive
  • Use imperative mood (e.g., "add" not "adds" or "added")
  • Don't end with a period

Examples:

  • feat(windows): add secure TLS bootstrapping for Windows nodes
  • fix: resolve kubelet certificate rotation issue
  • docs: update installation guide
  • Added new feature
  • Fix bug.
  • Update docs

Please update your PR title and the lint check will run again automatically.

Copilot AI 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.

Pull request overview

This PR updates the Linux CSE GPU driver flow to allow arm64 Ubuntu nodes (GB200/GB300) to proceed with the existing container-based managed NVIDIA driver install, instead of short-circuiting on all arm64. It also adds a new GB300-focused E2E scenario to validate the managed install produces a working R580 (580.x) open kernel module on Ubuntu 24.04 arm64.

Changes:

  • Adjust ensureGPUDrivers() to skip arm64 only for non-Ubuntu OSes, enabling managed driver install on Ubuntu arm64.
  • Add an E2E scenario that provisions an 18-node GB300 rack and validates nvidia-smi plus open-module driver flavor/version.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.

File Description
parts/linux/cloud-init/artifacts/cse_config.sh Refines arm64 early-return gating so Ubuntu arm64 can run the managed/container GPU driver install path.
e2e/scenario_gb300_managed_driver_test.go Adds a GB300 (Ubuntu 24.04 arm64) managed-driver E2E scenario and validator for R580 open kernel module.

Comment on lines +1359 to 1361
if [ "$(isARM64)" -eq 1 ] && [ "$OS" != "$UBUNTU_OS_NAME" ]; then
return
fi
Comment on lines +1355 to +1359
# arm64 GPU nodes are the Grace-Blackwell SKUs (GB200/GB300). They install the
# driver from the container image via the Ubuntu path in configGPUDrivers -
# aks-gpu-cuda-lts now publishes an arm64 variant. Other OSes have no arm64 GPU
# driver install path, so continue skipping arm64 there.
if [ "$(isARM64)" -eq 1 ] && [ "$OS" != "$UBUNTU_OS_NAME" ]; then
Comment on lines +32 to +33
func Test_Ubuntu2404Arm64_GB300_ManagedDriver(t *testing.T) {
RunScenario(t, &Scenario{
Comment on lines +3 to +12
import (
"context"
"strings"
"testing"

"github.com/Azure/agentbaker/e2e/config"
"github.com/Azure/agentbaker/pkg/agent/datamodel"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v7"
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants