使用基于 Private Service Connect 的专用私有端点进行在线推理

本页中的信息适用于自定义训练的模型和 AutoML 模型。如需了解 Model Garden 部署,请参阅使用 Model Garden 中的模型

借助 Private Service Connect,您可以部署自定义训练的 Vertex AI 模型,并安全地向多个使用方项目和 VPC 网络提供在线推理服务,而无需设置公共 IP 地址、公共互联网访问权限或明确对等互连的内部 IP 地址范围。

对于有以下要求的在线推理应用场景,我们建议使用 Private Service Connect:

  • 要求使用安全的专用连接
  • 要求低延迟
  • 无需可供公开访问

Private Service Connect 使用 VPC 网络中的转发规则将流量单向发送到 Vertex AI 在线推理服务。转发规则会连接到一个服务连接,该服务连接可将 Vertex AI 服务公开给您的 VPC 网络。如需了解详情,请参阅关于通过 Private Service Connect 访问 Vertex AI 服务。 如需详细了解如何设置 Private Service Connect,请参阅虚拟私有云 (VPC) 文档中的 Private Service Connect 概览

专用端点同时支持 HTTP 和 gRPC 通信协议。对于 gRPC 请求,必须包含 x-vertex-ai-endpoint-id 标头,以便正确识别端点。支持以下 API:

  • 预测
  • RawPredict
  • StreamRawPredict
  • Chat Completion(仅限 Model Garden)

您可以使用 Vertex AI SDK for Python 向专用端点发送在线推理请求。如需了解详情,请参阅获取在线推理结果

所需的角色

如需获得创建 Private Service Connect 端点所需的权限,请让您的管理员为您授予项目的 Vertex AI User (roles/aiplatform.user) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含创建 Private Service Connect 端点所需的 aiplatform.endpoints.create 权限。

您也可以使用自定义角色或其他预定义角色来获取此权限。

如需详细了解 Vertex AI 角色和权限,请参阅使用 IAM 进行 Vertex AI 访问权限控制Vertex AI IAM 权限

创建在线推理端点

使用以下任一方法创建启用了 Private Service Connect 的在线推理端点。

Private Service Connect 端点的默认请求超时时间为 10 分钟。在 Vertex AI SDK for Python 中,您可以根据需要指定新的 inference_timeout 值来指定其他请求超时时间,如以下示例所示。最长超时时间值为 3600 秒(1 小时)。

控制台

  1. 在 Google Cloud 控制台的 Vertex AI 部分中,前往在线预测页面。

    转到在线预测

  2. 点击创建

  3. 为端点提供一个显示名称。

  4. 选择 专用

  5. 选择 Private Service Connect

  6. 点击选择项目 ID

  7. 选择要添加到端点许可名单的项目。

  8. 点击继续

  9. 选择模型规范。如需了解详情,请参阅将模型部署到端点

  10. 点击创建以创建端点并将模型部署到该端点。

  11. 记下响应中的端点 ID。

API

REST

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

  • VERTEX_AI_PROJECT_ID:要在其中创建在线预测端点的 Google Cloud 项目的 ID。
  • REGION:要在其中使用 Vertex AI 的区域。
  • VERTEX_AI_ENDPOINT_NAME:在线预测端点的显示名称。
  • ALLOWED_PROJECTS:以英文逗号分隔的 Google Cloud 项目 ID 的列表,每个项目 ID 都用英文引号括起来,例如 ["PROJECTID1", "PROJECTID2"]。 如果某个项目未包含在此列表中,您将无法从该项目向 Vertex AI 端点发送预测请求。请务必在此列表中添加 VERTEX_AI_PROJECT_ID,以便您能够从端点所在的同一项目中调用该端点。
  • INFERENCE_TIMEOUT_SECS:(可选)可选 inferenceTimeout 字段中的秒数。

HTTP 方法和网址:

POST https://REGION-aiplatform.googleapis.com/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints

请求 JSON 正文:

{
  "displayName": "VERTEX_AI_ENDPOINT_NAME",
  "privateServiceConnectConfig": {
    "enablePrivateServiceConnect": true,
    "projectAllowlist": ["ALLOWED_PROJECTS"],
    "clientConnectionConfig": {
      "inferenceTimeout": {
        "seconds": INFERENCE_TIMEOUT_SECS
      }
    }
  }
}

