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:
A continuación, se presentan los detalles del caso de uso:
- Acceder a la predicción en línea en us-central1 desde una instancia de GCE en us-west1 con HEY
- Verificar que PSC se esté usando para acceder a la API de Vertex
- Realiza curl con HEY durante 5 minutos
- Valida la latencia con Cloud Monitoring
- Valida la latencia entre regiones con Network Intelligence
- Acceder a la predicción en línea en us-central1 desde una instancia de GCE en us-central1 con HEY
- Verificar que PSC se esté usando para acceder a la API de Vertex
- Realiza curl con HEY durante 5 minutos
- Valida la latencia con Cloud Monitoring
- 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
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
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.
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.
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
Inserta la métrica prediction/online/prediction_latencies, selecciona las siguientes opciones y haz clic en Aplicar.
Actualiza Agrupar por según la siguiente opción y selecciona Guardar gráfico.
Selecciona Guardar (Save) y se te pedirá que selecciones un panel. Selecciona Nuevo panel y proporcionan un nombre.
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.
Asegúrate de expandir la leyenda para obtener una vista de tabla.
Ejemplo de vista expandida:
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
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.
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.
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.
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.
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
En Vertex AI Model Registry, anula la implementación del modelo:
En Vertex AI Online Prediction, borra el extremo.
¿Qué sigue?
Consulta algunos de estos instructivos...
- Private Service Connect para las API de Google
- Crea un notebook seguro administrado por el usuario con Vertex AI
Lecturas adicionales y Videos
- Descripción general de Private Service Connect
- ¿Qué es Private Service Connect?
- Cómo obtener predicciones a partir de un modelo de AA
- ¿Qué es Vertex AI?