将预留与训练结合使用

本文档介绍了如何使用 Compute Engine 预留功能,以高度确保自定义训练作业拥有运行所需的资源。

为确保自定义训练作业在需要时有虚拟机 (VM) 实例资源可用,请使用 Compute Engine 预留。预留为获取具有指定硬件配置的一个或多个虚拟机的容量提供了较高的保障。虚拟机预留会从您创建预留到删除预留期间产生该虚拟机的费用。不过,在您使用该虚拟机期间,总费用与未预留的虚拟机相同。如需了解详情,请参阅 Compute Engine 可用区级资源的预留

限制和要求

将 Compute Engine 预留与 Vertex AI 搭配使用时,请考虑以下限制和要求:

  • Vertex AI 只能使用已连接 GPU 的虚拟机的预留。
  • 仅支持将 Compute Engine 预留与 Vertex AI 搭配使用来进行自定义训练和预测。
  • 预留的虚拟机属性必须与您的 Vertex AI 工作负载完全匹配,才能使用该预留。例如,如果预留指定了 a2-ultragpu-8g 机器类型,则 Vertex AI 工作负载只有在也使用 a2-ultragpu-8g 机器类型时才能使用该预留。请参阅要求
  • 如需使用 GPU 虚拟机的共享预留,您必须使用其所有者项目或与该预留共享的使用方项目使用该预留。请参阅 共享预留的工作原理
  • 为了支持定期更新 Vertex AI 部署,我们建议您为每个并发部署至少增加 1 个虚拟机。
  • 在使用 Compute Engine 预留服务进行 Vertex AI 训练时,不支持以下服务和功能:

结算

使用 Compute Engine 预留时,您需要为以下各项支付费用:

  • Compute Engine 资源的 Compute Engine 价格,包括所有适用的承诺使用折扣 (CUD)。请参阅 Compute Engine 价格
  • 除基础设施使用费之外,还需支付 Vertex AI 自定义训练管理费。请参阅自定义训练模型价格

准备工作

允许使用预留

在使用 GPU 虚拟机的预留资源之前,您必须设置其共享政策,以允许 Vertex AI 使用该预留资源。为此,请使用以下方法之一:

在创建预留时允许使用

在创建 GPU 虚拟机的单个项目共享预留时,您可以允许 Vertex AI 使用预留,如下所示:

  • 如果您使用的是 Google Cloud 控制台,请在 Google Cloud 服务部分中选择共享预留
  • 如果您使用的是 Google Cloud CLI,请添加 --reservation-sharing-policy 标志并将其设置为 ALLOW_ALL
  • 如果您使用的是 REST API,请在请求正文中添加 serviceShareType 字段并将其设置为 ALLOW_ALL

允许在现有预留中使用

如需允许 Vertex AI 使用现有的 GPU 虚拟机预留,请参阅 修改预留的共享政策

使用预留创建自定义训练作业

如需创建使用 GPU 虚拟机的 Compute Engine 预留的自定义训练作业,请使用 REST API。

REST

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION:将运行容器或 Python 软件包的区域。
  • PROJECT_ID:创建预留的项目。如需使用其他项目中的共享预留,您必须与该项目共享该预留。如需了解详情,请参阅 修改共享预留中的使用方项目
  • JOB_NAME:必填。CustomJob 的显示名称。
  • MACHINE_TYPE:要用于作业的机器类型。其默认设置为 n1-standard-2。如需详细了解受支持的机器类型,请参阅为自定义训练配置计算资源
  • ACCELERATOR_TYPE:要挂接到机器的加速器类型。如需详细了解每种机器类型支持的 GPU 类型,请参阅用于处理计算工作负载的 GPU
  • ACCELERATOR_COUNT:要挂接到机器的加速器数量。
  • 定义自定义训练作业:
    • 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",
          "acceleratorType": "ACCELERATOR_TYPE",
          "acceleratorCount": ACCELERATOR_COUNT,
          "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

后续步骤