使用 HEY 进行 Vertex AI 在线预测基准测试

1. 简介

本教程将向您介绍如何使用 HEY 网页性能工具,在对 us-central1 和 us-west1 进行基准测试时创建和评估 Cloud Monitoring 在线预测指标。

构建内容

您将设置一个名为 Haml-vpc 的 VPC 网络,其中包含 us-west1 和 us-central1 中的子网和实例。该网络将用于通过 HEY 生成流量,定位在线预测和在 us-central1 中部署的模型。

本教程还纳入了 Private Service Connect 和专用 DNS,以演示本地和多云环境如何利用 PSC 访问 googleapis。

本教程将使用 Cloud Monitoring 和 Network Intelligence 来验证从 HEY 生成的流量到在线预测。虽然本教程中列出的步骤部署在 VPC 中,但您可以利用这些步骤在本地或多云环境中部署和获取 Vertex API 基准。网络架构由以下组件组成:

dd5c102ce1ab0150.png

以下是该用例的详细信息:

  1. 使用 HEY 通过 us-west1 中的 GCE 实例在 us-central1 中访问在线预测
  2. 验证是否正在使用 PSC 访问 Vertex API
  3. 使用 HEY 执行 curl 5 分钟
  4. 使用 Cloud Monitoring 验证延迟时间
  5. 使用 Network Intelligence 验证区域间延迟时间
  6. 使用 HEY 通过 us-central1 中的 GCE 实例在 us-central1 中访问在线预测
  7. 验证是否正在使用 PSC 访问 Vertex API
  8. 使用 HEY 执行 curl 5 分钟
  9. 使用 Cloud Monitoring 验证延迟时间
  10. 使用 Network Intelligence 验证区域内延迟时间

学习内容

  • 如何建立 Private Service Connect 端点
  • 如何使用 HEY 为在线预测生成负载
  • 如何使用 Cloud Monitoring 创建 Vertex AI 指标
  • 如何使用 Network Intelligence 验证区域间延迟

所需条件

  • Google Cloud 项目

IAM 权限

计算网络管理员

计算网络管理员

Service Directory Editor

DNS Administrator

Network Management Viewer

2. 准备工作

更新项目以支持本教程

本教程利用 $variables 辅助在 Cloud Shell 中实现 gcloud 配置。

在 Cloud Shell 中,执行以下操作:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

3. aaml-vpc 设置

创建 aml-vpc

gcloud 服务启用 networkmanagement.googleapis.com

在 Cloud Shell 中,执行以下操作:

gcloud compute networks create aiml-vpc --project=$projectid --subnet-mode=custom

在 Cloud Shell 内,启用 Network Intelligence 的网络管理 API

gcloud services enable networkmanagement.googleapis.com

创建用户管理的笔记本子网

在 Cloud Shell 中,创建工作台子网。

gcloud compute networks subnets create workbench-subnet --project=$projectid --range=172.16.10.0/28 --network=aiml-vpc --region=us-central1 --enable-private-ip-google-access

在 Cloud Shell 中,创建 us-west1-subnet。

gcloud compute networks subnets create us-west1-subnet --project=$projectid --range=192.168.10.0/28 --network=aiml-vpc --region=us-west1

在 Cloud Shell 中,创建 us-central1-subnet。

gcloud compute networks subnets create us-central1-subnet --project=$projectid --range=192.168.20.0/28 --network=aiml-vpc --region=us-central1

Cloud Router 和 NAT 配置

本教程使用 Cloud NAT 下载软件包,因为 GCE 实例没有外部 IP 地址。Cloud NAT 提供出站流量 NAT 功能,这意味着不允许互联网主机与用户管理的笔记本进行通信,从而提高了安全性。

在 Cloud Shell 中,创建区域级 Cloud Router 路由器 us-west1。

gcloud compute routers create cloud-router-us-west1-aiml-nat --network aiml-vpc --region us-west1

