Skip to content

feat(docs): KEP-4064: MPI node groups - #4145

Open
matbun wants to merge 3 commits into
kubeflow:masterfrom
matbun:kep-4064-mpi-node-groups
Open

matbun wants to merge 3 commits into
kubeflow:masterfrom
matbun:kep-4064-mpi-node-groups

Conversation

@matbun

@matbun matbun commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

What this PR does / why we need it:

This PR adds KEP-4064, which lets one MPI TrainJob run several node groups, each with its own pod template, number of nodes and slots, so a single job can mix CPU, NVIDIA and AMD nodes. It follows the discussion in #4064 and lists the flat launcher design proposed there under Alternatives.

Which issue(s) this PR fixes (optional, in Fixes #<issue number>, #<issue number>, ... format, will close the issue(s) when PR gets merged):
Part of #4064

Checklist:

  • Docs included if any changes are user facing

Cc @andreyvelich

Add a KEP that lets an MPI runtime declare several node groups and lets a TrainJob set the size, slots, image and resources of each group and of the launcher with one schema.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Matteo Bunino <48362942+matbun@users.noreply.github.com>
@google-oss-prow

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign astefanutti for approval. For more information see the Kubernetes Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@matbun

matbun commented Oct 14, 2026

Copy link
Copy Markdown
Contributor Author

@andreyvelich I just added user stories as requested

Update the Go types to the implemented ones (launcher as a struct and containerName as a string, as the Kube API Linter requires), add the rules the implementation enforces (no trainjob-ancestor-step label, successPolicy and failurePolicy references to disabled groups dropped, resourceClaimsPerNode rejected with node groups), and link the draft implementation.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Matteo Bunino <48362942+matbun@users.noreply.github.com>
Comment on lines +89 to +93
workers:
- jobName: highcore
numNodes: 1
labels: {home: afs, mount-eos: "true", mount-cvmfs: "true", mount-afs: "true", rdma: "true"}
nodeSelector:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

One topic we should discuss while reviewing this KEP is that TrainJob users usually are not aware of TrainingRuntime configuration, as they only reference the desired runtime.
Therefore, @tenzen-y proposed initial approach with the ancestor label to merge values between TrainJob and Runtime spec.

This branch has not been deployed

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

Labels

Projects

Status: Needs Triage

Development

Successfully merging this pull request may close these issues.

KEP-4064: Support multiple MPI worker groups with per group numNodes and numProcPerNode

2 participants