如需发送您的请求,请展开以下选项之一:

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

{
  "name": "projects/VERTEX_AI_PROJECT_NUMBER/locations/REGION/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateEndpointOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-11-05T17:45:42.812656Z",
      "updateTime": "2020-11-05T17:45:42.812656Z"
    }
  }
}
记下 ENDPOINT_ID

Python

在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Python 设置说明执行操作。 如需了解详情,请参阅 Vertex AI Python API 参考文档

如需向 Vertex AI 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证

替换以下内容:

  • VERTEX_AI_PROJECT_ID:要在其中创建在线推理端点的 Google Cloud 项目的 ID
  • REGION:要在其中使用 Vertex AI 的区域
  • VERTEX_AI_ENDPOINT_NAME:在线推理端点的显示名称
  • ALLOWED_PROJECTS:以英文逗号分隔的 Google Cloud项目 ID 的列表,每个项目 ID 都用英文引号括起来。例如 ["PROJECTID1", "PROJECTID2"]。 如果某个项目未包含在此列表中,您将无法从该项目向 Vertex AI 端点发送推理请求。请务必在此列表中添加 VERTEX_AI_PROJECT_ID,以便您可以从端点所在的同一项目中调用该端点。
  • INFERENCE_TIMEOUT_SECS:(可选)可选 inference_timeout 值中的秒数。
PROJECT_ID = "VERTEX_AI_PROJECT_ID"
REGION = "REGION"
VERTEX_AI_ENDPOINT_NAME = "VERTEX_AI_ENDPOINT_NAME"
INFERENCE_TIMEOUT_SECS = "INFERENCE_TIMEOUT_SECS"

from google.cloud import aiplatform

aiplatform.init(project=PROJECT_ID, location=REGION)

# Create the forwarding rule in the consumer project
psc_endpoint = aiplatform.PrivateEndpoint.create(
display_name=VERTEX_AI_ENDPOINT_NAME,
project=PROJECT_ID,
location=REGION,
private_service_connect_config=aiplatform.PrivateEndpoint.PrivateServiceConnectConfig(
    project_allowlist=["ALLOWED_PROJECTS"],
    ),
inference_timeout=INFERENCE_TIMEOUT_SECS,
)

记下返回的端点 URI 末尾的 ENDPOINT_ID

INFO:google.cloud.aiplatform.models:To use this PrivateEndpoint in another session:
INFO:google.cloud.aiplatform.models:endpoint = aiplatform.PrivateEndpoint('projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID')

使用 PSC 自动化功能创建在线推理端点(预览版)

在线推理服务与服务连接自动化功能相集成,可让您通过 PSC 自动化功能配置推理端点。此方法可自动创建 PSC 端点,从而简化流程,尤其适合没有权限在项目中创建转发规则等网络资源的机器学习开发者使用。

首先,网络管理员必须建立服务连接政策。每个项目和网络只需配置该政策一次,即可授权 Vertex AI(服务类 gcp-vertexai)在相应项目和网络中生成 PSC 端点。

接下来,您便可以使用 PSC 自动化配置创建端点,然后部署您的模型。部署完成后,您可以在端点中查看相关的 PSC 端点信息。

限制

  • 不支持 VPC Service Controls。
  • PSC 自动化配置的区域级上限为 500 个端点。
  • 如果没有模型已部署到端点或正在部署到端点,系统会清除相应的 PSC 自动化结果。完成清理并在之后部署模型后,新的自动化结果会采用不同的 IP 地址和转发规则。

创建服务连接政策

