feat: NVL576 - Multi Level Topology Support - Design and Prototype#416
feat: NVL576 - Multi Level Topology Support - Design and Prototype#416ravisoundar wants to merge 1 commit into
Conversation
|
/ok-to-test 24e80de |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #416 +/- ##
==========================================
+ Coverage 72.15% 73.60% +1.44%
==========================================
Files 89 94 +5
Lines 5689 6349 +660
==========================================
+ Hits 4105 4673 +568
- Misses 1382 1434 +52
- Partials 202 242 +40 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Greptile SummaryThis PR introduces multi-level NVLink domain hierarchy support for NVL576 clusters, extending the block topology engine to represent up to three named grouping levels (Level1/Level2/Level3) above the accelerator domain. The tree builder is refactored into three explicit phases — per-domain packing, level-by-level aggregation, and a root fallback — so that Slurm's
Confidence Score: 4/5Safe to merge for the documented NVL576 BlockSizes=[9,144] use case, but has a node-loss defect when Level fields are only partially populated. The three-phase tree builder correctly handles the target NVL576 configuration and all existing tests pass. However, when at least one domain has Level3 set but another domain in the same DomainMap does not, the un-labelled domain is silently dropped from currentNodes in Phase 2 and never appears in the emitted topology.conf with no error or warning. This would cause Slurm to be unaware of those nodes. pkg/translate/block_tree.go — the Phase 2 levelMap construction and Phase 3 fallback both need a check for domain nodes that were in domainNodes but are absent from any level group. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[buildBlockTree] --> B[Phase 1: packDomainNodes]
B --> C{domCapacity >= blockSizes last?}
C -- yes --> D[Return flat list as root children]
C -- no --> E[Phase 2: loop levels 3 to 1]
E --> F{remaining empty?}
F -- yes --> G[Early return currentNodes as root children]
F -- no --> H{GetLevelInfo present?}
H -- absent --> I[Phase 3]
H -- present --> J[Build nodesMap from currentNodes]
J --> K[Build levelMap from members]
K --> L[packAggregateNodes desiredGroupSize = remaining LAST / currentCapacity]
L --> M[Update currentNodes and currentCapacity]
M --> E
I --> N{remaining empty after Phase 2?}
N -- yes --> G
N -- no --> O[Root fallback pack currentNodes under root]
O --> P[Return aggregateBlockNode]
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
A[buildBlockTree] --> B[Phase 1: packDomainNodes]
B --> C{domCapacity >= blockSizes last?}
C -- yes --> D[Return flat list as root children]
C -- no --> E[Phase 2: loop levels 3 to 1]
E --> F{remaining empty?}
F -- yes --> G[Early return currentNodes as root children]
F -- no --> H{GetLevelInfo present?}
H -- absent --> I[Phase 3]
H -- present --> J[Build nodesMap from currentNodes]
J --> K[Build levelMap from members]
K --> L[packAggregateNodes desiredGroupSize = remaining LAST / currentCapacity]
L --> M[Update currentNodes and currentCapacity]
M --> E
I --> N{remaining empty after Phase 2?}
N -- yes --> G
N -- no --> O[Root fallback pack currentNodes under root]
O --> P[Return aggregateBlockNode]
Reviews (3): Last reviewed commit: "feat: NVL576 - Multi Level Topology Supp..." | Re-trigger Greptile |
24e80de to
507afeb
Compare
|
/ok-to-test 507afeb |
|
🌿 Preview your docs: https://nvidia-preview-pull-request-416.docs.buildwithfern.com/topograph |
Signed-off-by: Ravi Shankar <ravish@nvidia.com>
507afeb to
664c001
Compare
| Level1 string // optional: top-level grouping (e.g. datacenter) | ||
| Level2 string // optional: mid-level grouping (e.g. building or SU group) | ||
| Level3 string // optional: lowest named level above the domain (e.g. SU / room) |
There was a problem hiding this comment.
Are you mixing network fabric and accelerated domains?
"Level-N" isn't very descriptive. It may mean different things to different providers.
Also, I'd use map[string]string instead of a fixed number of levels. The key could resemble a k8s label name, which we could then use in the k8s engine.
Description
Design and Prototype for the NVL576 multi level block topology support.
Addresses #415
Checklist
git commit -s).