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

1. Introducción

En este instructivo, aprenderás a crear y evaluar las métricas de predicción en línea de Cloud Monitoring cuando realices pruebas de referencia en us-central1 y us-west1 en un extremo de predicción implementado en us-central1 con la herramienta de rendimiento web HEY.

Qué compilarás

Configurarás una red de VPC llamada “targetl-vpc”, que consta de instancias y subredes en us-west1 y us-central1, las cuales se usarán para generar tráfico con HEY segmentado para una predicción en línea y un modelo implementado en us-central1.

Private Service Connect y el 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 modelo 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 presentan los detalles del caso de uso:

  1. Acceder a la predicción en línea en us-central1 desde una instancia de GCE en us-west1 con HEY
  2. Verificar que PSC se esté usando para acceder a la API de Vertex
  3. Realiza curl con HEY durante 5 minutos
  4. Valida la latencia con Cloud Monitoring
  5. Valida la latencia entre regiones con Network Intelligence
  6. Acceder a la predicción en línea en us-central1 desde una instancia de GCE en us-central1 con HEY
  7. Verificar que PSC se esté usando para acceder a la API de Vertex
  8. Realiza 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 a 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 intra y latencia interregional

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 sea compatible con el instructivo

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

Dentro de Cloud Shell, realiza lo siguiente:

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

3. Configuración de targetl-vpc

Crea la app de impactl-vpc

gcloud services enable networkmanagement.googleapis.com

Dentro de Cloud Shell, realiza lo siguiente:

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

En Cloud Shell, habilita la API de administración de redes para Network Intelligence.

gcloud services enable networkmanagement.googleapis.com

Crea la subred del notebook administrado por el usuario

En Cloud Shell, crea la 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

En Cloud Shell, crea 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

En Cloud Shell, crea 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

En el instructivo, se usa Cloud NAT 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.

En 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

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

En 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

En Cloud Shell, crea la puerta de enlace regional de 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. 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 “puntl-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 todo 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

Genera una lista de los extremos configurados de Private Service Connect

Desde Cloud Shell

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

Describir los extremos configurados de Private Service Connect

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 preciso de control a la API de Vertex, se requiere una cuenta de servicio administrada por el usuario que se aplicará a las instancias occidental y central. Una vez generados, los permisos de la cuenta de servicio se pueden modificar según los requisitos de la empresa. En el instructivo, se le aplicarán los siguientes roles a la cuenta de servicio administrada por el usuario, vertex-sa:

Debes la API de Service Account antes de continuar.

En Cloud Shell, crea la cuenta de servicio.

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

En Cloud Shell, actualiza la cuenta de servicio con el rol Administrador de instancias de procesamiento

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

En Cloud Shell, actualiza la cuenta de servicio con el rol 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 el notebook Vertex que se usa en el instructivo.

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

En 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 Administrador de almacenamiento.

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

En Cloud Shell, actualiza la cuenta de servicio con el rol 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"

En Cloud Shell, actualiza la cuenta de servicio con el rol 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"

En Cloud Shell, enumera la cuenta de servicio y toma nota de la dirección de correo electrónico que se usará cuando se cree 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.

En Cloud Shell, crea 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"

En Cloud Shell, crea el central-client.

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 haga lo siguiente:

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

En 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. Crear un notebook administrado por el usuario

la API del notebook.

En la siguiente sección, crearás un notebook administrado por el usuario que incorpore la cuenta de servicio creada con anterioridad, user-managed-notebook-sa.

En Cloud Shell, crea la instancia 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 codelab Vertex AI:Usa rutinas de predicción personalizadas con Sklearn para realizar el procesamiento previo y posterior de los datos para predicciones a partir de la sección 7,dado que ya creaste un notebook en el paso anterior. Una vez implementado el modelo, vuelve 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 realizar nuestras pruebas, debemos definir las horas de inicio y finalizació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 para validar las diferentes latencias 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 Prediction_latencies, hay métricas adicionales disponibles en aiplatform

Métrica

Descripción

prediction/online/prediction_latencies

Latencia de predicción en línea del modelo implementado.

Crea un gráfico para la métricaprediction_latencies

Desde la consola de Cloud, ve a MONITORING → Explorador de métricas

536668ab0b29d77.png

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

c1edd34208cb5ee2.png

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

e180a5d8a044b6e1.png

d2ecd6677a3b34e0.png

Selecciona Guardar (Save) y se te pedirá que selecciones un panel. Selecciona Nuevo panel y proporcionan un nombre.

e29a39dc941c8599.png

Panel personalizado de Vertex

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

Navega a MONITORING → Dashboard, selecciona Vertex Custom Dashboard y, luego, selecciona la hora. Asegúrate de que tu 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 privado en targetl-vpc para resolver todos los googleapis en la dirección IP del extremo de PSC 100.100.10.10.

En Cloud Shell, crea una zona de DNS privada.

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"