在 Cloud Shell 中,创建区域级 Cloud NAT 网关 us-west1。

gcloud compute routers nats create cloud-nat-us-west1 --router=cloud-router-us-west1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-west1

在 Cloud Shell 中,创建区域级 Cloud Router 路由器 us-central1。

gcloud compute routers create cloud-router-us-central1-aiml-nat --network aiml-vpc --region us-central1

在 Cloud Shell 中,创建区域级 Cloud NAT 网关 us-central1。

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

4. 创建 Private Service Connect 端点

在下一部分,您将创建一个 Private Service Connect (PSC) 端点,该端点将用于通过 Amazon-vpc 访问 Vertex API。

通过 Cloud Shell

gcloud compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=100.100.10.10 \
    --network=aiml-vpc

存储“pscendpointip”实验期间

pscendpointip=$(gcloud compute addresses list --filter=name:psc-ip --format="value(address)")

echo $pscendpointip

创建 PSC 端点

通过 Cloud Shell

gcloud compute forwarding-rules create pscvertex \
    --global \
    --network=aiml-vpc \
    --address=psc-ip \
    --target-google-apis-bundle=all-apis

列出已配置的 Private Service Connect 端点

通过 Cloud Shell

gcloud compute forwarding-rules list  \
--filter target="(all-apis OR vpc-sc)" --global

描述已配置的 Private Service Connect 端点

通过 Cloud Shell

gcloud compute forwarding-rules describe \
    pscvertex --global

5. 为 GCE 实例创建服务账号

为了对 Vertex API 提供精细的控制,需要使用一个用户管理的服务账号,该账号将应用于西区实例和中央实例。生成服务账号权限后,您可以根据业务要求修改这些权限。在本教程中,用户管理的服务账号 vertex-sa 将应用以下角色:

您必须先 Service Account API,然后才能继续操作。

在 Cloud Shell 中,创建服务账号。

gcloud iam service-accounts create vertex-gce-sa \
    --description="service account for vertex" \
    --display-name="vertex-sa"

在 Cloud Shell 中,使用计算实例管理员角色更新服务账号

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:vertex-gce-sa@$projectid.iam.gserviceaccount.com" --role="roles/compute.instanceAdmin.v1"

在 Cloud Shell 中,使用 Vertex AI User 角色更新服务账号

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:vertex-gce-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

6. 创建用户管理的服务账号 (Notebook)

在下一部分中,您将创建一个用户管理的服务账号,该账号将与本教程中使用的 Vertex Workbench (Notebook) 相关联。

在本教程中,服务账号将应用以下规则:

在 Cloud Shell 中,创建服务账号。

gcloud iam service-accounts create user-managed-notebook-sa \
    --display-name="user-managed-notebook-sa"

在 Cloud Shell 中,使用 Storage Admin 角色更新服务账号。

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"

在 Cloud Shell 中,使用 Vertex AI User 角色更新服务账号。

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

在 Cloud Shell 中,使用 Artifact Registry Admin 角色更新服务账号。

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"

在 Cloud Shell 中,列出服务账号并记下在创建用户管理的笔记本时要使用的电子邮件地址。

gcloud iam service-accounts list

7. 创建测试实例

在下一部分中,您将创建测试实例,以便从 us-west1 和 us-central1 执行基准测试。

在 Cloud Shell 内创建 west-client。

gcloud compute instances create west-client \
    --zone=us-west1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=us-west1-subnet \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --shielded-secure-boot --service-account=vertex-gce-sa@$projectid.iam.gserviceaccount.com \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

在 Cloud Shell 中创建中央客户端。

gcloud compute instances create central-client \
    --zone=us-central1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=us-central1-subnet \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --shielded-secure-boot --service-account=vertex-gce-sa@$projectid.iam.gserviceaccount.com \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

要允许 IAP 连接到您的虚拟机实例,请创建以下防火墙规则:

  • 适用于您希望可以使用 IAP 访问的所有虚拟机实例。
  • 允许来自 IP 范围 35.235.240.0/20 的入站流量。此范围包含 IAP 用于 TCP 转发的所有 IP 地址。

在 Cloud Shell 中,创建 IAP 防火墙规则。

gcloud compute firewall-rules create ssh-iap-vpc \
    --network aiml-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

8. 创建用户管理的笔记本

Notebook API

在下一部分中,创建一个用户管理的笔记本,其中包含之前创建的服务账号 user-managed-notebook-sa。

在 Cloud Shell 中,创建 private-client 实例。

gcloud notebooks instances create workbench-tutorial \
      --vm-image-project=deeplearning-platform-release \
      --vm-image-family=common-cpu-notebooks \
      --machine-type=n1-standard-4 \
      --location=us-central1-a \
      --subnet-region=us-central1 \
      --shielded-secure-boot \
      --subnet=workbench-subnet \
      --no-public-ip    --service-account=user-managed-notebook-sa@$projectid.iam.gserviceaccount.com

导航到 Vertex AI → Workbench 以查看已部署的笔记本。

b02fcb9b07dca06a.png

9. 部署模型和在线预测

在下一部分,使用提供的 Codelab:Vertex AI:将自定义预测例程与 Sklearn 搭配使用,预处理和后处理数据以便进行预测,因为您已经在上一步中创建了一个笔记本,所以从第 7 部分开始。部署模型后,返回教程以开始下一部分。

ee68b7ba0cfd2746.png

10. 为在线预测创建自定义监控信息中心

在线预测会在 VERTEX AI → 在线预测 → ENDPOINT NAME (diamonds-cpr_endpoint) 下创建一个默认的 Monitoring 信息中心。不过,对于测试,我们需要定义开始和结束时间,因此需要使用自定义信息中心。

在下一部分,您将创建 Cloud Monitoring 指标,以根据对在线预测端点的区域访问权限获取延迟时间测量结果,以验证从部署在 us-west1 和 us-central 中的 GCE 实例访问 us-central1 中的端点时的不同延迟时间。

在本教程中,我们将使用 Prediction_latencies 指标,aiplatform 中提供更多指标

指标

说明

prediction/online/prediction_latencies

已部署模型的在线预测延迟时间。

predict_latencies 指标创建图表

从 Cloud Console 导航到 MONITORING → Metrics Explorer

536668ab0b29d77

插入指标 prediction/online/prediction_latencies,然后选择以下选项,然后选择“应用”。

c1edd34208cb5ee2.png

根据以下选项更新分组依据,然后选择“保存图表”。

e180a5d8a044b6e1.png

d2ecd6677a3b34e0.png

选择“保存”,系统将提示您选择一个信息中心。选择“新建信息中心”和提供名称。

e29a39dc941c8599.png

Vertex 自定义信息中心

在下一部分中,验证 Vertex 自定义信息中心显示的时间是否正确。

导航到 MONITORING → 信息中心,然后选择 Vertex 自定义信息中心,然后选择时间。确保您的时区正确无误。

f43ebed798ce1147.png

请务必展开图例以获取表格视图。

61ffeef22e067ca9

展开视图示例:

9027e8785c023129

11. 为 PSC 端点创建专用 DNS

在 Arml-vpc 中创建一个专用 DNS 区域,以便将所有 googleapis 解析为 PSC 端点 IP 地址 100.100.10.10。

在 Cloud Shell 中,创建一个专用 DNS 区域。

gcloud dns --project=$projectid managed-zones create psc-googleapis --description="Private Zone to resolve googleapis to a PSC endpoint" --dns-name="googleapis.com." --visibility="private" --networks="https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/aiml-vpc"

在 Cloud Shell 中,创建与 * 相关联的 A 记录。googleapis.com 到 PSC IP。

gcloud dns --project=$projectid record-sets create *.googleapis.com. --zone="psc-googleapis" --type="A" --ttl="300" --rrdatas="100.100.10.10"

12. 嘿,测试变量

Hey 让最终用户能够根据网络和应用要求自定义测试。在本教程中,我们将使用下文详述的选项以及执行字符串示例:

c == 1 个工作器

z == 持续时间

m == HTTP 方法 POST

D == 来自文件的 HTTP 请求正文,instances.json

n == 要运行的请求数量。默认值为 200。

带有 HEY 的 curl 字符串示例(无需执行)

user@us-central$ ./hey_linux_amd64 -c 1 -z 1m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid$}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

13. 获取预测 ID

从 Cloud 控制台获取将在后续步骤中使用的在线预测端点 ID。

前往 VERTEX AI → 在线预测

ce4d4a88a3fa2345.png

14. 下载并执行 HEY (us-west1)

在下一部分,您将登录 west-client,下载位于 us-central1 的在线预测并对其执行 HEY。

从 Cloud Shell 登录 west-client 并下载 HEY

gcloud compute ssh west-client --project=$projectid --zone=us-west1-a --tunnel-through-iap

从操作系统下载 HEY 并更新权限。

wget https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
chmod +x hey_linux_amd64

在操作系统中,创建以下变量:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

示例:

ENDPOINT_ID="2706243362607857664"

在下一部分中,您将使用 vi 编辑器或 nano 创建一个 instances.json 文件,并插入用于从已部署模型获取预测结果的数据字符串。

在 west-client 操作系统中,使用以下数据字符串创建一个 instances.json 文件

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

示例:

user@west-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@west-client:$

测试前

在操作系统中执行 curl 以验证模型和预测端点是否正常运行。请注意详细日志中的 PSC 端点 IP 和表示成功的 HTTP/2 200。

curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

例如,记下用于访问预测的 PSC IP 地址,结果。

user@west-client:$ curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 100.100.10.10:443...
* Connected to us-central1-aiplatform.googleapis.com (100.100.10.10) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=upload.video.google.com
*  start date: Jul 31 08:22:19 2023 GMT
*  expire date: Oct 23 08:22:18 2023 GMT
*  subjectAltName: host "us-central1-aiplatform.googleapis.com" matched cert's "*.googleapis.com"
*  issuer: C=US; O=Google Trust Services LLC; CN=GTS CA 1C3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x55a9f38b42c0)
> POST /v1/projects/new-test-project-396322/locations/us-central1/endpoints/2706243362607857664:predict HTTP/2
> Host: us-central1-aiplatform.googleapis.com
> user-agent: curl/7.74.0
> accept: */*
> authorization: Bearer ya29.c.b0Aaekm1LqrcaOlWFFwuEOWX_tZVXXvJgN_K-u5_hFyEAYXAi3AnBEBwwtHS8dweW_P2QGfdyFfa31nMT_6BaKBI0mC9IsfzfIiUwXc8u2yJt01gTUSJpCmGAFKZKidRMgkPYivVYCnuymzdYbRAWacIe__StkRzI9UeQOGN3jNIeESr80AdH12goaxCFXWaNWxoYRfGVhekEgUcsKs7t1OhOM-937gy4YGkXcXa8sGuHWRqF5bnulYlTqlxqQ2aAxMTrQg2lwUWRGCmGhPrym7rXJq7oim0DkAJSbAarl1qFuz0PPfNXeHGbs13zY2r1giV7u8_w4Umj_Q5M7H9fTkq7EiqnLzqRkOHXismYL368P1jOUBYM__krFQt4M3X9RJa0g01tOw3FnOh27BmUqlFQ1J2h14JZpx215Q3xzRvgfJ5iW5YYSkv67uZRQk4V04naOUXyc0plzWuVOjj4nor3fYvkS_oW0IyxJoBjeXR16Vnvln8c04svWX9dt7eobczFvBOm9nVdh4lVp8qxbp__2WtMvc1QVg6y-2i6lRpbvmyp1oadxVRjxV1e0wiQFSe-qqsinJu3bnnaMbxdU2cu5j26o8o8Xpgo0SF1UM0b1WX84iatbWpdFSphZm1llwmRagMzcFBW0aBk-i35_bXSbzwURgMfY6Qbyb9Rv9y0F-Maf34I0WxiMldv2uc57nej7dVl9OSm_Ohnro-i9zcpq9fxo9soYVB8WjaZOUjauk4znstc2_6y4atcVVsQBkeU674biR567Ri3M74Jfv4MrrF02ObfrJRdB7UJ4MU_9kWW-kYeeJzoci15UqYV0f_yJgReBwQa66Supmebee2Sn2nku6xZkRMu5Mz55mXuva0XWrpIbor7WckSsXwUFbf7rj5ipa4mOOyf2hJe1Rq0x6yeBaariRzXrhfm5bBpFBU73-zd-IekvOji0ZJQSkk0o6gpX_794Jny7j14aQJ8VxezcFpZUztimYhMnRhlO2lqms1h0h48
> content-type: application/json
> content-length: 158
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
* We are completely uploaded and fine
< HTTP/2 200 
< x-vertex-ai-internal-prediction-backend: harpoon
< content-type: application/json; charset=UTF-8
< date: Sun, 20 Aug 2023 03:51:54 GMT
< vary: X-Origin
< vary: Referer
< vary: Origin,Accept-Encoding
< server: scaffolding on HTTPServer2
< cache-control: private
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< accept-ranges: none
< 
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "3587550310781943808",
  "model": "projects/884291964428/locations/us-central1/models/6829574694488768512",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}
* Connection #0 to host us-central1-aiplatform.googleapis.com left intact

执行 HEY

在操作系统中,执行 HEY 并启用 10 分钟的基准测试。

./hey_linux_amd64 -c 1 -z 10m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

15. Hey Validation (us-west1)

现在,您在 us-west1 的计算实例中执行了 Hey,即可通过以下各项评估结果:

  • HEY 结果
  • Vertex 自定义信息中心
  • 网络智能

HEY 结果

在操作系统中,我们根据 10 分钟的执行时间验证 HEY 结果,

每秒 17.5826 个请求

在 0.0686 秒内达到 99% |68 毫秒

10,550 个响应以及 200 状态代码

user@west-client:$ ./hey_linux_amd64 -c 1 -z 10m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

Summary:
  Total:        600.0243 secs
  Slowest:      0.3039 secs
  Fastest:      0.0527 secs
  Average:      0.0569 secs
  Requests/sec: 17.5826
  

Response time histogram:
  0.053 [1]     |
  0.078 [10514] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.103 [16]    |
  0.128 [4]     |
  0.153 [3]     |
  0.178 [1]     |
  0.203 [0]     |
  0.229 [2]     |
  0.254 [1]     |
  0.279 [5]     |
  0.304 [3]     |


Latency distribution:
  10% in 0.0546 secs
  25% in 0.0551 secs
  50% in 0.0559 secs
  75% in 0.0571 secs
  90% in 0.0596 secs
  95% in 0.0613 secs
  99% in 0.0686 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0000 secs, 0.0527 secs, 0.3039 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0116 secs
  req write:    0.0000 secs, 0.0000 secs, 0.0002 secs
  resp wait:    0.0567 secs, 0.0526 secs, 0.3038 secs
  resp read:    0.0001 secs, 0.0001 secs, 0.0696 secs

Status code distribution:
  [200] 10550 responses

Vertex 自定义信息中心

导航到 MONITORING → 信息中心,然后选择 Vertex Custom Dashboard。输入 10 分钟或指定开始和结束时间。确保您的时区正确无误。

4102b1d0438c78e3

看一下预测延迟时间的定义,可以看出一种服务器端指标,该指标衡量的是从模型获得响应后,对客户端请求做出响应的总时间。

  • 总延迟时间时长:请求在服务上花费的总时间,即模型延迟时间加上开销延迟时间。

相比之下,HEY 是客户端指标,会考虑以下参数:

客户端请求 + 总延迟时间(包括模型延迟时间)+ 客户端响应

网络智能

现在,我们来看看 Network Intelligence 报告的区域间网络延迟时间,了解 Google Cloud Platform 报告的 us-west1 到 us-central1 延迟时间。

前往 Cloud Console Network Intelligence → 性能信息中心,然后选择以下屏幕截图中详述的以下选项,表示延迟时间介于 32 到 39 毫秒之间。

aade5f757115721.png

HEY us-west1 基准摘要

比较测试工具的总延迟时间报告得出的结果与 HEY 报告的延迟时间大致相同。区域间延迟是造成大部分延迟的因素。让我们来看看在接下来的一系列测试中中央客户端的表现。

延迟工具

时长

网络智能:us-west1 到 us-central1 的延迟时间

大约 32 到 39 毫秒

Cloud Monitoring:总预测延迟时间 [第 99%]

34.58 毫秒 (99p)

Google 报告的总延迟时间

~ 66.58 到 73.58 毫秒

HEY 客户端延迟分布

68 毫秒 (99p)

16. 下载并执行 HEY (us-central1)

在下一部分,您将登录中央客户端,以下载位于 us-central1 的在线预测,并对其执行 HEY。

从 Cloud Shell 登录中央客户端并下载 HEY

gcloud compute ssh central-client --project=$projectid --zone=us-central1-a --tunnel-through-iap

从操作系统下载 HEY 并更新权限。

wget https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
chmod +x hey_linux_amd64

在操作系统中,创建以下变量:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

示例:

ENDPOINT_ID="2706243362607857664"

在下一部分中,您将使用 vi 编辑器或 nano 创建一个 instances.json 文件,并插入用于从已部署模型获取预测结果的数据字符串。

在 west-client 操作系统中,使用以下数据字符串创建一个 instances.json 文件

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

示例:

user@west-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@west-client:$

预测试

在操作系统中执行 curl 以验证模型和预测端点是否正常运行。请注意详细日志中的 PSC 端点 IP 和表示成功的 HTTP/2 200。

curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

例如,记下用于访问预测的 PSC IP 地址,结果。

user@central-client:~$ curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 100.100.10.10:443...
* Connected to us-central1-aiplatform.googleapis.com (100.100.10.10) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=upload.video.google.com
*  start date: Jul 31 08:22:19 2023 GMT
*  expire date: Oct 23 08:22:18 2023 GMT
*  subjectAltName: host "us-central1-aiplatform.googleapis.com" matched cert's "*.googleapis.com"
*  issuer: C=US; O=Google Trust Services LLC; CN=GTS CA 1C3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x559b57adc2c0)
> POST /v1/projects/new-test-project-396322/locations/us-central1/endpoints/2706243362607857664:predict HTTP/2
> Host: us-central1-aiplatform.googleapis.com
> user-agent: curl/7.74.0
> accept: */*
> authorization: Bearer ya29.c.b0Aaekm1KWqq-CIXuL6f1cx9d9jHHquQq9tlSV1oVZ1y3TACi82JFFZRwsagVY7MMovycsU4PLkt9MDMkNngxZE5RzXcS-AoaUaQf1tPT9-_JMTlFI6wCcR7Yr9MeRF5AZblr_k52ZZgEZKeYGcrXoGiqGQcAAwFtHiEVAkUhLuyukteXbMoep1JM9E0zFblJj7Z0yOCMJYBH-6XHcIDYnOKpStMVBR2wcTDbnFrCE08HXbvRnQVcENatTBoI9FzSVL1ORwqUiCcdfnTSjpIXcyD-W82d6ZHjGX_RUhfnH7RPfOJqkuU8pOovwoCjq_jvM_wJUfPuQnBKHp5rxbYxPE349DMBql62po2SWFguuFo-a2eoUnb8-FQeBZqan65zgV0lexR73gZlm071y9grlXv3fmJUo7vlj5W-7_-FJXaWWg8iWc6rmjYeO1Wz2h_8qnmojkX9xSUciI6JfmwdgMWwtvwJb63ppSmdwf8oagrYiQlpMzgRI6rekbRzg-1WOBeOf5nRg5vtxUMSc9iRaoarO5XwFX8vt7rxOUBvbXYVWmo3bsdhzsS9VopMwgMlxgcIJg7bq7_F3iapB-nRjfjfhZWpR83cWIkI2Wb9f89inpsxtYjZbbzdWkZvRB8FYSsY8F8tcpiVoWWyQWZiph9z7O59fF9irWY2gtUnbFcJJ_ZcYztjlMQaR45y42ZflkM3Qn668bzge3Y3hmVI1s6ZSmxxq6m27hoMwVn21R07Y613jwljmaFJ5V8MwkR6yvFhYngrh_JrhRUQtSSMh02Rz25wMfv7g8Fiqymr-12viM4btIFjXZBM3XFqzvso_rw1omI1yYWofmbaBYggpegpJBzSeqVUZe791agjVtiMUkyjXFy__9gI0Qk9ZUarI4p25SvS4I1hX4YyBk6ol32Z5zIsVr1Seff__aklm6M2Mlkumd7nurm46hjOIoOhFpfFxrQ6yivnhYapBOJMYirgbZvigvI3dom1fnmt0-ktmRxp69w7Uzzy
> content-type: application/json
> content-length: 158
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
* We are completely uploaded and fine
< HTTP/2 200 
< x-vertex-ai-internal-prediction-backend: harpoon
< date: Sun, 20 Aug 2023 22:25:31 GMT
< content-type: application/json; charset=UTF-8
< vary: X-Origin
< vary: Referer
< vary: Origin,Accept-Encoding
< server: scaffolding on HTTPServer2
< cache-control: private
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< accept-ranges: none
< 
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "3587550310781943808",
  "model": "projects/884291964428/locations/us-central1/models/6829574694488768512",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}
* Connection #0 to host us-central1-aiplatform.googleapis.com left intact

执行 HEY

在操作系统中,执行 HEY 并启用 10 分钟的基准测试。

./hey_linux_amd64 -c 1 -z 10m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

17. Hey Validation (us-central1)

现在,您在 us-central1 的计算实例中执行了 Hey,即可通过以下各项评估结果:

  • HEY 结果
  • Vertex 自定义信息中心
  • 网络智能

HEY 结果

在操作系统中,我们根据 10 分钟的执行时间验证 HEY 结果,

每秒 44.9408 个请求

99% 在 0.0353 秒内 |35 毫秒

状态代码为 200 的 26965 响应

devops_user_1_deepakmichael_alto@central-client:~$ ./hey_linux_amd64 -c 1 -z 10m -m POST -D instances.json  -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/endpoints/${ENDPOINT_ID}:predict

Summary:
  Total:        600.0113 secs
  Slowest:      0.3673 secs
  Fastest:      0.0184 secs
  Average:      0.0222 secs
  Requests/sec: 44.9408
  

Response time histogram:
  0.018 [1]     |
  0.053 [26923] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.088 [25]    |
  0.123 [4]     |
  0.158 [0]     |
  0.193 [1]     |
  0.228 [9]     |
  0.263 [1]     |
  0.298 [0]     |
  0.332 [0]     |
  0.367 [1]     |


