使用专用端点通过 Vertex AI 提供在线预测,可实现与 Vertex AI 在线预测服务的低延迟、安全连接。本指南介绍了如何使用 VPC 网络对等互连将网络与 Vertex AI 在线预测服务对等互连,从而在 Vertex AI 上配置专用端点。
概览
在使用专用端点提供在线预测之前,您必须先配置专用服务访问通道以在您的网络和 Vertex AI 之间创建对等互连连接。如果您已经进行了设置,则可以使用现有的对等互连连接。
本指南包含以下任务:
- 验证您的现有对等互连连接的状态。
- 验证必要的 API 是否已启用。
- 创建专用端点。
- 将模型部署到专用端点。
- 每个专用端点仅支持一个模型。这与公共 Vertex AI 端点不同,对于后者,您可以在部署到一个端点的多个模型之间拆分流量。
- 专用端点支持 AutoML 表格模型和自定义训练模型。
- 将预测发送到专用端点。
- 清理资源
检查现有对等互连连接的状态
如果您已有与 Vertex AI 一起使用的对等互连连接,则可以列出它们以检查状态:
gcloud compute networks peerings list --network NETWORK_NAME
您应该看到对等互连连接的状态为 ACTIVE
。详细了解处于活跃状态的对等互连连接。
启用必要的 API
gcloud services enable aiplatform.googleapis.com
gcloud services enable dns.googleapis.com
创建专用端点
如需创建专用端点,请在使用 Google Cloud CLI 创建端点时添加 --network
标志:
gcloud beta ai endpoints create \
--display-name=ENDPOINT_DISPLAY_NAME \
--network=FULLY_QUALIFIED_NETWORK_NAME \
--region=REGION
将 NETWORK_NAME 替换为完全限定的网络名称:
projects/PROJECT_NUMBER/global/networks/NETWORK_NAME
如果您在未指定网络的情况下创建端点,则将创建公共端点。
专用端点的限制
请注意专用端点的以下限制:
- 专用端点目前不支持流量拆分。要解决此问题,您可以将模型部署到多个专用端点,并在生成的每个专用端点的预测网址之间拆分流量,从而手动创建流量拆分。
- 专用端点不支持 SSL/TLS。
- 如需在专用端点上启用访问日志记录,请联系 vertex-ai-feedback@google.com。
- 您只能将一个网络用于 Google Cloud 项目中的所有专用端点。如果您要更改为其他网络,请联系 verex-ai-feedback@google.com。
- 强烈建议您对可恢复的错误执行客户端重试。其中可能包括以下错误:
- 响应为空(HTTP 错误代码
0
),这可能是由于暂时性连接中断导致的。 - HTTP 错误代码
5xx
,表示服务可能暂时不可用。
- 响应为空(HTTP 错误代码
- 对于指示系统当前过载的 HTTP 错误代码
429
,请考虑减慢流量传输速率来缓解此问题,而不是重试。 - 不支持来自 Vertex AI Python 客户端库中的
PredictionServiceClient
的预测请求。
监控专用端点
您可以使用指标信息中心检查发送到专用端点的流量的可用性和延迟时间。
如需自定义监控,请在 Cloud Monitoring 中查询以下两个指标:
aiplatform.googleapis.com/prediction/online/private/response_count
预测响应的数量。您可以按
deployed_model_id
或 HTTP 响应代码过滤此指标。aiplatform.googleapis.com/prediction/online/private/prediction_latencies
预测请求的延迟时间(以毫秒为单位)。您只能针对成功的请求按
deployed_model_id
过滤此指标。
了解如何在 Metrics Explorer 中选择、查询和显示这些指标。
部署模型
您可以导入新模型,或部署您已上传的现有模型。如需上传新模型,请使用 gcloud ai models upload
。如需了解详情,请参阅将模型导入 Vertex AI。
如需将模型部署到专用端点,请参阅部署模型指南。除了流量拆分和手动启用访问日志记录之外,您还可以使用任何其他可用于部署自定义训练模型的选项。如需详细了解专用端点与公共端点的区别,请参阅专用端点的限制。
部署端点后,您可以从专用端点的元数据中获取预测 URI。
如果您有专用端点的显示名称,请运行以下命令以获取端点 ID:
ENDPOINT_ID=$(gcloud ai endpoints list \ --region=REGION \ --filter=displayName:ENDPOINT_DISPLAY_NAME \ --format="value(ENDPOINT_ID.scope())")
否则,如需查看所有端点的 ID 和显示名称,请运行以下命令:
gcloud ai endpoints list --region=REGION
最后,如需获取预测 URI,请运行以下命令:
gcloud beta ai endpoints describe ENDPOINT_ID \ --region=REGION \ --format="value(deployedModels.privateEndpoints.predictHttpUri)"
专用预测 URI 格式
与 Vertex AI 公共端点相比,专用端点的预测 URI 有所不同:
http://ENDPOINT_ID.aiplatform.googleapis.com/v1/models/DEPLOYED_MODEL_ID:predict
如果您选择取消部署当前模型并使用新模型重新部署,则域名会重复使用,但路径中会包含不同的已部署模型 ID。
将预测发送到专用端点
在 VPC 网络中创建一个 Compute Engine 实例。请务必在已与 Vertex AI 对等互连的同一 VPC 网络中创建实例。
通过 SSH 连接到您的 Compute Engine 实例,并安装预测客户端(如果适用)。否则,您可以使用 curl。
在预测时,请使用从模型部署中获得的预测网址。在此示例中,您将从同一 VPC 网络中的 Compute Engine 实例的预测客户端发送请求:
curl -X POST -d@PATH_TO_JSON_FILE http://ENDPOINT_ID.aiplatform.googleapis.com/v1/models/DEPLOYED_MODEL_ID:predict
在此示例请求中,PATH_TO_JSON_FILE 是预测请求的路径,保存为 JSON 文件。例如
example-request.json
。
清理资源
您可以取消部署模型并删除专用端点,方法与公共模型和端点相同。您只能为每个 Google Cloud 项目在一个网络中创建专用端点,即使您随后自行删除这些资源也是如此。如果您需要切换到其他网络,请联系 vertex-ai-feedback@google.com。
示例:测试共享 VPC 中的专用端点
此示例使用两个具有共享 VPC 网络的 Google Cloud 项目:
- 宿主项目托管共享 VPC 网络。
- 客户端项目托管运行预测客户端(例如 curl)的 Compute Engine 实例或运行您自己的 REST 客户端的 Compute Engine 实例,以发送预测请求。
在客户端项目中创建 Compute Engine 实例时,该实例必须位于宿主项目的共享 VPC 网络中的自定义子网内,以及部署模型的区域中。
在宿主项目中为专用服务访问通道创建对等互连连接。运行
gcloud services vpc-peerings connect
:gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --network=HOST_SHARED_VPC_NAME \ --ranges=PREDICTION_RESERVED_RANGE_NAME \ --project=HOST_PROJECT_ID
使用宿主项目的网络名称在客户端项目中创建端点。运行
gcloud beta ai endpoints create
:gcloud beta ai endpoints create \ --display-name=ENDPOINT_DISPLAY_NAME \ --network=HOST_SHARED_VPC_NAME \ --region=REGION \ --project=CLIENT_PROJECT_ID
使用客户端项目中的预测客户端发送预测请求。
示例:使用非 RFC 1918 子网的专用端点
此示例使用非 RFC 1918 地址创建专用端点。
为节点、pod 和服务预留 IP 地址范围。节点的 IP 地址范围必须在 RFC 1918 范围内。
使用预留的范围创建专用服务访问通道的对等互连连接。
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --network=VPC_NAME \ --ranges=NODES_RANGE_NAME,PODS_RANGE_NAME,SERVICES_RANGE_NAME \ --project=PROJECT_ID
创建端点,并指定节点、pod 和服务的预留范围。您必须通过 REST API 指定 RequestedIpRangeConfig。
# Sample json request for endpoint creation. { displayName: "my_endpoint", network: "projects/<project_num>/global/networks/<network>", requestedIpRangeConfig: { nodesIpRange: { ipAddress: "xxx.xx.x.x", ipPrefixLength: 22 }, podsIpRange: { ipAddress: "yyy.yy.y.y", ipPrefixLength: 17 }, servicesIpRange: { ipAddress: "zzz.zz.z.z", ipPrefixLength: 22 } } }
使用客户端项目中的预测客户端发送预测请求。