Prueba del modelo de referencia de predicción en línea de Vertex AI con HEY

1. Introducción

En este instructivo, se muestra cómo crear y evaluar las métricas de predicción en línea de Cloud Monitoring cuando se realizan pruebas de referencia en us-central1 y us-west1 en un extremo de Prediction implementado en us-central1 con la herramienta de rendimiento web HEY.

Qué compilarás

Configurarás una red de VPC llamada aiml-vpc que consta de subredes e instancias en us-west1 y us-central1 que se usarán para generar tráfico con HEY que segmenta una predicción en línea y un modelo implementado en us-central1.

Private Service Connect y DNS privado también se incorporan en el instructivo para demostrar cómo los entornos locales y de múltiples nubes pueden aprovechar PSC para acceder a googleapis.

En el instructivo, se usarán Cloud Monitoring y Network Intelligence para validar el tráfico generado desde HEY hacia la predicción en línea. Si bien los pasos descritos en el instructivo se implementan en una VPC, puedes aprovecharlos para implementar y obtener un valor de referencia de las APIs de Vertex desde entornos locales o de múltiples nubes. La arquitectura de red consta de los siguientes componentes:

dd5c102ce1ab0150.png

A continuación, se muestran los detalles del caso de uso:

  1. Accede a la predicción en línea en us-central1 desde instancias de GCE en us-west1 con HEY
  2. Verifica que se use PSC para acceder a la API de Vertex
  3. Realiza una solicitud curl con HEY durante 5 minutos
  4. Valida la latencia con Cloud Monitoring
  5. Valida la latencia entre regiones con Network Intelligence
  6. Accede a la predicción en línea en us-central1 desde una instancia de GCE en us-central1 con HEY
  7. Verifica que se use PSC para acceder a la API de Vertex
  8. Realiza una solicitud curl con HEY durante 5 minutos
  9. Valida la latencia con Cloud Monitoring
  10. Valida la latencia dentro de la región con Network Intelligence

Qué aprenderás

  • Cómo establecer un extremo de Private Service Connect
  • Cómo generar carga en una predicción en línea con HEY
  • Cómo crear métricas de Vertex AI con Cloud Monitoring
  • Cómo usar Network Intelligence para validar la latencia intrarregional y entre regiones

Requisitos

  • Proyecto de Google Cloud

Permisos de IAM

Administrador de red de Compute

Administrador de red de Compute

Editor del Directorio de servicios

Administrador de DNS

Visualizador de administración de redes

2. Antes de comenzar

Actualiza el proyecto para que admita el instructivo

En este instructivo, se usan variables para facilitar la implementación de la configuración de gcloud en Cloud Shell.

Dentro de Cloud Shell, haz lo siguiente:

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

3. Configuración de aiml-vpc

Crea la VPC de aiml

gcloud services enable networkmanagement.googleapis.com

Dentro de Cloud Shell, haz lo siguiente:

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

Dentro de Cloud Shell, habilita la API de Network Management para Network Intelligence.

gcloud services enable networkmanagement.googleapis.com

Crea la subred del notebook administrado por el usuario

Dentro de Cloud Shell, crea la subred workbench-subnet.

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

Dentro de Cloud Shell, crea la subred 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

Dentro de Cloud Shell, crea la subred 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

Configuración de Cloud Router y NAT

Cloud NAT se usa en el instructivo para descargar paquetes de software porque la instancia de GCE no tiene una dirección IP externa. Cloud NAT proporciona capacidades de NAT de salida, lo que significa que los hosts de Internet no pueden iniciar la comunicación con un notebook administrado por el usuario, lo que lo hace más seguro.

Dentro de Cloud Shell, crea el Cloud Router regional, us-west1.

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

Dentro de Cloud Shell, crea la puerta de enlace de Cloud NAT regional, 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

Dentro de Cloud Shell, crea el Cloud Router regional, us-central1.

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

Dentro de Cloud Shell, crea la puerta de enlace de Cloud NAT regional, 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. Crea el extremo de Private Service Connect

En la siguiente sección, crearás un extremo de Private Service Connect (PSC) que se usará para acceder a la API de Vertex desde aiml-vpc.

Desde Cloud Shell

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

Almacena "pscendpointip" durante el lab

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

echo $pscendpointip

Crea el extremo de PSC

Desde Cloud Shell

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

Enumera los extremos de Private Service Connect configurados

Desde Cloud Shell

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

Describe los extremos de Private Service Connect configurados

Desde Cloud Shell

gcloud compute forwarding-rules describe \
    pscvertex --global

5. Crea una cuenta de servicio para las instancias de GCE

