为确保虚拟机资源在自定义训练作业需要时可用,您可以使用 Compute Engine 预留。预留为获取 Compute Engine 资源的容量提供了较高的保障。如需了解详情,请参阅 Compute Engine 可用区级资源的预留。
概览
您的 Vertex AI 自定义训练和预测作业可以使用 Compute Engine 预留。您的预留必须指定 A2 或 A3 机器类型。如果这些预留的资源符合任何承诺使用折扣 (CUD) 的条件,那么当您的虚拟机使用这些预留资源时,您将以折扣价获得这些资源。请参阅预留资源的 CUD。
限制和要求
将 Compute Engine 预留与 Vertex AI 搭配使用时,请考虑以下限制和要求:
-
Vertex AI 只能使用以下机器系列的预留:
- A2
- A3
- 仅支持将 Compute Engine 预留与 Vertex AI 搭配使用来进行自定义训练和预测。
- 确保您的 Vertex AI 作业有足够的配额。请参阅共享预留的其他配额要求。
- 为了支持定期更新 Vertex AI 部署,我们建议您为每个并发部署至少增加 1 个虚拟机。
- 确保您的组织政策限制条件允许共享预留。请参阅允许和限制项目创建和修改共享预留。
- 您的预留的虚拟机实例属性必须与您的 Vertex AI 工作负载完全匹配,才能使用该预留。例如,如果 Vertex AI 工作负载具有
a2-megagpu-16g
机器类型,则预订的机器类型必须与之匹配。请参阅要求。 -
在使用 Compute Engine 预订服务进行 Vertex AI 训练时,不支持以下服务和功能:
- 客户管理的加密密钥 (CMEK)
- 动态工作负载调度器
- 在永久性资源上运行训练作业
- 自定义训练作业必须使用自定义服务账号。请参阅使用自定义服务账号。
结算
使用 Compute Engine 预留时,您需要为以下各项支付费用:
- Compute Engine 资源的 Compute Engine 价格,包括所有适用的承诺使用折扣 (CUD)。请参阅 Compute Engine 价格。
- 除基础设施使用费之外,还需支付 Vertex AI 自定义训练管理费。请参阅自定义训练模型价格。
准备工作
允许使用预留
在使用 A2 或 A3 虚拟机的预留资源之前,您必须设置其共享政策,以允许 Vertex AI 使用该预留资源。为此,请使用以下方法之一:
在创建预留时允许使用
在创建 A2 或 A3 虚拟机的单个项目或共享预留时,您可以指定允许 Vertex AI 使用预留,如下所示:
- 如果您使用的是 Google Cloud 控制台,请在 Google Cloud 服务部分中选择共享预留。
- 如果您使用的是 Google Cloud CLI,请添加
--reservation-sharing-policy
标志并将其设置为ALLOW_ALL
。 - 如果您使用的是 REST API,请添加
serviceShareType
字段并将其设置为ALLOW_ALL
。
允许在现有预留中使用
如需允许 Vertex AI 使用现有的 A2 或 A3 虚拟机预留,请参阅修改预留的共享政策。使用预留创建自定义训练作业
您可以使用 REST API 创建使用 Compute Engine 预订的自定义训练作业。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION:将运行容器或 Python 软件包的区域。
- PROJECT_ID:您的项目 ID。
-
JOB_NAME:必填。
CustomJob
的显示名称。 - 定义自定义训练作业:
- MACHINE_TYPE:机器类型。请参阅可用于训练的机器类型。
RESERVATION_AFFINITY_TYPE:必须为
ANY
、SPECIFIC_RESERVATION
或NONE
。ANY
表示customJob
的虚拟机可以自动使用具有匹配属性的任何预留。SPECIFIC_RESERVATION
表示您的customJob
的虚拟机只能使用虚拟机通过名称明确指向的预留。NONE
表示customJob
的虚拟机无法使用任何预留。指定NONE
的效果与省略预留亲和性规范的效果相同。
- RESERVATION_NAME:预留的名称。
- DISK_TYPE:可选。用于作业的启动磁盘类型:
pd-standard
(默认)或pd-ssd
。详细了解磁盘类型。 - DISK_SIZE:可选。用于作业的启动磁盘大小(以 GB 为单位)。默认值为 100。
- REPLICA_COUNT:要使用的工作器副本的数量。在大多数情况下,对于第一个工作器池,请设置为
1
。 - 如果训练应用在自定义容器中运行,请指定以下内容:
- CUSTOM_CONTAINER_IMAGE_URI:要在每个工作器副本上运行的容器映像的 Artifact Registry 或 Docker Hub URI。
- CUSTOM_CONTAINER_COMMAND:可选。启动容器时要调用的命令。此命令会替换容器的默认入口点。
- CUSTOM_CONTAINER_ARGS:可选。启动容器时要传递的参数。
- 如果训练应用是在预构建容器中运行的 Python 软件包,请指定以下内容:
- EXECUTOR_IMAGE_URI:运行所提供代码的容器映像的 URI。请参阅可用于训练的预构建容器。
- PYTHON_PACKAGE_URIS:以逗号分隔的 Cloud Storage URI 列表,指定作为训练程序的 Python 软件包文件及其从属软件包。软件包 URI 的数量上限为 100。
- PYTHON_MODULE:安装软件包后要运行的 Python 模块名称。
- PYTHON_PACKAGE_ARGS:可选。要传递给 Python 模块的命令行参数。
- TIMEOUT:可选。作业的最长运行时间。
- 指定要应用于此自定义作业的任何标签的 LABEL_NAME 和 LABEL_VALUE。
HTTP 方法和网址:
POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/customJobs
请求 JSON 正文:
{ "displayName": "JOB_NAME", "jobSpec": { "workerPoolSpecs": [ { "machineSpec": { "machineType": "MACHINE_TYPE", "reservationAffinity": { "reservationAffinityType": "RESERVATION_AFFINITY_TYPE", "key": "compute.googleapis.com/reservation-name", "values": [ "projects/PROJECT_ID/reservations/RESERVATION_NAME" ] } }, "replicaCount": REPLICA_COUNT, "diskSpec": { "bootDiskType": DISK_TYPE, "bootDiskSizeGb": DISK_SIZE }, // Union field task can be only one of the following: "containerSpec": { "imageUri": CUSTOM_CONTAINER_IMAGE_URI, "command": [ CUSTOM_CONTAINER_COMMAND ], "args": [ CUSTOM_CONTAINER_ARGS ] }, "pythonPackageSpec": { "executorImageUri": EXECUTOR_IMAGE_URI, "packageUris": [ PYTHON_PACKAGE_URIS ], "pythonModule": PYTHON_MODULE, "args": [ PYTHON_PACKAGE_ARGS ] } // End of list of possible types for union field task. } // Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs // for distributed training. ], "scheduling": { "timeout": TIMEOUT } }, "labels": { LABEL_NAME_1": LABEL_VALUE_1, LABEL_NAME_2": LABEL_VALUE_2 } }
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/customJobs"
PowerShell
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content
响应包含有关规范的信息以及 TRAININGPIPELINE_ID。