Teste do valor de referência de previsão on-line da Vertex AI com HEY

1. Introdução

Este tutorial mostra como criar e avaliar métricas de previsão on-line do Cloud Monitoring ao realizar testes de valor de referência em us-central1 e us-west1 em um endpoint de previsão implantado em us-central1 usando a ferramenta de desempenho da Web HEY.

O que você vai criar

Você vai configurar uma rede VPC chamada goall-vpc, que consiste em sub-redes e instâncias em us-west1 e us-central1. Ela será usada para gerar tráfego usando o HEY visando uma previsão on-line e um modelo implantado em us-central1.

O Private Service Connect e o DNS particular também estão incorporados no tutorial para demonstrar como ambientes no local e de várias nuvens podem aproveitar o PSC para acessar googleapis.

O Cloud Monitoring e o Network Intelligence serão usados no tutorial para validar o tráfego gerado pelo HEY para a previsão on-line. As etapas descritas neste tutorial são implantadas em uma VPC, mas você pode aproveitar as etapas para implantar e receber um valor de referência das APIs Vertex em ambientes locais ou de várias nuvens. A arquitetura de rede consiste nos componentes abaixo:

dd5c102ce1ab0150.png

Confira abaixo os detalhes do caso de uso:

  1. Acessar a previsão on-line na região us-central1 de uma instância do GCE em us-west1 usando HEY
  2. Verificar se o PSC está sendo usado para acessar a API Vertex
  3. Executar o curl usando HEY por 5 minutos
  4. Validar a latência usando o Cloud Monitoring
  5. Validar a latência entre regiões usando o Network Intelligence
  6. Acessar a previsão on-line em us-central1 a partir de uma instância do GCE em us-central1 usando HEY
  7. Verificar se o PSC está sendo usado para acessar a API Vertex
  8. Executar o curl usando HEY por 5 minutos
  9. Validar a latência usando o Cloud Monitoring
  10. Validar a latência intrarregional usando o Network Intelligence

O que você vai aprender

  • Como estabelecer um endpoint do Private Service Connect
  • Como gerar carga para uma previsão on-line usando HEY
  • Como criar métricas da Vertex AI usando o Cloud Monitoring.
  • Como usar o Network Intelligence para validar processos internos e latência inter-regional

O que é necessário

  • Projeto do Google Cloud

Permissões do IAM

Administrador de rede do Compute

Administrador de rede do Compute

Editor do diretório de serviços

Administrador do DNS

Leitor do gerenciamento de rede

2. Antes de começar

Atualizar o projeto para ser compatível com o tutorial

Neste tutorial, usamos as variáveis $variables para ajudar na implementação da configuração da gcloud no Cloud Shell.

No Cloud Shell, faça o seguinte:

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

3. Configuração do goall-vpc

Criar o goall-vpc

serviços da gcloud permitem o networkmanagement.googleapis.com

No Cloud Shell, faça o seguinte:

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

No Cloud Shell, ative a API Network Management para o Network Intelligence

gcloud services enable networkmanagement.googleapis.com

Crie a sub-rede de notebook gerenciada pelo usuário

No Cloud Shell, crie a sub-rede workbench.

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

No Cloud Shell, crie a sub-rede 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

No Cloud Shell, crie a sub-rede 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

Configuração do Cloud Router e NAT

O Cloud NAT é usado no tutorial para fazer o download de pacotes de software porque a instância do GCE não tem um endereço IP externo. O Cloud NAT oferece recursos de saída de NAT, o que significa que os hosts da Internet não têm permissão para iniciar a comunicação com um notebook gerenciado pelo usuário, o que o torna mais seguro.

No Cloud Shell, crie o Cloud Router regional, us-west1.

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

No Cloud Shell, crie o gateway 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

No Cloud Shell, crie o Cloud Router regional, us-central1.

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

No Cloud Shell, crie o gateway 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. Crie o endpoint do Private Service Connect

Na seção a seguir, você vai criar um endpoint do Private Service Connect (PSC) que vai ser usado para acessar a API Vertex a partir do goall-vpc.

No Cloud Shell

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

Armazenar "pscendpointip" durante o laboratório

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

echo $pscendpointip

Crie o endpoint do PSC

No Cloud Shell

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

Liste os endpoints configurados do Private Service Connect

No Cloud Shell

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

Descrever os endpoints configurados do Private Service Connect

No Cloud Shell

gcloud compute forwarding-rules describe \
    pscvertex --global

5. Crie uma conta de serviço para as instâncias do GCE

Para oferecer um bom nível de controle à API Vertex, é necessário ter uma conta de serviço gerenciada pelo usuário que será aplicada às instâncias central e oeste. Depois de geradas, as permissões da conta de serviço podem ser modificadas com base nos requisitos comerciais. No tutorial, a conta de serviço gerenciada pelo usuário, vertex-sa, vai ter os seguintes papéis aplicados:

a API Service Account antes de continuar.

No Cloud Shell, crie a conta de serviço.

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

No Cloud Shell, atualize a conta de serviço com o papel de administrador da instância de computação

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

No Cloud Shell, atualize a conta de serviço com o papel de Usuário da Vertex AI.

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

6. Criar uma conta de serviço gerenciada pelo usuário (Notebook)

Na seção a seguir, você vai criar uma conta de serviço gerenciada pelo usuário que será associada ao Vertex Workbench (Notebook) usado no tutorial.

No tutorial, a conta de serviço terá as seguintes regras aplicadas:

No Cloud Shell, crie a conta de serviço.

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

No Cloud Shell, atualize a conta de serviço com o papel Administrador de armazenamento.

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

No Cloud Shell, atualize a conta de serviço com o papel de Usuário da Vertex AI.

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

No Cloud Shell, atualize a conta de serviço com o papel de Administrador do Artifact Registry.

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

No Cloud Shell, liste a conta de serviço e anote o endereço de e-mail que será usado ao criar o notebook gerenciado pelo usuário.

gcloud iam service-accounts list

7. Criar as instâncias de testes

Na seção a seguir, você vai criar instâncias de teste para realizar testes de referência em us-west1 e us-central1.

No Cloud Shell, crie o 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 do Cloud Shell, crie o 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 o IAP se conecte às instâncias de VM, crie uma regra de firewall que:

  • Aplica-se a todas as instâncias de VM que você quer disponibilizar usando o IAP.
  • Permite tráfego de entrada no intervalo de IP 35.235.240.0/20. Esse intervalo contém todos os endereços IP que o IAP usa para encaminhamento de TCP.

No Cloud Shell, crie a regra de firewall do IAP.

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

8. Criar um notebook gerenciado pelo usuário

a API do notebook

Na seção a seguir, crie um notebook gerenciado pelo usuário que incorpore a conta de serviço criada anteriormente, user-managed-notebook-sa.

No Cloud Shell, crie a instância 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

Acesse Vertex AI → Workbench para conferir o notebook implantado.

b02fcb9b07dca06a.png

9. Implantar o modelo e a previsão on-line

Na seção a seguir, use o codelab Vertex AI:usar rotinas de previsão personalizadas com o Sklearn para pré-processar e pós-processar dados para previsões,já que você já criou um notebook na etapa anterior. Depois que o modelo for implantado, volte ao tutorial para iniciar a próxima seção.

ee68b7ba0cfd2746.png

10. Criar um painel de monitoramento personalizado para previsões on-line

A previsão on-line cria um painel padrão do Monitoring em VERTEX AI → ONLINE PREDICTION → ENDPOINT NAME (diamonds-cpr_endpoint). No entanto, para nossos testes, precisamos definir um horário de início e de término, portanto, é necessário um dashboard personalizado.

Na seção a seguir, você vai criar métricas do Cloud Monitoring para receber medições de latência com base no acesso regional ao endpoint de previsão on-line. Assim, é possível validar as diferentes latências ao acessar um endpoint em us-central1 usando instâncias do GCE implantadas nas regiões us-west1 e us-central.

Para o tutorial, usaremos as métricas de "predict_latencies". Outras métricas estão disponíveis em aiplatform

Métrica

Descrição

prediction/online/prediction_latencies

Latência de previsão on-line do modelo implantado.

Crie um gráfico para a métricaprediction_latencies

No console do Cloud, acesse MONITORING → Metrics Explorer

536668ab0b29d77.png

Insira a métrica prediction/online/prediction_latencies e selecione as opções a seguir. Clique em "Aplicar".

c1edd34208cb5ee2.png

Atualize "Agrupar por" com base na opção a seguir e selecione "Salvar gráfico".

e180a5d8a044b6e1.png

d2ecd6677a3b34e0.png

Clique em "Salvar". Você será solicitado a selecionar um dashboard. Selecione Novo painel de controle e fornecer um nome.

e29a39dc941c8599.png

Painel personalizado da Vertex

Na seção a seguir, verifique se o painel personalizado da Vertex está mostrando o horário correto.

Navegue até MONITORAMENTO → Painel, selecione "Painel personalizado da Vertex" e selecione o horário. Verifique se seu fuso horário está correto.

f43ebed798ce1147.png

Expanda a legenda para ter uma visualização de tabela.

61ffeef22e067ca9.png

Exemplo de visualização expandida:

9027e8785c023129.png

11. Criar DNS particular para o endpoint do PSC

Crie uma zona DNS particular em goall-vpc para resolver todos os googleapis para o endereço IP 100.100.10.10 do endpoint do PSC.

No Cloud Shell, crie uma zona DNS particular.

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"

No Cloud Shell, crie o registro A que associa *. googleapis.com ao IP do PSC.

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

12. Variáveis de teste Hey

Os usuários finais podem personalizar testes com base nos requisitos da rede e do aplicativo. Para fins do tutorial, usaremos a opção detalhada abaixo com um exemplo de string de execução:

c == 1 worker

z == Duração

m == método HTTP POST

D == corpo da solicitação HTTP do arquivo, instances.json

n == Número de solicitações a serem executadas. O padrão é 200.

Exemplo de string de curl com HEY (execução não necessária)

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. Encontrar o ID da previsão

Acesse o ID do endpoint de previsão on-line no console do Cloud para usar nas próximas etapas.

Acesse VERTEX AI → PREDICIONAMENTO ON-LINE

ce4d4a88a3fa2345.png

14. Fazer o download e executar HEY (us-west1)

Na seção a seguir, você vai fazer login no west-client para fazer o download e executar o HEY na previsão on-line localizada em us-central1.

No Cloud Shell, faça login no west-client e baixe o HEY

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

No SO, faça o download de HEY e atualize as permissões.

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

No SO, crie as seguintes variáveis:

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

Exemplo:

ENDPOINT_ID="2706243362607857664"

Na próxima seção, você vai criar um arquivo instances.json com o editor vi ou nano e inserir a string de dados usada para receber uma previsão do modelo implantado.

No SO west-client, crie um arquivo instances.json com a string de dados abaixo:

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

Exemplo:

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

Pré-teste

No SO, execute um curl para validar se o modelo e o endpoint de previsão estão funcionando corretamente. Observe o IP do endpoint do PSC no registro detalhado e o HTTP/2 200 indicando sucesso.

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 exemplo, anote o endereço IP do PSC usado para acessar a previsão e um resultado bem-sucedido.

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

Executar HEY

No SO, execute HEY permitindo um teste de valor de referência 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. Validação Oi (us-west1)

Agora que você executou Hey em uma instância do Compute em us-west1, avalie os resultados do seguinte:

  • Resultados HEY
  • Painel personalizado da Vertex
  • Network Intelligence

Resultados HEY

No SO, vamos validar os resultados HEY com base na execução de 10 minutos.

17,5826 solicitações por segundo

99% em 0,0686 s | 68 ms

10.550 respostas com o código de status 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

Painel personalizado da Vertex

Navegue até MONITORAMENTO → Painel e selecione "Painel personalizado da Vertex". Digite 10m ou especifique o horário de início e de término. Verifique se seu fuso horário está correto.

4102b1d0438c78e3.png

A definição de latências de previsão indica uma métrica do lado do servidor que mede o tempo total de resposta à solicitação dos clientes após receber uma resposta do modelo.

  • Duração total da latência: o tempo total que uma solicitação gasta no serviço, que é a latência do modelo mais a latência de sobrecarga.

Por outro lado, a HEY é uma métrica do lado do cliente que considera os seguintes parâmetros:

Solicitação do cliente + Latência total (inclui a latência do modelo) + Resposta do cliente

Inteligência de rede

Vamos analisar a latência de rede entre regiões relatada pelo Network Intelligence para ter uma ideia da latência de us-west1 a us-central1 relatada pelo Google Cloud Platform.

Acesse o Network Intelligence → Painel de desempenho e selecione as opções a seguir, detalhadas na captura de tela abaixo, indicando a latência de 32 a 39 ms.

aade5f757115721.png

Resumo do valor de referência HEY us-west1

A comparação dos relatórios de Latência total pelas ferramentas de teste produz aproximadamente a mesma latência relatada pelo HEY. A latência entre regiões contribui com a maior parte da latência. Vamos conferir o desempenho do cliente central na próxima série de testes.

Ferramenta de latência

Duração

Network Intelligence: latência de us-west1 para us-central1

Cerca de 32 a 39 ms

Cloud Monitoring: latência total de previsão [99%]

34,58 ms (99p)

Latência total informada pelo Google

~ 66,58 a 73,58 ms

Distribuição de latência do lado do cliente HEY

68ms (99p)

16. Fazer o download e executar o HEY (us-central1)

Na seção a seguir, você vai fazer login no cliente central para fazer o download e executar o HEY na previsão on-line localizada em us-central1.

No Cloud Shell, faça login no cliente central e faça o download do HEY

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

No SO, faça o download de HEY e atualize as permissões.

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

No SO, crie as seguintes variáveis:

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

Exemplo:

ENDPOINT_ID="2706243362607857664"

Na próxima seção, você vai criar um arquivo instances.json com o editor vi ou nano e inserir a string de dados usada para receber uma previsão do modelo implantado.

No SO west-client, crie um arquivo instances.json com a string de dados abaixo:

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

Exemplo:

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

Pré-teste

No SO, execute um curl para validar se o modelo e o endpoint de previsão estão funcionando corretamente. Observe o IP do endpoint do PSC no registro detalhado e o HTTP/2 200 indicando sucesso.

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 exemplo, anote o endereço IP do PSC usado para acessar a previsão e um resultado bem-sucedido.

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

Executar HEY

No SO, execute HEY permitindo um teste de valor de referência 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. Validação de mensagem (us-central1)

Agora que você executou Hey em uma instância do Compute em us-central1, avalie os resultados do seguinte:

  • Resultados HEY
  • Painel personalizado da Vertex
  • Network Intelligence

Resultados HEY

No SO, vamos validar os resultados HEY com base na execução de 10 minutos.

44,9408 solicitações por segundo

99% em 0,0353 s | 35 ms

Respostas 26965 com o código de status 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

Painel personalizado da Vertex

Navegue até MONITORAMENTO → Painel, selecione "Painel personalizado da Vertex" e digite 10m. ou os horários de início e término. Verifique se seu fuso horário está correto.

As latências de previsão para os últimos 10 meses rendem 30,533 ms.

A definição de latências de previsão indica uma métrica do lado do servidor que mede o tempo total de resposta à solicitação dos clientes após receber uma resposta do modelo.

  • Duração total da latência: o tempo total que uma solicitação gasta no serviço, que é a latência do modelo mais a latência de sobrecarga.

Por outro lado, a HEY é uma métrica do lado do cliente que considera os seguintes parâmetros:

Solicitação do cliente + Latência total (inclui a latência do modelo) + Resposta do cliente

Inteligência de rede

Vamos analisar a latência da rede intrarregional relatada pelo Network Intelligence para ter uma ideia da latência em us-central1 relatada pelo Google Cloud Platform.

Acesse o console do Cloud Network Intelligence → Painel de desempenho e selecione as opções a seguir, detalhadas na captura de tela abaixo, indicando a latência de 0,2 a 0,8 ms.

eaa84848c3185fde.png

Resumo do valor de referência de us-central1 HEY

A comparação da latência total informada pelas ferramentas de teste gera uma latência menor do que a do cliente ocidental devido aos endpoints de computação (cliente central) e Vertex (modelo e previsão on-line) na mesma região.

Ferramenta de latência

Duração

Inteligência de rede: latência intra-regional em us-central1

~0,2 a 0,8 ms

Cloud Monitoring: latência total de previsão [99%]

30,533 ms (99p)

Latência total informada pelo Google

~30,733 a 31,333 ms

Latência do lado do cliente HEY

35 ms (99p)

18. Parabéns

Parabéns, você implantou e validou a HEY com sucesso para conseguir a latência do valor de referência de previsão do lado do cliente usando uma combinação de Cloud Monitoring e Network Intelligence. Com base nos testes, você identificou um endpoint de previsão em us-central que pode ser disponibilizado entre regiões, mas com latência observada.

Cosmopup acha os tutoriais incríveis!!

e6d3675ca7c6911f.jpeg

19. Limpar

Exclua os componentes do tutorial no 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

Do Console do Cloud, excluiu o seguinte:

Pasta do Artifact Registry

99c17044e2f80919.png

No Vertex AI Model Registry, remova a implantação do modelo:

f5b315f089ae6283.png

Em "Previsão on-line da Vertex AI", exclua o endpoint

9b58688a5037de84.png

Qual é a próxima etapa?

Confira alguns desses tutoriais...

Leia mais e Vídeos

Documentos de referência