作业调度

如何使用 gang-scheduling 调度作业

本指南介绍了如何使用 KueueVolcano 调度器带有 coscheduling 的调度器插件来支持 Kubeflow 中的 gang-scheduling,以允许作业同时运行多个 pod。

使用 gang-scheduling 运行作业

Training Operator 和 MPI Operator 支持使用 Kueue、Volcano 调度器和带有 coscheduling 的调度器插件来运行具有 gang-scheduling 的作业。

将 Kueue 与 Training Operator 作业一起使用

按照 本指南学习 如何将 Kueue 与 Training Operator 作业一起使用,并管理您的 ML 训练作业队列

带有 coscheduling 的调度器插件

您必须首先在您的集群中安装带有 coscheduling 的调度器插件,将其作为 Kubernetes 的默认调度器或辅助调度器,并配置操作员以在以下内容中选择 gang-scheduling 的调度器名称

  • training-operator
...
    spec:
      containers:
        - command:
            - /manager
+           - --gang-scheduler-name=scheduler-plugins
          image: kubeflow/training-operator
          name: training-operator
...
  • mpi-operator (已将调度器插件安装为默认调度器)
...
    spec:
      containers:
      - args:
+       - --gang-scheduling=default-scheduler
        - -alsologtostderr
        - --lock-namespace=mpi-operator
        image: mpioperator/mpi-operator:0.4.0
        name: mpi-operator
...
  • mpi-operator (已将调度器插件安装为辅助调度器)
...
    spec:
      containers:
      - args:
+       - --gang-scheduling=scheduler-plugins-scheduler
        - -alsologtostderr
        - --lock-namespace=mpi-operator
        image: mpioperator/mpi-operator:0.4.0
        name: mpi-operator
...

注意: Kubeflow 中的调度器插件和操作员通过使用 PodGroup 实现 gang-scheduling。操作员会自动创建作业的 PodGroup。

如果您在集群中将调度器插件安装为辅助调度器,您需要在 CustomJob 资源(例如 TFJob)中指定调度器名称,例如

apiVersion: "kubeflow.org/v1"
kind: TFJob
metadata:
  name: tfjob-simple
  namespace: kubeflow
spec:
  tfReplicaSpecs:
    Worker:
      replicas: 2
      restartPolicy: OnFailure
      template:
        spec:
+         schedulerName: scheduler-plugins-scheduler
          containers:
            - name: tensorflow
              image: kubeflow/tf-mnist-with-summaries:latest
              command:
                - "python"
                - "/var/tf_mnist/mnist_with_summaries.py"

如果您将调度器插件安装为默认调度器,则无需在 CustomJob 资源(例如 TFJob)中指定调度器名称。

Volcano 调度器

您必须首先在集群中安装 volcano 调度器,将其作为 Kubernetes 的辅助调度器,并配置操作员以在以下内容中选择 gang-scheduling 的调度器名称

  • training-operator
...
    spec:
      containers:
        - command:
            - /manager
+           - --gang-scheduler-name=volcano
          image: kubeflow/training-operator
          name: training-operator
...
  • mpi-operator
...
    spec:
      containers:
      - args:
+       - --gang-scheduling=volcano
        - -alsologtostderr
        - --lock-namespace=mpi-operator
        image: mpioperator/mpi-operator:0.4.0
        name: mpi-operator
...

注意: Volcano 调度器和 Kubeflow 中的操作员通过使用 PodGroup 实现 gang-scheduling。操作员会自动创建作业的 PodGroup。

使用 volcano 调度器将作业作为 gang 调度的 yaml 与非 gang 调度器相同,例如

apiVersion: "kubeflow.org/v1beta1"
kind: "TFJob"
metadata:
  name: "tfjob-gang-scheduling"
spec:
  tfReplicaSpecs:
    Worker:
      replicas: 1
      template:
        spec:
          containers:
            - args:
                - python
                - tf_cnn_benchmarks.py
                - --batch_size=32
                - --model=resnet50
                - --variable_update=parameter_server
                - --flush_stdout=true
                - --num_gpus=1
                - --local_parameter_device=cpu
                - --device=gpu
                - --data_format=NHWC
              image: gcr.io/kubeflow/tf-benchmarks-gpu:v20171202-bdab599-dirty-284af3
              name: tensorflow
              resources:
                limits:
                  nvidia.com/gpu: 1
              workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks
          restartPolicy: OnFailure
    PS:
      replicas: 1
      template:
        spec:
          containers:
            - args:
                - python
                - tf_cnn_benchmarks.py
                - --batch_size=32
                - --model=resnet50
                - --variable_update=parameter_server
                - --flush_stdout=true
                - --num_gpus=1
                - --local_parameter_device=cpu
                - --device=cpu
                - --data_format=NHWC
              image: gcr.io/kubeflow/tf-benchmarks-cpu:v20171202-bdab599-dirty-284af3
              name: tensorflow
              resources:
                limits:
                  cpu: "1"
              workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks
          restartPolicy: OnFailure

关于 gang-scheduling

当使用 Volcano 调度器或带有 coscheduling 的调度器插件应用 gang-scheduling 时,作业只有在具备足够资源以供作业的所有 pod 使用时才能运行。否则,所有 pod 将处于 Pending 状态,等待足够的资源。例如,如果创建了一个需要 N 个 pod 的作业,但只有足够的资源调度 N-2 个 pod,则该作业的所有 N 个 pod 将保持 Pending 状态。

注意:在高负载下,如果作业的某个 pod 在作业运行时崩溃,它可能会让其他 pod 有机会占用资源并导致死锁。

故障排除

如果您的 volcano 调度器持续出现与 RBAC 相关的问题。

您可以尝试将以下规则添加到 volcano 调度器使用的调度器的 clusterrole 中。

- apiGroups:
  - '*'
  resources:
  - '*'
  verbs:
  - '*'

反馈

此页面是否有帮助?