Para proporcionar un nivel de control preciso a la API de Vertex, se requiere una cuenta de servicio administrada por el usuario que se aplicará a las instancias centrales y occidentales. Una vez generados, los permisos de la cuenta de servicio se pueden modificar según los requisitos de la empresa. En el instructivo, la cuenta de servicio administrada por el usuario, vertex-sa, tendrá los siguientes roles aplicados:

Debes la API de Service Account antes de continuar.

Dentro de Cloud Shell, crea la cuenta de servicio.

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

Dentro de Cloud Shell, actualiza la cuenta de servicio con el rol de administrador de instancias de Compute.

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

Dentro de Cloud Shell, actualiza la cuenta de servicio con el rol de usuario de Vertex AI.

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

6. Crea una cuenta de servicio administrada por el usuario (notebook)

En la siguiente sección, crearás una cuenta de servicio administrada por el usuario que se asociará con Vertex Workbench (notebook) que se usa en el instructivo.

En el instructivo, se aplicarán las siguientes reglas a la cuenta de servicio:

Dentro de Cloud Shell, crea la cuenta de servicio.

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

En Cloud Shell, actualiza la cuenta de servicio con el rol de administrador de Storage.

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

Dentro de Cloud Shell, actualiza la cuenta de servicio con el rol de usuario de Vertex AI.

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

Dentro de Cloud Shell, actualiza la cuenta de servicio con el rol de administrador de Artifact Registry.

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

Dentro de Cloud Shell, enumera la cuenta de servicio y anota la dirección de correo electrónico que se usará cuando crees el notebook administrado por el usuario.

gcloud iam service-accounts list

7. Crea las instancias de prueba

En la siguiente sección, crearás instancias de prueba para realizar pruebas de referencia desde us-west1 y us-central1.

Dentro de Cloud Shell, crea el cliente 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"

Dentro de Cloud Shell, crea el cliente central.

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"

Para permitir que IAP se conecte a tus instancias de VM, crea una regla de firewall que cumpla con lo siguiente:

  • Se aplica a todas las instancias de VM a las que deseas acceder mediante IAP.
  • Permite el tráfico de entrada desde el rango de IP 35.235.240.0/20. Este rango contiene todas las direcciones IP que IAP usa para el reenvío de TCP.

Dentro de Cloud Shell, crea la regla de firewall de IAP.

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

8. Crea un notebook administrado por el usuario

la API de Notebooks

En la siguiente sección, crea un notebook administrado por el usuario que incorpore la cuenta de servicio creada anteriormente, user-managed-notebook-sa.

Dentro de Cloud Shell, crea la instancia de 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

Navega a Vertex AI → Workbench para ver el notebook implementado.

b02fcb9b07dca06a.png

9. Implementa el modelo y la predicción en línea

En la siguiente sección, usa el codelabproporcionado, Vertex AI:Usa rutinas de predicción personalizadas con Sklearn para preprocesar y posprocesar datos para predicciones, y comienza con la sección 7, ya que creaste un notebook en el paso anterior. Una vez que se implemente el modelo, regresa al instructivo para comenzar la siguiente sección.

ee68b7ba0cfd2746.png

10. Crea un panel de supervisión personalizado para la predicción en línea

La Predicción en línea crea un panel de supervisión predeterminado en VERTEX AI → PREDICCIÓN EN LÍNEA → NOMBRE DEL EXTREMO (diamonds-cpr_endpoint). Sin embargo, para nuestras pruebas, necesitamos definir una hora de inicio y una hora de detención, por lo que se requiere un panel personalizado.

En la siguiente sección, crearás métricas de Cloud Monitoring para obtener mediciones de latencia basadas en el acceso regional al extremo de predicción en línea y, así, validar la diferencia de latencia cuando se accede a un extremo en us-central1 desde instancias de GCE implementadas en us-west1 y us-central.

Para el instructivo, usaremos las métricas de prediction_latencies. Hay métricas adicionales disponibles en aiplatform.

Métrica

Descripción

prediction/online/prediction_latencies

Es la latencia de la predicción en línea del modelo implementado.

Crea un gráfico para la métrica prediction_latencies

En Cloud Console, navega a MONITORING → Explorador de métricas.

536668ab0b29d77.png

Inserta la métrica prediction/online/prediction_latencies y selecciona las siguientes opciones. Luego, selecciona Aplicar.

c1edd34208cb5ee2.png

Actualiza la opción Agrupar por según la siguiente opción y selecciona Guardar gráfico.

e180a5d8a044b6e1.png

d2ecd6677a3b34e0.png

Selecciona Guardar. Se te pedirá que selecciones un panel. Selecciona Panel nuevo y proporciona un nombre.

e29a39dc941c8599.png

Panel personalizado de Vertex

En la siguiente sección, valida que el panel personalizado de Vertex muestre la hora correcta.

Navega a MONITORING → Panel y selecciona Vertex Custom Dashboard, y, luego, selecciona el período. Asegúrate de que la zona horaria sea correcta.

f43ebed798ce1147.png

Asegúrate de expandir la leyenda para obtener una vista de tabla.

61ffeef22e067ca9.png

Ejemplo de vista expandida:

9027e8785c023129.png

11. Crea un DNS privado para el extremo de PSC

Crea una zona de DNS privada en la VPC de aiml para resolver todas las googleapis en la dirección IP del extremo de PSC 100.100.10.10.

En Cloud Shell, crea una zona del DNS privado.

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"

Desde Cloud Shell, crea el registro A que asocia *. googleapis.com a la IP de PSC.

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

12. Variables de prueba de Hey

Hey ofrece a los usuarios finales la capacidad de personalizar las pruebas según los requisitos de la red y la aplicación. Para los fines de este instructivo, usaremos la opción que se detalla a continuación con una cadena de ejecución de muestra:

c == 1 trabajador

z == Duration

m == método HTTP POST

D == Cuerpo de la solicitud HTTP del archivo instances.json

n == Cantidad de solicitudes que se ejecutarán. El valor predeterminado es 200.

Ejemplo de cadena de curl con HEY (no se requiere ejecución)

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. Obtén el ID de predicción

Obtén el ID del extremo de predicción en línea de Cloud Console que se usará en los pasos posteriores.

Navega a VERTEX AI → ONLINE PREDICTION.

ce4d4a88a3fa2345.png

14. Descarga y ejecuta HEY (us-west1)

En la siguiente sección, accederás a west-client para descargar y ejecutar HEY en la predicción en línea ubicada en us-central1.

Desde Cloud Shell, accede a west-client y descarga HEY.

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

Descarga HEY desde el SO y actualiza los permisos.

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

En el SO, crea las siguientes variables:

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

Ejemplo:

ENDPOINT_ID="2706243362607857664"

En la siguiente sección, crearás un archivo instances.json con el editor vi o nano, y luego insertarás la cadena de datos que se usa para obtener una predicción del modelo implementado.

Desde el SO de west-client, crea un archivo instances.json con la siguiente cadena de datos:

{"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]]}

Ejemplo:

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:$

Prueba previa

Desde el SO, ejecuta un curl para validar que el modelo y el extremo de predicción funcionen correctamente. Observa la IP del extremo de PSC en el registro detallado y el código HTTP/2 200 que indica que la operación se realizó correctamente.

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

Por ejemplo, observa la dirección IP del PSC que se usó para acceder a la predicción y el resultado exitoso.

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

Ejecuta HEY

Desde el SO, ejecuta HEY para habilitar una prueba de referencia de 10 minutos.

./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)

Ahora que ejecutaste Hey desde una instancia de procesamiento en us-west1, evalúa los resultados de lo siguiente:

  • Resultados del HEY
  • Panel personalizado de Vertex
  • Inteligencia de la red

Resultados del HEY

Desde el SO, validemos los resultados de HEY según la ejecución de 10 minutos:

17.5826 solicitudes por segundo

El 99% en 0.0686 s | 68 ms

10,550 respuestas con el código de estado 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

Panel personalizado de Vertex

Navega a MONITORING → Panel y selecciona Panel personalizado de Vertex. Ingresa 10 min o especifica la hora de inicio y finalización. Asegúrate de que la zona horaria sea correcta.

4102b1d0438c78e3.png

Si observamos la definición de las latencias de predicción, se indica una métrica del servidor que mide el tiempo total para responder a la solicitud del cliente después de obtener una respuesta del modelo.

  • Duración total de la latencia: Es el tiempo total que una solicitud pasa en el servicio, que es la latencia del modelo más la latencia de la sobrecarga.

En cambio, HEY es una métrica del cliente que tiene en cuenta los siguientes parámetros:

Solicitud del cliente + Latencia total (incluida la latencia del modelo) + Respuesta del cliente

Inteligencia de red

Ahora, veamos la latencia de red entre regiones que informa Network Intelligence para tener una idea de la latencia de us-west1 a us-central1 que informa Google Cloud Platform.

Navega a Cloud Console Network Intelligence → Panel de rendimiento y selecciona las siguientes opciones que se detallan en la captura de pantalla a continuación, en la que se indica una latencia de 32 a 39 ms.

aade5f757115721.png

Resumen del modelo de referencia de HEY us-west1

Si comparas los informes de latencia total de las herramientas de prueba, obtendrás aproximadamente la misma latencia que informa HEY. La latencia entre regiones representa la mayor parte de la latencia. Veamos cómo se comporta el cliente central en la siguiente serie de pruebas.

Herramienta de latencia

Duración

Network Intelligence: Latencia de us-west1 a us-central1

De 32 a 39 ms aprox.

Cloud Monitoring: Latencia total de predicción [percentil 99]

34.58 ms (99º percentil)

Latencia total informada por Google

Aproximadamente de 66.58 a 73.58 ms

Distribución de latencia del cliente de HEY

68 ms (99º percentil)

16. Descarga y ejecuta HEY (us-central1)

En la siguiente sección, accederás a central-client para descargar y ejecutar HEY en la predicción en línea ubicada en us-central1.

Desde Cloud Shell, accede a central-client y descarga HEY.

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

Descarga HEY desde el SO y actualiza los permisos.

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

En el SO, crea las siguientes variables:

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

Ejemplo:

ENDPOINT_ID="2706243362607857664"

En la siguiente sección, crearás un archivo instances.json con el editor vi o nano, y luego insertarás la cadena de datos que se usa para obtener una predicción del modelo implementado.

Desde el SO de west-client, crea un archivo instances.json con la siguiente cadena de datos:

{"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]]}

Ejemplo:

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:$

Prueba previa

Desde el SO, ejecuta un curl para validar que el modelo y el extremo de predicción funcionen correctamente. Observa la IP del extremo de PSC en el registro detallado y el código HTTP/2 200 que indica que la operación se realizó correctamente.

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

Por ejemplo, observa la dirección IP del PSC que se usó para acceder a la predicción y el resultado exitoso.

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

Ejecutar HEY

Desde el SO, ejecuta HEY para habilitar una prueba de referencia de 10 minutos.

./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)

Ahora que ejecutaste Hey desde una instancia de procesamiento en us-central1, evalúa los resultados de lo siguiente:

  • Resultados del HEY
  • Panel personalizado de Vertex
  • Inteligencia de la red

Resultados de HEY

Desde el SO, validemos los resultados de HEY en función de la ejecución de 10 minutos:

44.9408 solicitudes por segundo

99% en 0.0353 s | 35 ms

26965 respuestas con el código de estado 200

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

Panel personalizado de Vertex

Navega a MONITORING → Panel y selecciona Vertex Custom Dashboard. Luego, ingresa 10 min. O bien la hora de inicio y finalización Asegúrate de que la zona horaria sea correcta.

Las latencias de predicción de los últimos 10 minutos arrojan 30.533 ms.

Si observamos la definición de las latencias de predicción, se indica una métrica del servidor que mide el tiempo total para responder a la solicitud del cliente después de obtener una respuesta del modelo.

  • Duración total de la latencia: Es el tiempo total que una solicitud pasa en el servicio, que es la latencia del modelo más la latencia de la sobrecarga.

En cambio, HEY es una métrica del cliente que tiene en cuenta los siguientes parámetros:

Solicitud del cliente + Latencia total (incluida la latencia del modelo) + Respuesta del cliente

Inteligencia de red

Ahora, veamos la latencia de red dentro de la región que informa Network Intelligence para tener una idea de la latencia de us-central1 que informa Google Cloud Platform.

Navega a Cloud Console Network Intelligence → Panel de rendimiento y selecciona las siguientes opciones que se detallan en la captura de pantalla a continuación, en la que se indica una latencia de 0 .2 a 0 .8 ms.

eaa84848c3185fde.png

Resumen del modelo de referencia de HEY para us-central1

La comparación de la latencia total que informan las herramientas de prueba arroja una latencia más baja que la de west-client debido a los extremos de procesamiento (central-client) y de Vertex (modelo y predicción en línea) en la misma región.

Herramienta de latencia

Duración

Inteligencia de redes: Latencia intrarregional de us-central1

De ~0.2 a 0 .8 ms

Cloud Monitoring: Latencia total de la predicción [percentil 99]

30.533 ms (99º percentil)

Latencia total informada por Google

Aproximadamente de 30.733 a 31.333 ms

Latencia del cliente de HEY

35 ms (P99)

18. Felicitaciones

Felicitaciones. Implementaste y validaste correctamente HEY para obtener la latencia de referencia de la predicción del cliente con una combinación de Cloud Monitoring y Network Intelligence. Según las pruebas, identificaste que se puede entregar un extremo de predicción en us-central entre regiones, pero se observó latencia.

Cosmopup cree que los instructivos son geniales.

e6d3675ca7c6911f.jpeg

19. Limpia

Borra los componentes del instructivo desde 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

En la consola de Cloud, se borró lo siguiente:

Carpeta de Artifact Registry

99c17044e2f80919.png

En Vertex AI Model Registry, anula la implementación del modelo:

f5b315f089ae6283.png

Borra el extremo de Vertex AI Online Prediction

9b58688a5037de84.png

¿Qué sigue?

Consulta algunos de estos instructivos…

Lecturas y videos adicionales

Documentos de referencia