您必须是网络管理员才能创建服务连接政策。 必须创建服务连接政策才能授权 Vertex AI 在您的网络中创建 PSC 端点。如果没有有效的政策,自动化操作会失败并显示 CONNECTION_POLICY_MISSING 错误。

  1. 创建服务连接政策。

    • POLICY_NAME:用户指定的政策名称。
    • PROJECT_ID:要在其中创建 Vertex AI 资源的服务项目的 ID。

    • VPC_PROJECT:您的客户端 VPC 所在的项目的 ID。 对于单个 VPC 设置,该项目与 $PROJECT 相同。对于共享 VPC 设置,这是 VPC 宿主项目。

    • NETWORK_NAME:要部署到的网络的名称。

    • REGION:网络所在的区域。

    • PSC_SUBNETS:要使用的 Private Service Connect 子网。

    gcloud network-connectivity service-connection-policies create POLICY_NAME \
        --project=VPC_PROJECT \
        --network=projects/PROJECT_ID/global/networks/NETWORK_NAME \
        --service-class=gcp-vertexai --region=REGION --subnets=PSC_SUBNETS
    
  2. 查看服务连接政策。

    gcloud network-connectivity service-connection-policies list \
        --project=VPC_PROJECT -region=REGION

    对于单个 VPC 设置,如以下示例所示:

        gcloud network-connectivity service-connection-policies create test-policy \
            --network=default \
            --project=YOUR_PROJECT_ID \
            --region=us-central1 \
            --service-class=gcp-vertexai \
            --subnets=default \
            --psc-connection-limit=500 \
            --description=test

使用 PSC 自动化配置创建在线推理端点

检查 PSCAutomationConfig 以确保 projectId 在许可名单中。

REST

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

  • REGION:要在其中使用 Vertex AI 的区域。
  • VERTEX_AI_PROJECT_ID:要在其中创建在线推理端点的 Google Cloud 项目的 ID。
  • VERTEX_AI_ENDPOINT_NAME:在线预测端点的显示名称。
  • NETWORK_NAME:完整资源名称,包括项目 ID,而不是项目编号。

HTTP 方法和网址:

POST https://REGION-aiplatform.googleapis.com/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints

请求 JSON 正文:

{
  {
    displayName: "VERTEX_AI_ENDPOINT_NAME",
    privateServiceConnectConfig: {
      enablePrivateServiceConnect: true,
      projectAllowlist: ["VERTEX_AI_PROJECT_ID"],
      pscAutomationConfigs: [
        { "project_id": "VERTEX_AI_PROJECT_ID", "network": "projects/VERTEX_AI_PROJECT_ID/global/networks/NETWORK_NAME" },
      ],
    },
  },

如需发送您的请求,请展开以下选项之一:

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

{
  "name": "projects/VERTEX_AI_PROJECT_NUMBER/locations/REGION/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateEndpointOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-11-05T17:45:42.812656Z",
      "updateTime": "2020-11-05T17:45:42.812656Z"
    }
  }
}
记下 ENDPOINT_ID

Python

在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Python 设置说明执行操作。 如需了解详情,请参阅 Vertex AI Python API 参考文档

如需向 Vertex AI 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证

替换以下内容:

  • VERTEX_AI_PROJECT_ID:要在其中创建在线推理端点的 Google Cloud 项目的 ID
  • REGION:要在其中使用 Vertex AI 的区域
  • VERTEX_AI_ENDPOINT_NAME:在线推理端点的显示名称
  • NETWORK_NAME:完整资源名称,包括项目 ID,而不是项目编号。
PROJECT_ID = "VERTEX_AI_PROJECT_ID"
REGION = "REGION"
VERTEX_AI_ENDPOINT_NAME = "VERTEX_AI_ENDPOINT_NAME"

from google.cloud import aiplatform

aiplatform.init(project=PROJECT_ID, location=REGION)

config =
aiplatform.compat.types.service_networking.PrivateServiceConnectConfig(
        enable_private_service_connect=True,
        project_allowlist="VERTEX_AI_PROJECT_ID"
        psc_automation_configs=[
            aiplatform.compat.types.service_networking.PSCAutomationConfig(
                project_id="VERTEX_AI_PROJECT_ID"
network=projects/"VERTEX_AI_PROJECT_ID"/global/networks/"NETWORK_NAME",
            )
        ]
    )
psc_endpoint = aiplatform.PrivateEndpoint.create(
     display_name="VERTEX_AI_ENDPOINT_NAME"
     private_service_connect_config=config,
)

部署模型

创建启用了 Private Service Connect 的在线推理端点后,请按照将模型部署到端点部分所述的步骤将模型部署到该端点。

手动创建 PSC 端点

获取服务连接 URI

