对于请求 GPU 资源的自定义训练作业,动态工作负载调度器可让您根据请求的 GPU 资源何时可用来调度作业。本页面介绍了如何使用动态工作负载调度器安排自定义训练作业,以及如何在 Vertex AI 上自定义调度行为。
推荐的用例
在以下情况下,我们建议您使用动态工作负载调度器来安排自定义训练作业:
- 自定义训练作业请求 A100 或 H100 GPU,并且您希望在请求的资源可用后立即运行作业。例如,当 Vertex AI 在高峰时段以外分配 GPU 资源时。
- 您的工作负载需要多个节点,并且在所有 GPU 节点同时预配并准备就绪之前,无法开始运行。例如,您要创建分布式训练作业。
要求
如需使用动态工作负载调度器,您的自定义训练作业必须满足以下要求:
- 自定义训练作业的
timeout
最长为 7 天或更短。 - 您的自定义训练作业会为所有工作器池使用相同的机器配置。
支持的作业类型
支持所有自定义训练作业类型,包括 CustomJob
、HyperparameterTuningjob
和 TrainingPipeline
。
在自定义训练作业中启用动态工作负载调度器
如需在自定义训练作业中启用动态工作负载调度器,请在创建作业时将 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.strategy
和 scheduling.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 配额和限制。
结算
您只需为作业运行的时间段付费,而无需为作业等待资源可用的时间付费。如需了解详情,请参阅价格。