Latency distribution:
  10% in 0.0199 secs
  25% in 0.0205 secs
  50% in 0.0213 secs
  75% in 0.0226 secs
  90% in 0.0253 secs
  95% in 0.0273 secs
  99% in 0.0353 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0000 secs, 0.0184 secs, 0.3673 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0079 secs
  req write:    0.0000 secs, 0.0000 secs, 0.0007 secs
  resp wait:    0.0220 secs, 0.0182 secs, 0.3672 secs
  resp read:    0.0002 secs, 0.0001 secs, 0.0046 secs

Status code distribution:
  [200] 26965 responses

Vertex 自定义信息中心

前往 MONITORING → 信息中心,然后选择 Vertex Custom Dashboard,输入 10m。也可以指定开始时间和停止时间。确保您的时区正确无误。

最后 10 分钟的预测延迟时间为 30.533 毫秒。

看一下预测延迟时间的定义,可以看出一种服务器端指标,该指标衡量的是从模型获得响应后,对客户端请求做出响应的总时间。

  • 总延迟时间时长:请求在服务上花费的总时间,即模型延迟时间加上开销延迟时间。

相比之下,HEY 是客户端指标,会考虑以下参数:

客户端请求 + 总延迟时间(包括模型延迟时间)+ 客户端响应

网络智能

现在,我们来看看 Network Intelligence 报告的区域内网络延迟时间,了解 Google Cloud Platform 报告的 us-central1 延迟时间。

前往 Cloud Console Network Intelligence → 性能信息中心,然后选择以下屏幕截图中详述的以下选项,从 0.2 毫秒到 0.8 毫秒的延迟时间。

eaa84848c3185fde.png

HEY us-central1 基准摘要

通过比较测试工具报告的总延迟时间,得到的延迟时间比西客户端短,这是因为计算(中央客户端)和 Vertex 端点(模型和在线预测)位于同一区域。

延迟工具

时长

网络智能:us-central1 区域内延迟

~0.2 至 0 .8 毫秒

Cloud Monitoring:总预测延迟时间 [第 99%]

30.533 毫秒 (99p)

Google 报告的总延迟时间

~30.733 到 31.333 毫秒

HEY 客户端延迟

35 毫秒 (99p)

18. 恭喜

恭喜!您已成功部署并验证了 HEY,现在结合使用 Cloud Monitoring 和 Network Intelligence,可以获取客户端预测基准延迟时间。根据测试,您要确定 us-central 中的预测端点可以在区域间传送,但观察到延迟时间。

Cosmopup 认为教程很棒!!

e6d3675ca7c6911f.jpeg

19. 清理

从 Cloud Shell 中删除教程组件。

gcloud compute instances delete central-client --zone=us-central1-a -q

gcloud compute instances delete west-client --zone=us-west1-a -q

gcloud compute instances delete workbench-tutorial --zone=us-central1-a -q

gcloud compute forwarding-rules delete pscvertex --global --quiet 

gcloud compute addresses delete psc-ip --global --quiet

gcloud compute networks subnets delete workbench-subnet --region=us-central1 --quiet 

gcloud compute networks subnets delete us-west1-subnet --region=us-west1 --quiet

gcloud compute networks subnets delete us-central1-subnet --region=us-central1 --quiet

gcloud compute routers delete cloud-router-us-west1-aiml-nat --region=us-west1 --quiet

gcloud compute routers delete cloud-router-us-central1-aiml-nat --region=us-central1 --quiet

gcloud compute firewall-rules delete  ssh-iap-vpc --quiet

gcloud dns record-sets delete *.googleapis.com. --zone=psc-googleapis --type=A --quiet

gcloud dns managed-zones delete psc-googleapis --quiet

gcloud compute networks delete aiml-vpc --quiet

gcloud storage rm -r gs://$projectid-cpr-bucket

从 Cloud Console 中删除了以下内容:

Artifact Registry 文件夹

99c17044e2f80919

在 Vertex AI Model Registry 中,取消部署模型:

f5b315f089ae6283.png

在 Vertex AI Online Prediction 中,删除端点

9b58688a5037de84

后续操作

请查看下面的一些教程...

补充阅读材料和视频

参考文档