部署模型时,系统会为在线推理端点创建服务连接。此服务连接代表向您的 VPC 网络公开的 Vertex AI 在线推理服务。运行 gcloud ai endpoints describe 命令以获取服务连接 URI。

  1. 仅列出端点详细信息中的 serviceAttachment 值:

    gcloud ai endpoints describe ENDPOINT_ID \
    --project=VERTEX_AI_PROJECT_ID \
    --region=REGION \
    | grep -i serviceAttachment
    

    替换以下内容:

    • ENDPOINT_ID:在线推理端点的 ID
    • VERTEX_AI_PROJECT_ID:在其中创建了在线推理端点的 Google Cloud 项目的 ID
    • REGION:相应请求对应的区域

    输出类似于以下内容:

    serviceAttachment: projects/ac74a9f84c2e5f2a1-tp/regions/us-central1/serviceAttachments/gkedpm-c6e6a854a634dc99472bb802f503c1
    
  2. 记下 serviceAttachment 字段中的整个字符串。这便是服务连接 URI。

创建转发规则

您可以预留一个内部 IP 地址,然后使用该地址创建转发规则。如需创建转发规则,您需要用到上一步中的服务连接 URI。

  1. 如需为转发规则预留内部 IP 地址,请使用 gcloud compute addresses create 命令

    gcloud compute addresses create ADDRESS_NAME \
    --project=VPC_PROJECT_ID \
    --region=REGION \
    --subnet=SUBNETWORK \
    --addresses=INTERNAL_IP_ADDRESS
    

    替换以下内容:

    • ADDRESS_NAME:内部 IP 地址的名称
    • VPC_PROJECT_ID:托管您的 VPC 网络的 Google Cloud 项目的 ID。如果您的在线推理端点和 Private Service Connect 转发规则托管在同一项目中,请为此参数使用 VERTEX_AI_PROJECT_ID
    • REGION:要在其中创建 Private Service Connect 转发规则的 Google Cloud 区域
    • SUBNETWORK:包含相应 IP 地址的 VPC 子网的名称
    • INTERNAL_IP_ADDRESS:要预留的内部 IP 地址。此参数是可选的。

      • 如果指定了此参数,则 IP 地址必须在子网的主要 IP 地址范围内。该 IP 地址可以是 RFC 1918 地址,也可以是具有非 RFC 范围的子网。
      • 如果省略此参数,系统会自动分配一个内部 IP 地址。
      • 如需了解详情,请参阅预留新的静态内部 IPv4 或 IPv6 地址
  2. 如需验证 IP 地址是否已预留,请使用 gcloud compute addresses list 命令

    gcloud compute addresses list --filter="name=(ADDRESS_NAME)" \
    --project=VPC_PROJECT_ID
    

    在响应中,验证 IP 地址是否显示为 RESERVED 状态。

  3. 如需创建转发规则并将其指向在线推理服务连接,请使用 gcloud compute forwarding-rules create 命令

    gcloud compute forwarding-rules create PSC_FORWARDING_RULE_NAME \
        --address=ADDRESS_NAME \
        --project=VPC_PROJECT_ID \
        --region=REGION \
        --network=VPC_NETWORK_NAME \
        --target-service-attachment=SERVICE_ATTACHMENT_URI
    

    替换以下内容:

    • PSC_FORWARDING_RULE_NAME:转发规则的名称
    • VPC_NETWORK_NAME:要在其中创建端点的 VPC 网络的名称
    • SERVICE_ATTACHMENT_URI:您先前记下的服务连接
  4. 如需验证服务连接是否接受端点,请使用 gcloud compute forwarding-rules describe 命令

    gcloud compute forwarding-rules describe PSC_FORWARDING_RULE_NAME \
    --project=VPC_PROJECT_ID \
    --region=REGION
    

    在响应中,验证 pscConnectionStatus 字段是否显示 ACCEPTED 状态。

获取内部 IP 地址

如果您在创建转发规则时未指定 INTERNAL_IP_ADDRESS 的值,可以使用 gcloud compute forwarding-rules describe 命令获取自动分配的地址:

gcloud compute forwarding-rules describe PSC_FORWARDING_RULE_NAME \
--project=VERTEX_AI_PROJECT_ID \
--region=REGION \
| grep -i IPAddress

替换以下内容:

  • VERTEX_AI_PROJECT_ID:您的项目 ID
  • REGION:相应请求对应的区域的名称

可选:从 PSC 自动化结果中获取 PSC 端点

您可以从推理端点获取生成的 IP 地址和转发规则。示例如下:

"privateServiceConnectConfig": {
  "enablePrivateServiceConnect": true,
  "projectAllowlist": [
    "your-project-id",
  ],
  "pscAutomationConfigs": [
    {
      "projectId": "your-project-id",
      "network": "projects/your-project-id/global/networks/default",
      "ipAddress": "10.128.15.209",
      "forwardingRule": "https://www.googleapis.com/compute/v1/projects/your-project-id/regions/us-central1/forwardingRules/sca-auto-fr-47b0d6a4-eaff-444b-95e6-e4dc1d10101e",
      "state": "PSC_AUTOMATION_STATE_SUCCESSFUL"
    },
  ]
}

以下是一些错误处理详情。

  • 自动化操作失败不会影响模型部署的结果。
  • 系统会在状态中指明操作是成功还是失败。
    • 如果成功,系统会显示 IP 地址和转发规则。
    • 如果未成功,系统会显示一条错误消息。
  • 如果没有模型已部署到端点或正在部署到端点,系统会移除相应的自动化配置。如果之后又部署了模型,则 IP 地址和转发规则都会发生变化。
  • 系统不会恢复失败的自动化操作。如果自动化操作失败,您仍然可以手动创建 PSC 端点,详情请参阅手动创建 PSC 端点

获取在线推理结果

从启用了 Private Service Connect 的端点获取在线推理结果与从公共端点获取在线推理结果类似,但需要注意以下事项:

  • 必须从创建在线推理端点时在 projectAllowlist 中指定的项目发送请求。
  • 如果未启用全球访问权限,则必须从同一区域发送请求。
  • 有两个开放端口:使用 TLS 协议的 443 端口(使用自签名证书)以及不使用 TLS 协议的 80 端口。这两个端口均支持 HTTP 和 gRPC。所有流量都保留在您的专用网络中,不会通过公共互联网。
  • 最佳实践是使用从 Vertex AI 在线推理获得的自签名证书来使用 HTTPS,或者部署您自己的自签名证书。
  • 如需获取推理结果,必须使用端点的静态 IP 地址建立连接,除非为内部 IP 地址创建了 DNS 记录。例如,将 predict 请求发送到以下端点:

    http://INTERNAL_IP_ADDRESS/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict
    

    INTERNAL_IP_ADDRESS 替换为您之前预留的内部 IP 地址。

  • 对于 gRPC 请求:为确保正确识别 gRPC 请求的端点,必须添加标头 x-vertex-ai-endpoint-id。之所以必须这样做是因为对于 gRPC 通信,端点信息不会在请求路径中传递。

为内部 IP 地址创建 DNS 记录

我们建议您创建 DNS 记录,这样无需指定内部 IP 地址,便可从端点获取在线推理结果。

如需了解详情,请参阅配置 DNS 的其他方法

  1. 使用 gcloud dns managed-zones create 命令创建专用 DNS 区域。此区域与在其中创建了转发规则的 VPC 网络相关联。

    DNS_NAME_SUFFIX="prediction.p.vertexai.goog."  # DNS names have "." at the end.
    gcloud dns managed-zones create ZONE_NAME \
    --project=VPC_PROJECT_ID \
    --dns-name=$DNS_NAME_SUFFIX \
    --networks=VPC_NETWORK_NAME \
    --visibility=private \
    --description="A DNS zone for Vertex AI endpoints using Private Service Connect."
    
    

    替换以下内容:

    • ZONE_NAME:DNS 区域的名称
  2. 如需在相应区域中创建 DNS 记录,请使用 gcloud dns record-sets create 命令

    DNS_NAME=ENDPOINT_ID-REGION-VERTEX_AI_PROJECT_NUMBER.$DNS_NAME_SUFFIX
    gcloud dns record-sets create $DNS_NAME \
    --rrdatas=INTERNAL_IP_ADDRESS \
    --zone=ZONE_NAME \
    --type=A \
    --ttl=60 \
    --project=VPC_PROJECT_ID
    

    替换以下内容:

    • VERTEX_AI_PROJECT_NUMBER:您的 VERTEX_AI_PROJECT_ID 项目的项目编号。您可以在 Google Cloud 控制台中找到此项目编号。如需了解详情,请参阅识别项目
    • INTERNAL_IP_ADDRESS:在线推理端点的内部 IP 地址

    现在,您可以向以下端点发送 predict 请求:

    http://ENDPOINT_ID-REGION-VERTEX_AI_PROJECT_NUMBER.prediction.p.vertexai.goog/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict
    

