将 Private Service Connect 接口用于 Vertex AI Training

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

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

概览

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

Gemini Enterprise Agent Platform Private Service Connect 出站流量与其他网络的连接

Gemini Enterprise Agent Platform 已集成 Private Service Connect 支持的出站流量网络连接(请参阅连接到其他网络中的工作负载),但存在以下架构行为。

访问 Google API 和仅限内部使用的服务

当 Gemini Enterprise Agent Platform 将流量发送到 Google API 时,流量会在生产者环境中本地解析,并且不会使用使用者 VPC 网络的专用 Google 访问通道设置或路由。

注意

  • VPC 身份要求:由于本地解析会绕过使用方 VPC 网络路径,因此流量不会携带 VPC 网络的身份。这会导致对仅限内部访问的 Google 服务(例如配置了内部入站流量的 Cloud Run 服务)的请求失败,并显示 404 或 403 错误。
  • Private Service Connect 端点解决方案:如需以私密方式访问这些内部服务,您必须在 VPC 网络中为 Google API 配置 Private Service Connect 端点。
  • DNS 配置:您必须确保服务网域(例如 *.run.app)解析为 Private Service Connect 端点的内部 IP 地址,以确保流量始终保持在纯私有路径上。

互联网出站流量和 Cloud NAT

默认情况下,Gemini Enterprise Agent Platform 使用 Google 管理的互联网网关来处理出站流量,而不是使用 VPC 网络的路由。仅当项目属于 VPC Service Controls 边界时,才会使用消费者的 Cloud NAT 网关进行出站。

此安全边界会阻止默认的互联网访问,强制流量通过 Private Service Connect 接口和 VPC 网络的路由规则。如果您未使用 VPC Service Control,出站互联网流量将完全绕过您的 VPC 网络和 Cloud NAT 网关。

限制

如需了解 Private Service Connect 接口的功能和限制,请参阅关于通过 Private Service Connect 接口访问 Gemini Enterprise Agent Platform 服务

价格

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

准备工作

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

创建具有 Private Service Connect 接口的 Gemini Enterprise Agent Platform 无服务器训练作业

您可以使用 Agent Platform SDK for Python 或 REST API 通过 Private Service Connect 接口创建无服务器训练作业。

Python

如需使用 Agent Platform 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:您可以在 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](/resource-manager/docs/creating-managing-projects#identifiers)。。
  • 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 响应: