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

1. Introdução

Neste tutorial, mostramos como criar e avaliar métricas de previsão on-line do Cloud Monitoring ao realizar testes de comparativo de mercado nas regiões 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 aiml-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, segmentando uma previsão on-line e um modelo implantado em us-central1.

O Private Service Connect e o DNS particular também são incorporados ao tutorial para demonstrar como ambientes locais e multicloud podem aproveitar o PSC para acessar o googleapis.

O Cloud Monitoring e o Network Intelligence serão usados no tutorial para validar o tráfego gerado do HEY para a previsão on-line. Embora as etapas descritas no tutorial sejam implantadas em uma VPC, é possível usar as etapas para implantar e obter um valor de referência das APIs Vertex de ambientes locais ou multicloud. 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 em us-central1 de uma instância do GCE em us-west1 usando HEY
  2. Verifique se o PSC está sendo usado para acessar a API Vertex
  3. Executar 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 predição on-line em us-central1 de uma instância do GCE em us-central1 usando HEY
  7. Verifique se o PSC está sendo usado para acessar a API Vertex
  8. Executar curl usando HEY por 5 minutos
  9. Validar a latência usando o Cloud Monitoring
  10. Validar a latência intrarregional usando a inteligência de rede

O que você vai aprender

  • Como estabelecer um endpoint do Private Service Connect
  • Como gerar carga para uma previsão on-line usando o HEY
  • Como criar métricas da Vertex AI usando o Cloud Monitoring
  • Como usar o Network Intelligence para validar a latência intrarregional e 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 oferecer suporte ao tutorial

Este tutorial usa $variáveis para ajudar na implementação da configuração do 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 aiml-vpc

Criar a aiml-vpc

gcloud services enable 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

Criar a sub-rede de notebooks gerenciados pelo usuário

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

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

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 do NAT

O Cloud NAT é usado no tutorial para baixar pacotes de software porque a instância do GCE não tem um endereço IP externo. O Cloud NAT oferece recursos de NAT de saída, o que significa que os hosts da Internet não podem iniciar a comunicação com um notebook gerenciado pelo usuário, tornando-o 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 regional do 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

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 regional do 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. Criar o endpoint do Private Service Connect

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

No Cloud Shell

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

Armazena 'pscendpointip' durante o laboratório.

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

echo $pscendpointip

Criar 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

Listar os endpoints do Private Service Connect configurados

No Cloud Shell

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

Descrever os endpoints do Private Service Connect configurados

No Cloud Shell

gcloud compute forwarding-rules describe \
    pscvertex --global

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

Para oferecer um controle refinado à API Vertex, é necessária uma conta de serviço gerenciada pelo usuário, que será aplicada às instâncias do oeste e do centro. 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, terá as seguintes funções aplicadas:

É necessário 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 a função "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 a função 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 de administrador do Storage.

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 a função 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 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 teste

Na seção a seguir, você vai criar instâncias de teste para realizar testes de valor 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"

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

  • Aplica-se a todas as instâncias de VM que você quer acessar usando o IAP.
  • Permite o tráfego de entrada do intervalo de IP 35.235.240.0/20. Esse intervalo contém todos os endereços IP que o IAP usa para o 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 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 ver o notebook implantado.

b02fcb9b07dca06a.png

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

Na seção a seguir, use o codelabVertex AI:usar rotinas de previsão personalizadas com o Sklearn para pré-processar e pós-processar dados para previsões. Comece pela seção 7,já que você 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 a previsão on-line

A previsão on-line cria um painel de monitoramento padrão em VERTEX AI → PREVISÃO ON-LINE → NOME DO ENDPOINT (diamonds-cpr_endpoint). No entanto, para nossos testes, precisamos definir um horário de início e de término. Portanto, um painel personalizado é necessário.

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. Isso vai validar a latência diferente ao acessar um endpoint em us-central1 de instâncias do GCE implantadas em us-west1 e us-central.

Para o tutorial, vamos usar as métricas "prediction_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.

Criar um gráfico para a métrica prediction_latencies

No Console do Cloud, navegue até MONITORING → Metrics Explorer.

536668ab0b29d77.png

Insira a métrica prediction/online/prediction_latencies e selecione as seguintes opções. Depois, clique em "Aplicar".

c1edd34208cb5ee2.png

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

e180a5d8a044b6e1.png

d2ecd6677a3b34e0.png

Selecione "Salvar". Você vai precisar escolher um painel. Selecione Novo Painel de controle e dê um nome.

e29a39dc941c8599.png

Painel personalizado da Vertex

Na seção a seguir, valide se o painel personalizado do Vertex está mostrando a hora correta.

Navegue até MONITORING → Painel e selecione "Painel personalizado do Vertex" e o período. Verifique se o fuso horário está correto.

f43ebed798ce1147.png

Expanda a legenda para obter uma visualização em tabela.

61ffeef22e067ca9.png

Exemplo de visualização expandida:

9027e8785c023129.png

11. Criar DNS particular para o endpoint do PSC

Crie uma zona de DNS particular na aiml-vpc para resolver todos os googleapis no endereço IP do endpoint do PSC 100.100.10.10.

No Cloud Shell, crie uma zona de 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. Olá, testando variáveis

O Hey permite que os usuários finais personalizem os testes com base nos requisitos de rede e de aplicativos. Para fins do tutorial, vamos usar a opção detalhada abaixo com uma string de execução de amostra:

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 curl com HEY (a 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. Receber o ID da previsão

Receba o ID do endpoint de previsão on-line do Console do Cloud, que será usado nas etapas subsequentes.

Acesse VERTEX AI → PREVISÃO ON-LINE

ce4d4a88a3fa2345.png

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

Na seção a seguir, você vai fazer login no west-client para baixar 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 do 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 seção a seguir, você vai criar um arquivo instances.json usando 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, observe o endereço IP do PSC usado para acessar a previsão e o 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 o HEY para ativar 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. Hey Validation (us-west1)

Agora que você executou o Hey de uma instância de computação em us-west1, avalie os resultados do seguinte:

  • Resultados HEY
  • Painel personalizado da Vertex
  • Network Intelligence

Resultados HEY

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

17,5826 solicitações por segundo

99% em 0,0686 segundos | 68 ms

10.550 respostas com 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é MONITORING → Painel e selecione "Painel personalizado do Vertex". Insira 10m ou especifique o horário de início e término. Verifique se o 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 para responder à solicitação dos clientes depois de receber uma resposta do modelo.

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

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

Solicitação do cliente + latência total (inclui latência do modelo) + resposta do cliente

Network Intelligence

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

Acesse o painel de desempenho do Network Intelligence no console do Cloud e selecione as opções detalhadas na captura de tela abaixo, indicando latência de 32 a 39 ms.

aade5f757115721.png

RESUMO DO VALOR DE REFERÊNCIA DE HEY us-west1

A comparação dos relatórios de latência total pelas ferramentas de teste gera aproximadamente a mesma latência informada pelo HEY. A latência entre regiões contribui com a maior parte da latência. Vamos ver como o cliente central funciona na próxima série de testes.

Ferramenta de latência

Duração

Inteligência de rede: latência de us-west1 para us-central1

~32 a 39 ms

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

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 central-client para baixar e executar o HEY na previsão on-line localizada em us-central1.

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

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

No SO, faça o download do 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 seção a seguir, você vai criar um arquivo instances.json usando 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, observe o endereço IP do PSC usado para acessar a previsão e o 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 o HEY para ativar 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. Hey Validation (us-central1)

Agora que você executou o Hey em uma instância de computação em us-central1, avalie os resultados do seguinte:

  • Resultados HEY
  • Painel personalizado da Vertex
  • Network Intelligence

Resultados HEY

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

44.9408 solicitações por segundo

99% em 0,0353 segundos | 35 ms

26.965 respostas com 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é MONITORING → Painel e selecione "Painel personalizado do Vertex". Insira 10m. Ou o horário de início e de término. Verifique se o fuso horário está correto.

Latências de previsão dos últimos 10 minutos geram 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 para responder à solicitação dos clientes depois de receber uma resposta do modelo.

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

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

Solicitação do cliente + latência total (inclui latência do modelo) + resposta do cliente

Network Intelligence

Agora vamos analisar a latência de rede intrarregional informada pelo Network Intelligence para ter uma ideia da latência us-central1 informada pelo Google Cloud Platform.

Navegue até "Painel de desempenho" em "Inteligência de rede do console do Cloud" e selecione as opções detalhadas na captura de tela abaixo, indicando latência de 0,2 a 0,8 ms.

eaa84848c3185fde.png

RESUMO DO VALOR DE REFERÊNCIA DE HEY us-central1

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

Ferramenta de latência

Duração

Inteligência de rede: latência intrarregional us-central1

~0,2 a 0,8 ms

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

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 o HEY para receber a latência de previsão de base do lado do cliente usando uma combinação do Cloud Monitoring e do Network Intelligence. Com base nos testes, você identificou que um endpoint de previsão em us-central pode ser veiculado entre regiões, mas foi observada latência.

O Cosmopup acha que os tutoriais são incríveis!

e6d3675ca7c6911f.jpeg

19. Limpar

No Cloud Shell, exclua os componentes do tutorial.

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

No console do Cloud, exclua o seguinte:

Pasta do Artifact Registry

99c17044e2f80919.png

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

f5b315f089ae6283.png

Na Vertex AI Online Prediction, exclua o endpoint.

9b58688a5037de84.png

Qual é a próxima etapa?

Confira alguns destes tutoriais:

Leituras e vídeos complementares

Documentos de referência