Skip to content

fix(operator): give HX Cyborg conductors their LPU Agent addresses - #15804

Merged
andrewpaprotsky merged 1 commit into
ai-dynamo:mainfrom
joshhay95:jhay/lpx-hx-cyborg-servers
Oct 7, 2026
Merged

andrewpaprotsky merged 1 commit into
ai-dynamo:mainfrom
joshhay95:jhay/lpx-hx-cyborg-servers

Conversation

@joshhay95

@joshhay95 joshhay95 commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Why

The LPX renderer writes the Cyborg lpu_servers ConfigMap only for XT (LP20) hybrid builds. For HX (LP30) hybrid builds, the Cyborg conductor's config volume pointed at the Agents' partition table instead. Cyborg's cyborg-entrypoint --expand-hosts reads /configs/lpu_servers, so:

  • an all-local HX deployment (lpx.experimental.localPartitions) fails at startup on the missing file, and
  • a mixed or all-LPU HX deployment cannot find its Agents.

What

  • Render the Cyborg Agent-address ConfigMap for every hybrid (Cyborg conductor) workload, and bind the conductor's config volume to it, as for XT.
  • List one Agent per remote runtime partition, in compiler order, as <scaling group>-${GROVE_PCSG_INDEX}-<agent template>-<node offset>. HX keeps selected prop-sync chain members as separate physical partitions, so each chain is addressed through its first member. XT already collapses the chain the same way.
  • An all-local selection renders an empty lpu_servers, which matches XT.
  • XT output and LPU-only workloads do not change. All XT goldens are byte-identical.

Changes stay under deploy/operator/internal/dynamo/lpx/. They include updated HX hybrid goldens (mixed GPT-OSS, all-local, and all-LPU) and a focused render test that covers chains and local selections.

Testing

  • go test ./internal/... (from deploy/operator, with envtest assets)
  • golangci-lint v1.64.8 on ./internal/dynamo/lpx/... and ./internal/controller/lpx/...
  • Mutation checks: restoring the XT-only gate fails the new test and the HX goldens. Removing the chain-head handling fails the new test.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Hybrid pipelines now receive the Cyborg configuration needed to connect local processing partitions with their Agent servers.
  • Bug Fixes
    • Corrected Agent server lists for HX hybrid pipelines that use prop-sync chains, while keeping partition offsets aligned.
    • Ensured generated configuration is mounted and available to hybrid workloads across supported LPU families.

The LPX renderer wrote the Cyborg lpu_servers ConfigMap only for XT
hybrid builds. HX hybrid Cyborg conductors received the Agents'
partition table at /configs instead, so cyborg-entrypoint --expand-hosts
found no /configs/lpu_servers: an all-local HX deployment failed at
startup, and a mixed or all-LPU one could not reach its Agents.

Render the same ConfigMap for every hybrid workload and bind the
conductor's config volume to it. List one Agent per remote runtime
partition in compiler order. HX keeps selected prop-sync chain members
as physical partitions, so address each chain through its first member,
as XT does after collapsing it. An all-local selection renders an empty
list. XT output is unchanged.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Josh Hay <jhay@nvidia.com>
@joshhay95
joshhay95 requested review from a team as code owners October 7, 2026 09:28
@copy-pr-bot

copy-pr-bot Bot commented Oct 7, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@joshhay95
joshhay95 temporarily deployed to external_collaborator October 7, 2026 09:28 — with GitHub Actions Inactive
@joshhay95
joshhay95 temporarily deployed to external_collaborator October 7, 2026 09:28 — with GitHub Actions Inactive
@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

👋 Hi joshhay95! Thank you for contributing to ai-dynamo/dynamo.

Just a reminder: The NVIDIA Test Github Validation CI runs an essential subset of the testing framework to quickly catch errors.Your PR reviewers may elect to test the changes comprehensively before approving your changes.

🚀

@github-actions github-actions Bot added fix external-contribution Pull request is from an external contributor deployment::k8s Relates to dynamo deployment in kubernetes labels Oct 7, 2026
@coderabbitai

coderabbitai Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: ai-dynamo/dynamo/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Enterprise
  • Run ID: 4cb32582-87b9-47fe-8ca1-4c4c4c286ca1
📥 Commits

Reviewing files that changed from the base of the PR and between 548a010 and babe0a9.

📒 Files selected for processing (11)
  • deploy/operator/internal/dynamo/lpx/cyborg_render.go
  • deploy/operator/internal/dynamo/lpx/hybrid_cyborg_bindings.go
  • deploy/operator/internal/dynamo/lpx/hybrid_cyborg_bindings_test.go
  • deploy/operator/internal/dynamo/lpx/model_projection.go
  • deploy/operator/internal/dynamo/lpx/render.go
  • deploy/operator/internal/dynamo/lpx/testdata/from_dgd_yaml/lpx-v3-hx-local-partitions.input.yaml
  • deploy/operator/internal/dynamo/lpx/testdata/from_dgd_yaml/lpx-v3-hx-local-partitions.yaml
  • deploy/operator/internal/dynamo/lpx/testdata/from_dgd_yaml/node-local-v3-hx-hybrid-all-local.input.yaml
  • deploy/operator/internal/dynamo/lpx/testdata/from_dgd_yaml/node-local-v3-hx-hybrid-all-local.yaml
  • deploy/operator/internal/dynamo/lpx/testdata/from_dgd_yaml/node-local-v3-hx-hybrid.yaml
  • deploy/operator/internal/dynamo/lpx/workload_projection_v3.go

Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 11 remain after this review.


Walkthrough

Hybrid Cyborg rendering now covers HX and XT projections. Prop-sync chain positions determine which Agent endpoints appear in the generated ConfigMap. Hybrid workload rendering publishes and mounts that config.

Changes

Hybrid Cyborg Config Rendering

