kubeflow / kubeflow/trainer

KEP-2170: Support hundreds and thousands worker nodes for a single training Job

Open
#2,318 16 comments 4 reactions 2 assignees Claimed by @krishdef7 View on GitHub
area/scalability kind/feature
Dominant language
Go
Stars
2.2k
Forks
1.1k
Avg merge
3d 22h
Merged PRs (30d)
39

Description

### What you would like to be added?

We should support the multiple replicas per a replicatedJob like:

```yaml
[...]
spec:
replicatedJobs:
- name:
replicas: 5
[...]
```

### Why is this needed?

Currently, we enforce 1 to the JobSet ReplicatedJob replicas:

https://github.com/kubeflow/training-operator/blob/9e46f9d422e71f258679c5edd306c7eddf9004f1/pkg/runtime.v2/core/trainingruntime.go#L108-L110

However, when the single worker replicatedJob has batch/v1 Job with hundreds and thousands of completions (`.spec.completions`), this brings us a significant reconciling delay since the job-controller (combined within kube-controller-manager) reconciliation will take much longer time due to thousands of Pods, then following Jobs will be stuck in the workqueue.

```yaml
spec:
replicatedJobs:
- name: training-node
replicas: 1
template:
spec:
completions: 2000
parallelism: 2000
```

After that, the kube-controller-manger workqueue depth will be much deeper, which could potentially cause a memory leak.
Finally, the kube-controller-manager continues to restart, and any kind of Workload (even StatefulSet and Deployment) will fall unhandled.

### Love this feature?

Give it a 👍 We prioritize the features with most 👍

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.