借助 Private Service Connect,您可以从多个使用方项目和 VPC 网络安全地访问 Vertex AI 在线推理,而无需使用公共 IP 地址、公共互联网访问权限或明确对等互连的内部 IP 地址范围。
对于有以下要求的在线推理用例,我们建议使用 Private Service Connect:
- 要求使用专用安全连接
- 需要低延迟
- 无需公开访问
Private Service Connect 使用 VPC 网络中的转发规则将流量单向发送到 Vertex AI 在线推理服务。转发规则连接到服务附件,该附件可将 Vertex AI 服务公开给您的 VPC 网络。如需了解详情,请参阅关于通过 Private Service Connect 访问 Vertex AI 服务。 如需详细了解如何设置 Private Service Connect,请参阅 Virtual Private Cloud (VPC) 文档中的 Private Service Connect 概览。
专用专用端点同时支持 HTTP 和 gRPC 通信协议。对于 gRPC 请求,必须包含 x-vertex-ai-endpoint-id 标头,以便正确识别端点。支持以下 API:
- 预测
- RawPredict
- StreamRawPredict
- 聊天完成(仅限 Model Garden)
您可以使用 Vertex AI SDK for Python 向专用私有端点发送在线推理请求。如需了解详情,请参阅获取在线推理结果。
所需的角色
如需获得创建 Private Service Connect 端点所需的权限,请让您的管理员为您授予项目的 Vertex AI User (roles/aiplatform.user
) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含 aiplatform.endpoints.create
权限,创建 Private Service Connect 端点需要此权限。
如需详细了解 Vertex AI 角色和权限,请参阅使用 IAM 进行 Vertex AI 访问权限控制和 Vertex AI IAM 权限。
创建在线推理端点
使用以下任一方法创建启用了 Private Service Connect 的在线推理端点。
Private Service Connect 端点的默认请求超时时间为 10 分钟。在 Vertex AI SDK for Python 中,您可以指定新的 inference_timeout
值来选择性地指定其他请求超时时间,如以下示例所示。最长超时时间为 3600 秒(1 小时)。
控制台
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 项目的 IDREGION
:您在其中使用 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
错误。
创建服务连接政策。
- 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
查看您的服务连接政策。
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 项目的 IDREGION
:您在其中使用 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。
仅列出端点详细信息中的
serviceAttachment
值:gcloud ai endpoints describe ENDPOINT_ID \ --project=VERTEX_AI_PROJECT_ID \ --region=REGION \ | grep -i serviceAttachment
替换以下内容:
ENDPOINT_ID
:在线推理端点的 IDVERTEX_AI_PROJECT_ID
:您在其中创建了在线推理端点的 Google Cloud 项目的 IDREGION
:此请求对应的区域
输出类似于以下内容:
serviceAttachment: projects/ac74a9f84c2e5f2a1-tp/regions/us-central1/serviceAttachments/gkedpm-c6e6a854a634dc99472bb802f503c1
记下
serviceAttachment
字段中的整个字符串。这是服务连接 URI。
创建转发规则
您可以预留一个内部 IP 地址,然后使用该地址创建转发规则。如需创建转发规则,您需要上一步中的服务连接 URI。
如需为转发规则预留内部 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 地址。
如需验证 IP 地址是否已预留,请使用
gcloud compute addresses list
命令:gcloud compute addresses list --filter="name=(ADDRESS_NAME)" \ --project=VPC_PROJECT_ID
在响应中,验证 IP 地址是否显示为
RESERVED
状态。如需创建转发规则并将其指向在线推理服务连接,请使用
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
:您之前记下的服务连接
如需验证服务连接是否接受端点,请使用
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
:您的项目 IDREGION
:相应请求的区域名称
可选:从 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
中指定的项目发送。 - 如果未启用全球访问权限,则必须从同一区域发送请求。
- 有两个开放的端口,443 端口使用 TLS 和自签名证书,80 端口不使用 TLS。这两个端口均支持 HTTP 和 GRPC。所有流量都将通过专用网络传输,不会通过公共互联网。
如需获取推理结果,必须使用端点的静态 IP 地址建立连接,除非为内部 IP 地址创建了 DNS 记录。例如,将
predict
请求发送到以下端点:https://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 通信,端点信息不会在请求路径中传递。安全连接(端口 443):使用端口 443 建立安全连接时,服务器会使用自签名证书。如需继续进行连接,建议采用以下方法之一:
- 方法 1:绕过证书验证:配置客户端以忽略证书验证,并使用服务器的 IP 地址或首选 DNS 解析方法建立连接。
- 方法 2:信任库集成:获取服务器的自签名证书,将其添加到客户端系统的本地信任库,并使用
*.prediction.p.vertexai.goog
格式的 DNS 名称建立连接。此方法通过证书验证确保通信安全。
以下部分提供了示例,说明了如何使用 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#at-lifetime
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())
可选:为内部 IP 地址创建 DNS 记录
我们建议您创建 DNS 记录,以便从端点获取在线推理结果,而无需指定内部 IP 地址。
如需了解详情,请参阅配置 DNS 的其他方法。
使用
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 区域的名称
如需在地区中创建 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
请求:https://ENDPOINT_ID-REGION-VERTEX_AI_PROJECT_NUMBER.prediction.p.vertexai.goog/v1/projects/VERTEX_AI_PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict
以下示例展示了如何使用 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 名称。
限制
使用 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
值。