Skip to content

[CI] Import the DCGM exporter via enroot registry syntax / 用 enroot registry 语法导入 DCGM exporter - #2735

Open
edwingao28 wants to merge 2 commits into
mainfrom
wenyaogao/enroot-nvcr-registry-form
Open

[CI] Import the DCGM exporter via enroot registry syntax / 用 enroot registry 语法导入 DCGM exporter#2735
edwingao28 wants to merge 2 commits into
mainfrom
wenyaogao/enroot-nvcr-registry-form

Conversation

@edwingao28

@edwingao28 edwingao28 commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator

What

Import the DCGM exporter image with enroot's REGISTRY#IMAGE syntax in the two launchers that pass a bare docker://nvcr.io/... reference straight to enroot import: launch_gb300-nv.sh and launch_h200-dgxc-slurm.sh. launch_gb200-nv.sh is untouched — its import_squash routes every ref through enroot_uri_for_image, which already emits the registry# form (passing a pre-converted ref there double-parses into a broken URI). The GB200/GB300 contract tests now pin each launcher's correct form.

Why

enroot resolves a bare docker://nvcr.io/nvidia/k8s/dcgm-exporter:... against its default registry (Docker Hub), where the path does not exist — the pull fails with 401 Unauthorized from registry-1.docker.io. This exact failure took down every cold-cache exporter import on the b200-nscale cluster (PR #2688 validation, run 32796387229) and was fixed there with the nvcr.io# form; run 32797740765 confirms the converted ref imports cleanly.

The GB300/H200 launchers carry the same bare form today and only work because each cluster already holds a cached sqsh — a cache eviction would break the power lanes on those pools. The repo already uses the nvcr.io# convention elsewhere (launch_h200-dgxc-slurm.sh TRT container mapping, launch_h100-dgxc-slurm.sh, launch_gb200-nv.sh via enroot_uri_for_image).

The sqsh cache filename is derived separately from DCGM_EXPORTER_IMAGE and sanitizes / and # identically, so existing caches still hit and non-power lanes are untouched.

Validation

  • bash -n on all touched launchers
  • enroot_uri_for_image exercised locally: plain image → docker://nvcr.io#nvidia/k8s/... (correct); pre-converted ref → docker://nvcr.io#nvidia#k8s/... (broken) — hence the gb200 revert
  • utils: test_gb200_power_official_contract.py, test_gb300_power_official_contract.py, test_h200_power_official_contract.py, test_process_result.py — 80 passed

@cursor cursor 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.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit dbea7ea. Configure here.

Comment thread runners/launch_gb200-nv.sh Outdated

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dbea7ea4a0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread runners/launch_gb200-nv.sh Outdated
DCGM_EXPORTER_ENROOT_REF="${DCGM_EXPORTER_IMAGE/nvcr.io\//nvcr.io#}"
DCGM_EXPORTER_SQSH="${SQUASH_DIR}/$(echo "$DCGM_EXPORTER_IMAGE" | sed 's/[\/:@#]/_/g').sqsh"
import_squash "$DCGM_EXPORTER_SQSH" "$DCGM_EXPORTER_IMAGE"
import_squash "$DCGM_EXPORTER_SQSH" "$DCGM_EXPORTER_ENROOT_REF"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Pass the original image to the GB200 URI converter

On any GB200 power run where the cached exporter squash is absent or invalid, import_squash passes this argument through enroot_uri_for_image, which already converts nvcr.io/nvidia/... to docker://nvcr.io#nvidia/.... Passing the preconverted value here makes the helper produce docker://nvcr.io#nvidia#k8s/dcgm-exporter:..., with the repository split at the wrong slash, so the exporter import fails and aborts the benchmark; this launcher should continue passing DCGM_EXPORTER_IMAGE.

Useful? React with 👍 / 👎.

Comment thread runners/launch_gb200-nv.sh Outdated
Comment on lines +317 to +319
DCGM_EXPORTER_ENROOT_REF="${DCGM_EXPORTER_IMAGE/nvcr.io\//nvcr.io#}"
DCGM_EXPORTER_SQSH="${SQUASH_DIR}/$(echo "$DCGM_EXPORTER_IMAGE" | sed 's/[\/:@#]/_/g').sqsh"
import_squash "$DCGM_EXPORTER_SQSH" "$DCGM_EXPORTER_IMAGE"
import_squash "$DCGM_EXPORTER_SQSH" "$DCGM_EXPORTER_ENROOT_REF"

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.

🔴 import_squash's enroot_uri_for_image() (lines 22-64) already rewrites a bare nvcr.io/... image into registry#repo form; passing the pre-rewritten DCGM_EXPORTER_ENROOT_REF (already containing '#') into it double-converts the string.

Extended reasoning...

With DCGM_EXPORTER_ENROOT_REF='nvcr.io#nvidia/k8s/dcgm-exporter:4.6.0-4.8.3-distroless', enroot_uri_for_image splits on the first '/' which now falls inside the repo path, producing registry='nvcr.io#nvidia' and a second '#' before 'k8s', yielding the malformed URI 'docker://nvcr.io#nvidia#k8s/dcgm-exporter:...'. On any cold cache, enroot import fails on GB200 (the exact scenario this PR claims to fix), unlike gb300/h200 which use a plain docker://$image call and are unaffected.

Verification: Severity: normal — regression breaking the exact cold-cache scenario the PR claims to fix. import_squash (launch_gb200-nv.sh line 74) internally calls enroot_uri_for_image on its image arg, and that result is what enroot import uses (line 87). On the BASE branch the call passed the bare DCGM_EXPORTER_IMAGE "nvcr.io/nvidia/k8s/dcgm-exporter:4.6.0-4.8.3-distroless", which enroot_uri_for_image co

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant