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:
Confira abaixo os detalhes do caso de uso:
- Acessar a previsão on-line na região us-central1 de uma instância do GCE em us-west1 usando HEY
- Verificar se o PSC está sendo usado para acessar a API Vertex
- Executar o curl usando HEY por 5 minutos
- Validar a latência usando o Cloud Monitoring
- Validar a latência entre regiões usando o Network Intelligence
- Acessar a previsão on-line em us-central1 a partir de uma instância do GCE em us-central1 usando HEY
- Verificar se o PSC está sendo usado para acessar a API Vertex
- Executar o curl usando HEY por 5 minutos
- Validar a latência usando o Cloud Monitoring
- 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
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
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.
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.
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
Insira a métrica prediction/online/prediction_latencies e selecione as opções a seguir. Clique em "Aplicar".
Atualize "Agrupar por" com base na opção a seguir e selecione "Salvar gráfico".
Clique em "Salvar". Você será solicitado a selecionar um dashboard. Selecione Novo painel de controle e fornecer um nome.
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.
Expanda a legenda para ter uma visualização de tabela.
Exemplo de visualização expandida:
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
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.
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.
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.
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!!
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
No Vertex AI Model Registry, remova a implantação do modelo:
Em "Previsão on-line da Vertex AI", exclua o endpoint
Qual é a próxima etapa?
Confira alguns desses tutoriais...
- Private Service Connect para APIs do Google
- A Vertex AI cria um notebook seguro gerenciado pelo usuário
Leia mais e Vídeos
- Visão geral do Private Service Connect
- O que é o Private Service Connect?
- Como fazer previsões de um modelo de ML
- O que é a Vertex AI?