支持传输层安全协议 (TLS) 证书

Vertex AI 在线推理使用自签名证书进行保护。由于此证书不是由受信任的 CA(证书授权机构)签名的,因此尝试建立 HTTPS 连接的客户端必须明确配置为信任此证书。从 Vertex AI 在线推理端点获得的自签名证书的有效期为 10 年。由于此证书并非特定于某个端点,因此单个证书可用于所有信任库集成。以下是建立与 Vertex AI 在线推理的 HTTPS 连接所需的简要步骤:

  1. 配置 DNS:自签名证书包含主题备用名称 (SAN) *.prediction.p.vertexai.goog。您必须在网络中创建符合此格式的 DNS 记录。

    如需了解实现详情,请参阅为内部 IP 地址创建 DNS 记录

  2. 建立客户端信任:客户端必须下载自签名证书并将其添加到本地受信任证书存储区。

  3. 建立 HTTPS 连接:如需与 Vertex AI 在线推理建立 HTTPS 连接,必须使用完全限定域名 (FQDN)。这是必需的,因为该服务使用对网域 *.prediction.p.vertexai.goog 有效的通配符 SSL 证书。

以下步骤演示了如何下载 Vertex AI 在线推理证书并将其添加到基于 Debian 的 Linux 系统(例如 Debian 11 和 Ubuntu)上的本地信任存储区。

  1. 更新操作系统软件包并安装 OpenSSL:

    sudo apt update && sudo apt install openssl
    
  2. 在主目录中运行以下命令,下载 Vertex AI 在线推理证书并将其保存到当前目录中名为 vertex_certificate.crt 的文件中。进行以下替换:

    • ENDPOINT_ID:已部署模型端点的 ID
    • REGION:端点所在的区域
    • VERTEX_AI_PROJECT_NUMBER:您项目的项目编号。 您可以在 Google Cloud 控制台中找到此项目编号。如需了解详情,请参阅标识项目
    openssl s_client -showcerts -connect \
    ENDPOINT_ID-REGION-VERTEX_AI_PROJECT_NUMBER.prediction.p.vertexai.goog:443 </dev/null | \
    openssl x509 -outform pem -out vertex_certificate.crt
    
    
  3. 将证书移至系统信任库:

    sudo mv vertex_certificate.crt /usr/local/share/ca-certificates
    
  4. 更新证书管理器的可信 CA 列表。您应该会看到输出,确认已添加一个证书。

    sudo update-ca-certificates
    
  5. 向以下网址发送 predict 请求,并进行以下替换:

    • INTERNAL_IP_ADDRESS:在线推理端点的内部 IP 地址
    • VERTEX_AI_PROJECT_ID:您的项目的项目 ID
    https://ENDPOINT_ID-REGION-VERTEX_AI_PROJECT_NUMBER.prediction.p.vertexai.goog/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict
    

支持 TLS 自定义证书

对于需要精确控制 Vertex AI 在线推理端点的证书管理和轮换的组织,您可以将客户管理的证书与区域级 Google Cloud应用负载平衡器 (HTTPS) 搭配使用。

此架构可与默认 Vertex AI 证书搭配使用,让您直接控制。

