将预留与训练搭配使用

为确保虚拟机资源在自定义训练作业需要时可用,您可以使用 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 训练时,不支持以下服务和功能:

  • 自定义训练作业必须使用自定义服务账号。请参阅使用自定义服务账号

结算

使用 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:必须为 ANYSPECIFIC_RESERVATIONNONE

      • 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_NAMELABEL_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

后续步骤