使用专用 IP 地址进行自定义训练

与使用公共 IP 地址相比,使用专用 IP 地址连接到训练作业可提高网络安全性并缩短网络延迟时间。 如需使用专用 IP 地址,您可以使用 Virtual Private Cloud (VPC) 将网络与任何类型的 Vertex AI 自定义训练作业对等互连。这样,您的训练作业即可访问 Google Cloud 或本地网络内的专用 IP 地址。

本指南介绍了如何在您已经设置 VPC 网络对等互连以使网络与 Vertex AI CustomJobHyperparameterTuningJob 或自定义 TrainingPipeline 资源对等互连后,在网络中运行自定义训练作业。

请注意,如果您同时使用 TPU 虚拟机,则无法使用专用 IP 地址进行自定义训练。

概览

在使用专用 IP 地址提交自定义训练作业之前,您必须先配置专用服务访问通道以在您的网络与 Vertex AI 之间创建对等互连连接。如果您已经进行了设置,则可以使用现有的对等互连连接。

本指南包含以下任务:

  • 了解为自定义训练预留的 IP 地址范围。
  • 验证您的现有对等互连连接的状态。
  • 在您的网络上执行 Vertex AI 自定义训练。
  • 检查另一个网络上的活跃训练,然后再对另一个网络进行训练。
  • 测试训练代码是否可以访问网络中的专用 IP。

为自定义训练预留 IP 地址范围

当您为服务提供方预留 IP 范围时,该范围可供供 Vertex AI 和其他服务使用。此表显示您可以通过 /16 到 /19 的预留范围运行的最大并行训练作业数量(假设此范围几乎被 Vertex AI 使用)。如果您与使用同一 IP 地址范围的其他服务提供方连接,请分配更大的范围以适应其他服务提供方,以免 IP 地址用尽。

训练作业的机器配置 预留 IP 地址范围 并行作业的数量上限
最多 8 个节点。
例如:第一个工作器池中有 1 个主副本、第二个工作器池中的 6 个副本,以及第三个工作器池中的 1 个工作器(充当参数服务器)
/16 63
/17 31
/18 15
/19 7
最多 16 个节点。
例如:第一个工作器池中有 1 个主副本、第二个工作器池中的 14 个副本,以及第三个工作器池中的 1 个工作器(充当参数服务器)
/16 31
/17 15
/18 7
/19 3
最多 32 个节点。
例如:第一个工作器池中有 1 个主副本、第二个工作器池中的 30 个副本,以及第三个工作器池中的 1 个工作器(充当参数服务器)
/16 15
/17 7
/18 3
/19 1

详细了解如何为分布式训练配置工作器池

检查现有对等互连连接的状态

如果您已有与 Vertex AI 一起使用的对等互连连接,则可以列出它们以检查状态:

gcloud compute networks peerings list --network NETWORK_NAME

您应该看到对等互连连接的状态为 ACTIVE。详细了解处于活跃状态的对等互连连接

执行自定义训练

执行自定义训练时,您必须指定希望 Vertex AI 有权访问的网络的名称。

根据自定义训练的方式,在以下 API 字段中指定网络:

如果您未指定网络名称,则 Vertex AI 会在没有对等互连连接的情况下运行自定义训练,并且无法访问项目中的专用 IP 地址。

示例:使用 gcloud CLI 创建 CustomJob

以下示例展示了如何使用 gcloud CLI 运行使用预构建容器的 CustomJob 时指定网络。如果您要以不同的方式执行自定义训练,请按照您使用的自定义训练作业类型的相关说明添加 network 字段。

  1. 创建一个 config.yaml 文件以指定网络。如果您使用的是共享 VPC,请使用您的 VPC 宿主项目的编号。

    确保网络名称的格式正确无误:

    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    
    cat <<EOF > config.yaml
    network: projects/PROJECT_NUMBER/global/networks/NETWORK_NAME
    EOF
    
  2. 创建训练应用以在 Vertex AI 上运行。

  3. 创建 CustomJob,并传入您的 config.yaml 文件:

    gcloud ai custom-jobs create \
      --region=LOCATION \
      --display-name=JOB_NAME \
      --python-package-uris=PYTHON_PACKAGE_URIS \
      --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=PYTHON_PACKAGE_EXECUTOR_IMAGE_URI,python-module=PYTHON_MODULE \
      --config=config.yaml
    

如需了解如何替换此命令中的占位符,请参阅创建自定义训练作业

在不同网络上运行作业

您无法在其他网络上执行自定义训练,也无法在新网络上执行自定义训练。在切换到其他网络之前,您必须等待所有提交的 CustomJobHyperparameterTuningJob 和自定义 TrainingPipeline 资源完成,否则必须将其取消。

测试训练作业访问权限

本部分介绍如何测试自定义训练资源是否可以访问网络中的专用 IP。

  1. 在 VPC 网络中创建一个 Compute Engine 实例。
  2. 检查您的防火墙规则,确保它们不会限制来自 Vertex AI 网络的入站流量。如果是这样,请添加一条规则,以确保 Vertex AI 网络可以访问您为 Vertex AI(以及其他服务提供方)预留的 IP 范围。
  3. 在虚拟机实例上设置本地服务器,以创建 Vertex AI CustomJob 的端点才能访问。
  4. 创建 Python 训练应用以在 Vertex AI 上运行。请创建用于访问您在上一步中设置的端点的代码,而不是模型训练代码。
  5. 按照前面的示例创建 CustomJob

常见问题

本部分列出了使用 Vertex AI 配置 VPC 网络对等互连时的一些常见问题。

  • 将 Vertex AI 配置为使用您的网络时,请指定完整的网络名称:

    "projects/YOUR_PROJECT_NUMBER/global/networks/YOUR_NETWORK_NAME"

  • 在使用其他网络执行自定义训练之前,请确保不要对网络执行自定义训练。

  • 确保已为您的网络所连接的所有服务提供方(包括 Vertex AI)分配足够的 IP 地址范围。

如需了解更多问题排查信息,请参阅 VPC 网络对等互连问题排查指南

后续步骤