使用 Private Service Connect 接口进行 Vertex AI 训练

建议使用 Private Service Connect 接口进行专用连接,因为它可以减少 IP 地址耗尽的可能性,并允许进行传递对等互连。

Vertex AI 自定义作业和永久性资源支持 Private Service Connect 接口。

概览

Vertex AI Training 自定义作业和永久性资源支持 Private Service Connect 接口。如需使用 Private Service Connect 接口,您需要在用户项目中设置 VPC 网络、子网和网络连接。请参阅设置 Private Service Connect 接口。 在创建自定义作业或持久性资源以启用 Private Service Connect 接口的请求中,必须包含网络连接名称。

Vertex AI Private Service Connect 出站流量与其他网络的连接

Vertex AI 已集成 Private Service Connect 支持的出站网络连接(请参阅连接到其他网络中的工作负载),但以下情况除外:

  • 不支持出站流量通过客户的专用 Google 访问通道。Private Service Connect 出站流量会针对专用 Google 访问通道在本地解析。

  • 仅当启用 VPC Service Control 时,才支持出站流量流向 Cloud NAT。

限制

  • Private Service Connect 接口不支持外部 IP 地址。

价格

如需了解 Private Service Connect 接口的价格,请参阅所有网络价格页面中的“使用 Private Service Connect 接口访问提供方或使用方 VPC 网络”部分。

准备工作

在用户项目中为 Private Service Connect 接口设置资源

创建具有 Private Service Connect 接口的自定义训练作业

您可以使用 Vertex AI SDK for Python 或 REST API 通过 Private Service Connect 接口创建自定义训练作业。

Python

如需使用 Vertex AI SDK for Python 创建具有 PSC-I 的自定义训练作业,请使用 aiplatform_v1/services/job_service 定义配置作业。

Python

from google.cloud import aiplatform


def create_custom_job_psci_sample(
    project: str,
    location: str,
    bucket: str,
    display_name: str,
    machine_type: str,
    replica_count: int,
    image_uri: str,
    network_attachment: str,
    domain: str,
    target_project: str,
    target_network: str,
):
    """Custom training job sample with PSC Interface Config."""
    aiplatform.init(project=project, location=location, staging_bucket=bucket)

    worker_pool_specs = [{
        "machine_spec": {
            "machine_type": machine_type,
        },
        "replica_count": replica_count,
        "container_spec": {
            "image_uri": image_uri,
            "command": [],
            "args": [],
        },
    }]
    psc_interface_config = {
        "network_attachment": network_attachment,
        "dns_peering_configs": [
            {
                "domain": domain,
                "target_project": target_project,
                "target_network": target_network,
            },
        ],
    }
    job = aiplatform.CustomJob(
        display_name=display_name,
        worker_pool_specs=worker_pool_specs,
    )

    job.run(psc_interface_config=psc_interface_config)

  • project:您的项目 ID。 您可以在 Google Cloud 控制台欢迎页面中找到这些 ID。
  • location:请参阅可用位置列表
  • bucket:将 bucket 替换为您有权访问的存储桶的名称。
  • display_name:永久性资源的显示名称。
  • machine_type指定计算资源
  • replica_count:每次试验要使用的工作器副本数。
  • service_attachment:服务连接资源的名称。如果启用了 Private Service Connect,则填充此字段。
  • image_uri:包含训练代码的 Docker 容器映像的 URI。了解如何创建自定义容器映像
  • network_attachment:您在为 Private Service Connect 设置资源时创建的网络连接的名称或完整路径。
  • domain:您在设置专用 DNS 对等互连时创建的专用 Cloud DNS 区域的 DNS 名称。
  • target_project:托管 VPC 网络的项目。
  • target_network:VPC 网络名称。

REST

如需创建自定义训练作业,请使用 customJobs.create 方法发送 POST 请求。

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

  • LOCATION:将运行容器或 Python 软件包的区域。
  • PROJECT_ID:您的项目 ID
  • JOB_NAMECustomJob 的显示名称。
  • REPLICA_COUNT:要使用的工作器副本的数量。在大多数情况下,对于第一个工作器池,请设置为 1
  • 如果训练应用在自定义容器中运行,请指定以下内容:
    • IMAGE_URI:包含训练代码的 Docker 容器映像的 URI。了解如何创建自定义容器映像
    • NETWORK_ATTACHMENT:您在设置 Private Service Connect 接口时创建的网络连接的名称或完整路径。
    • 如果您需要专用 DNS 对等互连,则必须填写 dns_peering_configs 字段。对于此列表,每个项目包含:
      • DOMAIN_SUFFIX:您在设置专用 DNS 对等互连时创建的专用 Cloud DNS 地区的 DNS 名称。
      • TARGET_PROJECT:托管 VPC 网络的项目。
      • TARGET_NETWORK:VPC 网络名称。

HTTP 方法和网址:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

请求 JSON 正文:

"display_name": JOB_NAME,
"job_spec": {
    "worker_pool_specs": [
      {
        "machine_spec": {
          "machine_type": "n2-standard-4",
        },
        "replica_count": REPLICA_COUNT,
        "container_spec": {
          "image_uri": IMAGE_URI,
        },
      },
    ],
    "psc_interface_config": {
      "network_attachment": NETWORK_ATTACHMENT,
      "dns_peering_configs": [
         {
          "domain": DOMAIN_SUFFIX,
          "target_project": TARGET_PROJECT,
          "target_network": TARGET_NETWORK
         }
      ],
    },
    "enable_web_access": 1
}

如需发送请求,请选择以下方式之一:

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/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

您应该会收到类似以下内容的 JSON 响应: