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

建议使用 Private Service Connect 接口进行专用连接,因为这样可以降低 IP 耗尽的几率,并允许进行传递性对等。

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

概览

Vertex AI 训练自定义作业和永久性资源支持 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

如需使用 Python 版 Vertex AI SDK 创建包含 PSC-I 的自定义训练作业,请使用 aiplatform_v1beta1/services/job_service 定义配置该作业。

Python

from google.cloud import aiplatform
from google.cloud import aiplatform_v1beta1


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_name: str,
):
    """Custom training job sample with PSC-I through aiplatform_v1beta1."""
    aiplatform.init(project=project, location=location, staging_bucket=bucket)

    client_options = {"api_endpoint": f"{location}-aiplatform.googleapis.com"}

    client = aiplatform_v1beta1.JobServiceClient(client_options=client_options)

    request = aiplatform_v1beta1.CreateCustomJobRequest(
        parent=f"projects/{project}/locations/{location}",
        custom_job=aiplatform_v1beta1.CustomJob(
            display_name=display_name,
            job_spec=aiplatform_v1beta1.CustomJobSpec(
                worker_pool_specs=[
                    aiplatform_v1beta1.WorkerPoolSpec(
                        machine_spec=aiplatform_v1beta1.MachineSpec(
                            machine_type=machine_type,
                        ),
                        replica_count=replica_count,
                        container_spec=aiplatform_v1beta1.ContainerSpec(
                            image_uri=image_uri,
                        ),
                    )
                ],
                psc_interface_config=aiplatform_v1beta1.PscInterfaceConfig(
                    network_attachment=network_attachment_name,
                ),
            ),
        ),
    )

    response = client.create_custom_job(request=request)

    return response

  • 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_name:您在用户项目中为 Private Service Connect 设置资源时指定的名称。

REST

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

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

  • LOCATION:将运行容器或 Python 软件包的区域。
  • PROJECT_ID:您的项目 ID
  • JOB_NAMECustomJob 的显示名称。
  • REPLICA_COUNT:要使用的工作器副本的数量。在大多数情况下,对于第一个工作器池,请设置为 1
  • 如果训练应用在自定义容器中运行,请指定以下内容:

HTTP 方法和网址:

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

请求 JSON 正文:

"display_name": JOB_NAME,
"job_spec": {
    "worker_pool_specs": [
      {
        "machine_spec": {
          "machine_type": "n1-standard-4",
        },
        "replica_count": REPLICA_COUNT,
        "container_spec": {
          "image_uri": IMAGE_URI,
        },
      },
    ],
    "psc_interface_config": {
      "network_attachment": NETWORK_ATTACHMENT_NAME
    },
    "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/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

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