En Cloud Shell, crea el registro A que asocie *. 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. Revisa las variables de prueba

Ofrece a los usuarios finales la posibilidad de personalizar las pruebas según los requisitos de red y de aplicaciones. Para los fines de este instructivo, usaremos la opción que se detalla a continuación con una cadena de ejecución de ejemplo:

c == 1 trabajador

z == Duración

m == Método HTTP POST

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

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

Ejemplo de una cadena 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 de extremo de predicción en línea de la consola de Cloud que se usará en los pasos posteriores.

Navega a VERTEX AI → PREDICCIÓN EN LÍNEA

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.

En Cloud Shell, inicia sesión en west-client y descarga HEY

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

En el SO, descarga HEY 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 de 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 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:$

Previo a la prueba

En el SO, ejecuta un comando 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 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, toma nota de la dirección IP de PSC que se usa para acceder a las predicciones y 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”

En el SO, ejecuta HEY habilitando 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. Validación Hey (us-west1)

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

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

Resultados de HEY

Validaremos los resultados de HEY en función de la ejecución de 10 minutos desde el SO.

17.5826 solicitudes por segundo

99% en 0.0686 s | 68 ms

10,550 respuestas con 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 → Dashboard y selecciona Vertex Custom Dashboard. Ingresa 10 min o especifica la hora de inicio y finalización. Asegúrate de que tu zona horaria sea correcta.

4102b1d0438c78e3.png

Si observamos la definición de 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 sobrecarga.

Por el contrario, HEY es una métrica del cliente que considera los siguientes parámetros:

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

Inteligencia de la red

Veamos ahora la latencia de red interregional informada por Network Intelligence para tener una idea de la latencia de us-west1 a us-central1 informada por Google Cloud Platform.

Navega a Network Intelligence de la consola de Cloud → Panel de rendimiento y selecciona las siguientes opciones que se detallan en la siguiente captura de pantalla, que indican una latencia de 32 a 39 ms.

aade5f757115721.png

Resumen del modelo de referencia de HEY us-west1

La comparación de los informes de latencia total según las herramientas de prueba arroja casi la misma latencia que informa HEY. La latencia entre regiones contribuye a la mayor parte de la latencia. Veamos el rendimiento del cliente central en la próxima serie de pruebas.

Herramienta de latencia

Duración

Inteligencia de redes: latencia de us-west1 a us-central1

~32 a 39 ms

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

34.58 ms (99p)

Latencia total informada por Google

~66.58 a 73.58 ms

Distribución de latencia del lado del cliente de HEY

68ms (99p)

16. Descargar y ejecutar HEY (us-central1)

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

En Cloud Shell, inicia sesión en el cliente central y descarga HEY

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

En el SO, descarga HEY 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 de 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 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

En el SO, ejecuta un comando 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 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, toma nota de la dirección IP de PSC que se usa para acceder a las predicciones y 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

Ejecuta “HEY”

En el SO, ejecuta HEY habilitando 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. Validación de Hey (us-central1)

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

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

Resultados de HEY

Validaremos los resultados de HEY en función de la ejecución de 10 minutos desde el SO.

44.9408 solicitudes por segundo

99% en 0.0353 s | 35 ms

Respuestas de 26965 con 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 → Dashboard, selecciona Vertex Custom Dashboard y, luego, ingresa 10m. O la hora de inicio y finalización. Asegúrate de que tu zona horaria sea correcta.

Las latencias de predicción de los últimos 10 m producen 30.533 ms.

Si observamos la definición de 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 sobrecarga.

Por el contrario, HEY es una métrica del cliente que considera los siguientes parámetros:

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

Inteligencia de la red

Veamos ahora 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 Network Intelligence de la consola de Cloud → Panel de rendimiento y selecciona las siguientes opciones que se detallan en la siguiente captura de pantalla, que indican una latencia de 0 .2 a 0 .8 ms.

eaa84848c3185fde.png

Resumen del modelo de referencia de HEY us-central1

La comparación de la latencia total informada por las herramientas de prueba arroja una latencia menor que la del cliente west, debido a que el procesamiento (cliente central) y los extremos de Vertex (modelo y predicción en línea) están en la misma región.

Herramienta de latencia

Duración

Inteligencia de red: latencia dentro de la región us-central1

~0.2 a 0 .8 ms

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

30.533 ms (99p)

Latencia total informada por Google

~30.733 a 31.333 ms

HEY latencia del lado del cliente

35 ms (99p)

18. Felicitaciones

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

Cosmopup cree que los instructivos son increíbles.

e6d3675ca7c6911f.jpeg

19. Limpia

En Cloud Shell, borra los componentes del instructivo.

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

En Vertex AI Online Prediction, borra el extremo.

9b58688a5037de84.png

¿Qué sigue?

Consulta algunos de estos instructivos...

Lecturas adicionales y Videos

Documentos de referencia