以下是简要的部署步骤:

  1. 创建客户管理的证书:

    • 为自定义网域生成自签名证书(或使用您的 CA)。
    • 此网域必须使用后缀 .prediction.p.vertexai.goog,以确保其与 Vertex AI 通配符证书匹配,例如 my-endpoint.prediction.vertexai.goog
  2. 部署区域级应用负载平衡器 (HTTPS):

  3. 配置 DNS:

    • 在 DNS 区域中创建 DNS A 记录。
    • 此记录必须将完全限定的自定义网域(例如 my-endpoint.prediction.p.vertexai.goog)映射到区域应用负载平衡器的 IP 地址。
  4. 更新本地受信任证书存储区:

    • 为了让客户端对服务器进行身份验证,必须将应用负载平衡器的证书(或其签发 CA)导入到本地信任存储区。

现在,您可以向完全限定的自定义网域发送预测请求:

https://MY_ENDPOINT.prediction.p.vertexai.goog/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict

获取在线推理结果的示例

以下部分提供的示例展示了如何使用 Python 发送 predict 请求。

第一个示例

psc_endpoint = aiplatform.PrivateEndpoint("projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID")
REQUEST_FILE = "PATH_TO_INPUT_FILE"
import json

import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

with open(REQUEST_FILE) as json_file:
    data = json.load(json_file)
    response = psc_endpoint.predict(
        instances=data["instances"], endpoint_override=INTERNAL_IP_ADDRESS
    )
print(response)

PATH_TO_INPUT_FILE 替换为包含请求输入的 JSON 文件的路径。

第二个示例

import json
import requests
import urllib3
import google.auth.transport.requests

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

REQUEST_FILE = "PATH_TO_INPUT_FILE"

# Programmatically get credentials and generate an access token
creds, project = google.auth.default()
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)
access_token = creds.token
# Note: the credential lives for 1 hour by default
# After expiration, it must be refreshed
# See https://cloud.google.com/docs/authentication/token-types#access-tokens
# for token lifetimes.

with open(REQUEST_FILE) as json_file:
    data = json.load(json_file)
    url = "https://INTERNAL_IP_ADDRESS/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict"
    headers = {
      "Content-Type": "application/json",
      "Authorization": f"Bearer {access_token}"  # Add access token to headers
    }
    payload = {
      "instances": data["instances"],
    }

response = requests.post(url, headers=headers, json=payload, verify=False)

print(response.json())

第三个示例

以下示例展示了如何使用 Python 向 DNS 区域发送 predict 请求:

REQUEST_FILE = "PATH_TO_INPUT_FILE"
import json

import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

with open(REQUEST_FILE) as json_file:
    data = json.load(json_file)
    response = psc_endpoint.predict(
        instances=data["instances"], endpoint_override=DNS_NAME
    )
print(response)

DNS_NAME 替换为您在 gcloud dns record-sets create 命令中指定的 DNS 名称。

最佳做法

部署新端点时,服务连接可能会更新。在进行推理调用之前,请务必检查服务连接和 PSC 端点状态。以下是执行此操作的最佳实践:

  • 如果某个端点没有活跃的部署,Vertex AI 可能会删除服务附件并重新创建它。重新创建服务连接时,请确保 PSC 端点处于已连接状态(通过重新创建转发规则)。
  • 当端点具有活跃的已部署模型时,服务连接不会发生变化。如需保留服务附件,请创建流量拆分,并在取消部署旧版本之前,逐渐将流量迁移到新模型版本。
  • Vertex AI 允许每个服务附件最多有 1,000 个连接。
  • 转发规则也有配额限制。如需了解详情,请参阅 Cloud Load Balancing 配额和限制

限制

启用了 Private Service Connect 的 Vertex AI 端点有下面一些局限性:

  • 不支持部署经过调优的 Gemini 模型。
  • 不支持从端点内部发出的专用出站流量。由于 Private Service Connect 转发规则是单向的,因此您无法在容器内访问其他专用Google Cloud 工作负载。
  • 端点的 projectAllowlist 值无法更改。
  • 不支持 Vertex Explainable AI。
  • 在删除某个端点之前,您必须先从该端点中取消部署模型。
  • 如果所有模型都已取消部署且该状态持续时间超过 10 分钟,则系统可能会删除相应服务连接。检查 Private Service Connect 连接状态;如果状态为 CLOSED,请重新创建转发规则。
  • 删除端点后,您在最多 7 天内无法重复使用该端点名称。
  • 一个项目的 Private Service Connect 配置中最多可以包含 10 个不同的 projectAllowlist 值。

后续步骤