根据资源可用性安排训练作业

对于请求 GPU 资源的自定义训练作业,动态工作负载调度器可让您根据请求的 GPU 资源何时可用来调度作业。本页面介绍了如何使用动态工作负载调度器安排自定义训练作业,以及如何在 Vertex AI 上自定义调度行为。

在以下情况下,我们建议您使用动态工作负载调度器来安排自定义训练作业:

  • 自定义训练作业请求 A100 或 H100 GPU,并且您希望在请求的资源可用后立即运行作业。例如,当 Vertex AI 在高峰时段以外分配 GPU 资源时。
  • 您的工作负载需要多个节点,并且在所有 GPU 节点同时预配并准备就绪之前,无法开始运行。例如,您要创建分布式训练作业。

要求

如需使用动态工作负载调度器,您的自定义训练作业必须满足以下要求:

  • 自定义训练作业的 timeout 最长为 7 天或更短。
  • 您的自定义训练作业会为所有工作器池使用相同的机器配置。

支持的作业类型

支持所有自定义训练作业类型,包括 CustomJobHyperparameterTuningjobTrainingPipeline

在自定义训练作业中启用动态工作负载调度器

如需在自定义训练作业中启用动态工作负载调度器,请在创建作业时将 scheduling.strategy API 字段设置为 FLEX_START

如需详细了解如何创建自定义训练作业,请参阅以下链接。

配置等待资源可用的时间

您可以在 scheduling.maxWaitDuration 字段中配置作业等待资源的时间。值为 0 表示作业会无限期等待,直到请求的资源可用。默认值为 1 天

示例

以下示例展示了如何为 customJob 启用动态工作负载调度器。选择要使用的界面的标签页。

gcloud

使用 Google Cloud CLI 提交作业时,请在 config.yaml 文件中添加 scheduling.strategy 字段。

示例 YAML 配置文件:

workerPoolSpecs:
  machineSpec:
    machineType: n1-highmem-2
  replicaCount: 1
  containerSpec:
    imageUri: gcr.io/ucaip-test/ucaip-training-test
    args:
    - port=8500
    command:
    - start
scheduling:
  strategy: FLEX_START
  maxWaitDuration: 1800s

python

使用 Vertex AI SDK for Python 提交作业时,请在相关的 CustomJob 创建方法中设置 scheduling_strategy 字段。

from google.cloud.aiplatform_v1.types import custom_job as gca_custom_job_compat

def create_custom_job_with_dws_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    script_path: str,
    container_uri: str,
    service_account: str,
    experiment: str,
    experiment_run: Optional[str] = None,
) -> None:
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket, experiment=experiment)

    job = aiplatform.CustomJob.from_local_script(
        display_name=display_name,
        script_path=script_path,
        container_uri=container_uri,
        enable_autolog=True,
    )

    job.run(
        service_account=service_account,
        experiment=experiment,
        experiment_run=experiment_run,
        max_wait_duration=1800,
        scheduling_strategy=gca_custom_job_compat.Scheduling.Strategy.FLEX_START
    )

REST

使用 Vertex AI REST API 提交作业时,请在创建自定义训练作业时设置 scheduling.strategyscheduling.maxWaitDuration 字段。

示例请求 JSON 正文:

{
  "displayName": "MyDwsJob",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "a2-highgpu-1g",
          "acceleratorType": "NVIDIA_TESLA_A100",
          "acceleratorCount": 1
        },
        "replicaCount": 1,
        "diskSpec": {
          "bootDiskType": "pd-ssd",
          "bootDiskSizeGb": 100
        },
        "containerSpec": {
          "imageUri": "python:3.10",
          "command": [
            "sleep"
          ],
          "args": [
            "100"
          ]
        }
      }
    ],
    "scheduling": {
      "maxWaitDuration": "1800s",
      "strategy": "FLEX_START"
    }
  }
}

配额

当您使用动态工作负载调度器提交作业时,Vertex AI 会消耗抢占式配额,而不是消耗按需 Vertex AI 配额。例如,对于 Nvidia H100 GPU,请改用:

aiplatform.googleapis.com/custom_model_training_nvidia_h100_gpus

Vertex AI 使用:

aiplatform.googleapis.com/custom_model_training_preemptible_nvidia_h100_gpus

不过,可抢占配额仅在名称上使用。您的资源不是抢占式资源,而是像标准资源一样运行。

在使用动态工作负载调度器提交作业之前,请确保您的可抢占配额已增加到足够的数量。如需详细了解 Vertex AI 配额以及如何提交配额增加申请,请参阅 Vertex AI 配额和限制

结算

您只需为作业运行的时间段付费,而无需为作业等待资源可用的时间付费。如需了解详情,请参阅价格

后续步骤