From 8295624cd22d36b23ddd8f8d708c65c65432665a Mon Sep 17 00:00:00 2001 From: xuzhonghu Date: Fri, 24 Apr 2020 16:39:56 +0800 Subject: [PATCH 1/4] Support scale up and down --- docs/design/images/Job-scale-up-down.PNG | Bin 0 -> 52450 bytes docs/design/job-scale-up-down.md | 63 +++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 docs/design/images/Job-scale-up-down.PNG create mode 100644 docs/design/job-scale-up-down.md diff --git a/docs/design/images/Job-scale-up-down.PNG b/docs/design/images/Job-scale-up-down.PNG new file mode 100644 index 0000000000000000000000000000000000000000..caeb7b30d349b79e72d091d2a5b0d8f1531f0e91 GIT binary patch literal 52450 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 literal 0 HcmV?d00001 diff --git a/docs/design/job-scale-up-down.md b/docs/design/job-scale-up-down.md new file mode 100644 index 0000000000..4b0efed94b --- /dev/null +++ b/docs/design/job-scale-up-down.md @@ -0,0 +1,63 @@ +# Volcano Job scale up and down + +@hzxuzhonghu; April 24, 2020 + +## Motivation + +Currently, Volcano does not support Job update. It is not allowed to update the `Job.Spec` on the fly. +However, users like ModelArts want to dynamically adjust Job's replicas according to the cluster idle resources +in order to achieve most high efficiency on GPU card. + +## Design + +Before this design, let's recall the current Job's initialization + +### Job Initialization + +When a Volcano job is created, the job controller does the following to run/manage all of its tasks. + +1. all the plugins execute OnJobAdd callbacks + +2. create pvc for the job + +3. create PodGroup for the job + +4. create pods equals the replicas of the job + +All above steps are run in `syncJob`, which is called when external events happen, for this it happens when Job is newly created. + +### Volcano Job Scale Up/Down + +The Job's scale up and down correlates to reconciling of the resources the job owns, like PVC/PodGroup/Service/HostFile ConfigMap +so the procedure is kind of similar to the [Job Initialization](#Job Initialization). + +The differences are: + +1. job plugins' callbacks:only the `svc` plugin should update the configmap including the job tasks + +2. create pods when scale up + +3. delete pods when scale down + +However, only when the job is not started, the initialization is run. +So we need a way to know whether it is a scale up/down event that triggered this round of sync. + +The way I propose is to add a new event `JobUpdatedEvent` to indicate that the job is updated(here only cares about the scale up/down). +And accordingly add a new action `UpdateJobAction` to run `UpdateJob` function. And the overall workflow is: +![workflow](images/Job-scale-up-down.PNG) + + +### Admission webhook + +Should prevent invalid mutating Job Spec on the fly. In this proposal, we only allow replicas update. Any other spec changes will be prohibited. + + + + + + + + + + + From 50ad1a611b68a30c11465afb8f95152ba81ccc95 Mon Sep 17 00:00:00 2001 From: xuzhonghu Date: Sun, 26 Apr 2020 16:04:31 +0800 Subject: [PATCH 2/4] update --- docs/design/job-scale-up-down.md | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/docs/design/job-scale-up-down.md b/docs/design/job-scale-up-down.md index 4b0efed94b..37870f2622 100644 --- a/docs/design/job-scale-up-down.md +++ b/docs/design/job-scale-up-down.md @@ -5,9 +5,11 @@ ## Motivation Currently, Volcano does not support Job update. It is not allowed to update the `Job.Spec` on the fly. -However, users like ModelArts want to dynamically adjust Job's replicas according to the cluster idle resources +However, many users show appeal to run ML training jobs in a elastic manner. For example ModelArts want to dynamically adjust Job's replicas according to the cluster idle capacity in order to achieve most high efficiency on GPU card. +I propose to support volcano job dynamical scale up/down before more intelligent elasticity in the first step. + ## Design Before this design, let's recall the current Job's initialization @@ -46,17 +48,35 @@ The way I propose is to add a new event `JobUpdatedEvent` to indicate that the j And accordingly add a new action `UpdateJobAction` to run `UpdateJob` function. And the overall workflow is: ![workflow](images/Job-scale-up-down.PNG) +To scale up/down on the fly, Volcano should be responsible to notify the original pods the current status, including the hosts of all the pods. +This is done by plugins, so to distinguish from the initialization phase, a new `OnJobUpdate` is introduced. +It is to reconcile all the associated configs of the job. Currently, the `svc` plugin should update the configmap of all the hosts. -### Admission webhook +**NOTE**: Users should watch the `/etc/volcano` to get the up-to-date hosts files if they want to be aware of the training workers. -Should prevent invalid mutating Job Spec on the fly. In this proposal, we only allow replicas update. Any other spec changes will be prohibited. +``` +type PluginInterface interface { + // The unique name of Plugin. + Name() string + // for all pod when createJobPod + OnPodCreate(pod *v1.Pod, job *vcbatch.Job) error - + // do once when syncJob + OnJobAdd(job *vcbatch.Job) error + // do once when killJob + OnJobDelete(job *vcbatch.Job) error + OnJobUpdate(job *vcbatch.Job) error +} +``` +### Admission webhook + +Should prevent invalid mutating Job Spec on the fly. In this proposal, we only allow replicas update. Any other spec changes will be prohibited. +It is also not allowed if the number of total replicas is less than the `minAvailable`. From d943b1f6b03fe32fc7d2cc9c0347809ad93a2dc8 Mon Sep 17 00:00:00 2001 From: xuzhonghu Date: Wed, 29 Apr 2020 14:01:15 +0800 Subject: [PATCH 3/4] explicitly declare the workflow when scale up/down --- docs/design/job-scale-up-down.md | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/docs/design/job-scale-up-down.md b/docs/design/job-scale-up-down.md index 37870f2622..81038ec281 100644 --- a/docs/design/job-scale-up-down.md +++ b/docs/design/job-scale-up-down.md @@ -18,13 +18,15 @@ Before this design, let's recall the current Job's initialization When a Volcano job is created, the job controller does the following to run/manage all of its tasks. -1. all the plugins execute OnJobAdd callbacks +1. all the plugins execute OnJobAdd callbacks to create service and hosts configmap, etc 2. create pvc for the job 3. create PodGroup for the job -4. create pods equals the replicas of the job +4. execute plugins' OnPodAdd callbacks to set pod related env, mount hostfile, etc + +5. call the kube-apiserver to create pods equals the replicas of the job All above steps are run in `syncJob`, which is called when external events happen, for this it happens when Job is newly created. @@ -72,12 +74,30 @@ type PluginInterface interface { } ``` +`UpdateJob` is much like the current `SyncJob`, and it's workflow is: + +1. all the plugins execute OnJobUpdate callbacks, which is to update all the envs, service and hosts configmap. + +2. create pvc for the job if necessary + +3. update PodGroup for the job if necessary + +4. execute plugins' OnPodAdd callbacks to set pod related env, mount hostfile, etc + +5. call the kube-apiserver to create/delete pods equals the replicas of the job + + +**Note**: when scale down, the pod delete order is from the larger indexed to the lower indexed. But this is not guaranteed as Kubernetes is a eventual consistent system. + + ### Admission webhook -Should prevent invalid mutating Job Spec on the fly. In this proposal, we only allow replicas update. Any other spec changes will be prohibited. +Should prevent invalid mutating Job Spec on the fly. In this proposal, we only allow `replicas` and `minAvailable` update. Any other spec changes will be prohibited. It is also not allowed if the number of total replicas is less than the `minAvailable`. +`minAvailable` must be greater than zero, we depend on it to maintain the job status. + From 2aa0049b62d604faaffd244fe07adf102e1f78d7 Mon Sep 17 00:00:00 2001 From: xuzhonghu Date: Thu, 7 May 2020 13:55:34 +0800 Subject: [PATCH 4/4] Add warning: env could not be changed on the fly --- docs/design/job-scale-up-down.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/design/job-scale-up-down.md b/docs/design/job-scale-up-down.md index 81038ec281..bb403022cb 100644 --- a/docs/design/job-scale-up-down.md +++ b/docs/design/job-scale-up-down.md @@ -54,7 +54,11 @@ To scale up/down on the fly, Volcano should be responsible to notify the origina This is done by plugins, so to distinguish from the initialization phase, a new `OnJobUpdate` is introduced. It is to reconcile all the associated configs of the job. Currently, the `svc` plugin should update the configmap of all the hosts. -**NOTE**: Users should watch the `/etc/volcano` to get the up-to-date hosts files if they want to be aware of the training workers. +**NOTE**: + +1. Users should watch the `/etc/volcano` to get the up-to-date hosts files if they want to be aware of the training workers. + +2. The env `VC_{task name}_HOSTS` `VC_{task name}_NUM` of the existing pods can not be mutated on the fly, so be careful not to use it. ``` type PluginInterface interface { @@ -97,7 +101,3 @@ Should prevent invalid mutating Job Spec on the fly. In this proposal, we only a It is also not allowed if the number of total replicas is less than the `minAvailable`. `minAvailable` must be greater than zero, we depend on it to maintain the job status. - - - -