Layer / File(s) Summary
Prop-sync projection and Agent endpoint mapping
deploy/operator/internal/dynamo/lpx/model_projection.go, deploy/operator/internal/dynamo/lpx/workload_projection_v3.go, deploy/operator/internal/dynamo/lpx/hybrid_cyborg_bindings.go
V3 projections now carry prop-sync edge positions. Agent server rendering omits chained partitions and advances endpoint offsets across all partitions.
Hybrid config rendering and workload mounting
deploy/operator/internal/dynamo/lpx/render.go, deploy/operator/internal/dynamo/lpx/cyborg_render.go, deploy/operator/internal/dynamo/lpx/hybrid_cyborg_bindings_test.go, deploy/operator/internal/dynamo/lpx/testdata/from_dgd_yaml/*
Every hybrid pipeline renders Cyborg config. The workload adds the ConfigMap volume and records its hash. Tests and YAML fixtures cover endpoint selections, ConfigMap publication, and config mounts.

Priority: ➖ Normal

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

Merge Risk: ⚪ Minimal · up to babe0

The inspected HX workload receives its Agent-address configuration and mount. No identified issue prevents merging after normal checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 6 functions across 6 files. (5 skipped: 5… 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 and concisely describes the main change: providing LPU Agent addresses to HX Cyborg conductors.
Description check ✅ Passed The description explains the problem, the changes, and testing. It does not include the required Related Issues reference or the template’s Where should the reviewer start? section.
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 33.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 6 functions across 6 files. (5 skipped: 5 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Warning

Some tools did not complete. Review the errors below.

🔧 golangci-lint (2.13.2)

golangci-lint (2.13.2) skipped for deploy/operator/.golangci.yml: configuration requires version: "2". Migrate older configurations using golangci-lint migrate and review the result; see https://golangci-lint.run/docs/product/migration-guide/.


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

@andrewpaprotsky

Copy link
Copy Markdown
Contributor

/ok to test babe0a9

@devin-ai-integration

devin-ai-integration Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

❌ Dynamo PR CI failed — run 37604627410 (attempt 2) on babe0a90be

Gate checks: ✅ backend-status-check · ❌ deploy-status-check · ✅ dynamo-status-check

Other Jobs
DGDR Deploy Test ❌ 3 ✅ 1

Failure details

3 jobs failed, all the same way: the DGDR Deploy Test CPU jobs (profiling, validation, lifecycle) stop in Verify DGDR test prerequisites because the dynamographdeploymentrequests.nvidia.com CRD is not installed in the test vCluster. No DGDR tests ran.

❌ DGDR Deploy Test / CPU / profiling: CRD dynamographdeploymentrequests.nvidia.com not found

Job: DGDR Deploy Test / CPU / profiling · Failed step: Verify DGDR test prerequisites · Logs: gh run view --job 112788191623 -R ai-dynamo/dynamo --log-failed

namespace/dgdr-profiling-37604627410-2 created
secret/hf-token-secret created
Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "dynamographdeploymentrequests.nvidia.com" not found
##[error]Process completed with exit code 1.

The namespace and HF token secret were created, but kubectl wait for the DGDR CRD failed with NotFound: the CRD does not exist in the vCluster this job uses.

❌ DGDR Deploy Test / CPU / validation: CRD dynamographdeploymentrequests.nvidia.com not found

Job: DGDR Deploy Test / CPU / validation · Failed step: Verify DGDR test prerequisites · Logs: gh run view --job 112788191652 -R ai-dynamo/dynamo --log-failed

namespace/dgdr-validation-37604627410-2 created
secret/hf-token-secret created
Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "dynamographdeploymentrequests.nvidia.com" not found
##[error]Process completed with exit code 1.

Same failure as the profiling job: the DGDR CRD is missing from the vCluster.

❌ DGDR Deploy Test / CPU / lifecycle: CRD dynamographdeploymentrequests.nvidia.com not found

Job: DGDR Deploy Test / CPU / lifecycle · Failed step: Verify DGDR test prerequisites · Logs: gh run view --job 112788192320 -R ai-dynamo/dynamo --log-failed

namespace/dgdr-lifecycle-37604627410-2 created
secret/hf-token-secret created
Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "dynamographdeploymentrequests.nvidia.com" not found
##[error]Process completed with exit code 1.

Same failure as the profiling job: the DGDR CRD is missing from the vCluster.

For agents
{"pr": 15804, "run_id": 37604627410, "run_attempt": 2, "head_sha": "babe0a90be6ec514799523f9fb31174e32fe9cd5",
 "failures": [
  {"job": "DGDR Deploy Test / CPU / profiling", "job_id": 112788191623, "failed_step": "Verify DGDR test prerequisites", "signature": "CRD dynamographdeploymentrequests.nvidia.com not found", "tests": [], "log_cmd": "gh run view --job 112788191623 -R ai-dynamo/dynamo --log-failed"},
  {"job": "DGDR Deploy Test / CPU / validation", "job_id": 112788191652, "failed_step": "Verify DGDR test prerequisites", "signature": "CRD dynamographdeploymentrequests.nvidia.com not found", "tests": [], "log_cmd": "gh run view --job 112788191652 -R ai-dynamo/dynamo --log-failed"},
  {"job": "DGDR Deploy Test / CPU / lifecycle", "job_id": 112788192320, "failed_step": "Verify DGDR test prerequisites", "signature": "CRD dynamographdeploymentrequests.nvidia.com not found", "tests": [], "log_cmd": "gh run view --job 112788192320 -R ai-dynamo/dynamo --log-failed"}
 ]}

Posted automatically by Devin for run 37604627410. Updated on every full-CI run of this PR.

@andrewpaprotsky
andrewpaprotsky merged commit 18f1787 into ai-dynamo:main Oct 7, 2026
233 of 245 checks passed

This branch was previously deployed

1 inactive deployment
external_collaborator — babe0a90 Deployed Oct 7, 2026 by joshhay95 via ok-to-test #27974
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

deployment::k8s Relates to dynamo deployment in kubernetes external-contribution Pull request is from an external contributor fix size/L

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants