Neste tutorial, mostramos como implantar e disponibilizar um modelo de linguagem grande (LLM) usando GPUs no Google Kubernetes Engine (GKE) com o NVIDIA Triton Inference Server e o TensorFlow Serving Isso fornece uma base para entender e explorar a implantação prática de LLMs para inferência em um ambiente gerenciado do Kubernetes. Você implanta um contêiner pré-criado em um cluster do GKE com uma única GPU do Tensor Core L4 e prepara a infraestrutura do GKE para fazer inferências on-line.
Este tutorial é destinado a engenheiros de machine learning (ML), administradores e operadores de plataforma e especialistas em dados e IA que querem hospedar um modelo de machine learning (ML) pré-treinado em um cluster do GKE. Para saber mais sobre papéis comuns e exemplos de tarefas referenciados no conteúdo do Google Cloud, consulte Funções e tarefas comuns do usuário do GKE.
Antes de ler esta página, confira se você conhece os seguintes conceitos:
Criar um bucket do Cloud Storage
Crie um bucket do Cloud Storage para armazenar o modelo pré-treinado que será exibido.
No Cloud Shell, execute o seguinte:
gcloud storage buckets create gs://$GSBUCKET
Configurar o cluster para acessar o bucket usando a federação de identidade da carga de trabalho do GKE
Para permitir que o cluster acesse o bucket do Cloud Storage, faça o seguinte:
- Crie uma conta de serviço Google Cloud .
- Crie uma conta de serviço do Kubernetes no cluster.
- Vincule a conta de serviço do Kubernetes à conta de serviço Google Cloud .
Criar uma conta de serviço Google Cloud
- No console Google Cloud , acesse a página Criar conta de serviço: 
- No campo ID da conta de serviço, digite - gke-ai-sa.
- Clique em Criar e continuar. 
- Na lista Papel, selecione o papel Cloud Storage > Serviço de coletor do Insights. 
- Clique em Adicionar outro papel. 
- Na lista Selecionar um papel, selecione o papel Cloud Storage > Administrador de objetos do Storage. 
- Clique em Continuar e depois em Concluído. 
Criar uma conta de serviço do Kubernetes no cluster
No Cloud Shell, faça o seguinte:
- Crie um namespace do Kubernetes: - kubectl create namespace gke-ai-namespace
- Crie uma conta de serviço do Kubernetes no namespace: - kubectl create serviceaccount gpu-k8s-sa --namespace=gke-ai-namespace
Vincular a conta de serviço do Kubernetes à conta de serviço Google Cloud
No Cloud Shell, execute estes comandos:
- Adicione uma vinculação do IAM à conta de serviço Google Cloud : - gcloud iam service-accounts add-iam-policy-binding gke-ai-sa@PROJECT_ID.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-ai-namespace/gpu-k8s-sa]"- A flag - --memberfornece a identidade completa da conta de serviço do Kubernetes em Google Cloud.
- Anote a conta de serviço do Kubernetes: - kubectl annotate serviceaccount gpu-k8s-sa \ --namespace gke-ai-namespace \ iam.gke.io/gcp-service-account=gke-ai-sa@PROJECT_ID.iam.gserviceaccount.com
Implantar o servidor de inferência on-line
Cada framework de inferência on-line espera encontrar o modelo de ML pré-treinado em um formato específico. A seção a seguir mostra como implantar o servidor de inferência dependendo do framework que você quer usar:
Triton
- No Cloud Shell, copie o modelo de ML pré-treinado para o bucket do Cloud Storage: - gcloud storage cp src/triton-model-repository gs://$GSBUCKET --recursive
- Implante o framework usando uma implantação. Uma implantação é um objeto da API Kubernetes que permite executar várias réplicas de pods distribuídos entre os nós de um cluster: - envsubst < src/gke-config/deployment-triton.yaml | kubectl --namespace=gke-ai-namespace apply -f -
- Valide se o GKE implantou o framework: - kubectl get deployments --namespace=gke-ai-namespace- Quando o framework estiver pronto, a saída será semelhante a esta: - NAME READY UP-TO-DATE AVAILABLE AGE triton-deployment 1/1 1 1 5m29s
- Implante os serviços para acessar a implantação: - kubectl apply --namespace=gke-ai-namespace -f src/gke-config/service-triton.yaml
- Verifique se o IP externo está atribuído: - kubectl get services --namespace=gke-ai-namespace- O resultado será assim: - NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 60m triton-server LoadBalancer 34.118.227.176 35.239.54.228 8000:30866/TCP,8001:31035/TCP,8002:30516/TCP 5m14s- Anote o endereço IP de - triton-serverna coluna EXTERNAL-IP.
- Verifique se o serviço e a implantação estão funcionando corretamente: - curl -v EXTERNAL_IP:8000/v2/health/ready- O resultado será assim: - ... < HTTP/1.1 200 OK < Content-Length: 0 < Content-Type: text/plain ...
Exibição de TF
- No Cloud Shell, copie o modelo de ML pré-treinado para o bucket do Cloud Storage: - gcloud storage cp src/tfserve-model-repository gs://$GSBUCKET --recursive
- Implante o framework usando uma implantação. Uma implantação é um objeto da API Kubernetes que permite executar várias réplicas de pods distribuídos entre os nós de um cluster: - envsubst < src/gke-config/deployment-tfserve.yaml | kubectl --namespace=gke-ai-namespace apply -f -
- Valide se o GKE implantou o framework: - kubectl get deployments --namespace=gke-ai-namespace- Quando o framework estiver pronto, a saída será semelhante a esta: - NAME READY UP-TO-DATE AVAILABLE AGE tfserve-deployment 1/1 1 1 5m29s
- Implante os serviços para acessar a implantação: - kubectl apply --namespace=gke-ai-namespace -f src/gke-config/service-tfserve.yaml
- Verifique se o IP externo está atribuído: - kubectl get services --namespace=gke-ai-namespace- O resultado será assim: - NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 60m tfserve-server LoadBalancer 34.118.227.176 35.239.54.228 8500:30003/TCP,8000:32194/TCP 5m14s- Anote o endereço IP de - tfserve-serverna coluna EXTERNAL-IP.
- Verifique se o serviço e a implantação estão funcionando corretamente: - curl -v EXTERNAL_IP:8000/v1/models/mnist- Substitua - EXTERNAL_IPpelo endereço IP externo.- O resultado será assim: - ... < HTTP/1.1 200 OK < Content-Type: application/json < Date: Thu, 12 Oct 2023 19:01:19 GMT < Content-Length: 154 < { "model_version_status": [ { "version": "1", "state": "AVAILABLE", "status": { "error_code": "OK", "error_message": "" } } ] }
Disponibilizar o modelo
Triton
- Criar um ambiente virtual do Python no Cloud Shell. - python -m venv ./mnist_client source ./mnist_client/bin/activate
- Instale os pacotes Python necessários. - pip install -r src/client/triton-requirements.txt
- Teste o servidor de inferência do Triton carregando uma imagem: - cd src/client python triton_mnist_client.py -i EXTERNAL_IP -m mnist -p ./images/TEST_IMAGE.png- Substitua: - EXTERNAL_IP: o endereço IP externo.
- TEST_IMAGE: o nome do arquivo que corresponde à imagem que você quer testar. É possível usar as imagens armazenadas em- src/client/images.
 - Dependendo da imagem usada, a saída será semelhante a esta: - Calling Triton HTTP Service -> Prediction result: 7
Exibição de TF
- Criar um ambiente virtual do Python no Cloud Shell. - python -m venv ./mnist_client source ./mnist_client/bin/activate
- Instale os pacotes Python necessários. - pip install -r src/client/tfserve-requirements.txt
- Testar o TensorFlow Serving com algumas imagens. - cd src/client python tfserve_mnist_client.py -i EXTERNAL_IP -m mnist -p ./images/TEST_IMAGE.png
Substitua:
- EXTERNAL_IP: o endereço IP externo.
- TEST_IMAGE: um valor de- 0a- 9. Use as imagens armazenadas no app- src/client/images.
Dependendo da imagem usada, você terá uma saída semelhante a esta:
  Calling TensorFlow Serve HTTP Service    ->      Prediction result: 5
Observar o desempenho do modelo
Triton
Para observar a performance do modelo, use a integração do painel do Triton no Cloud Monitoring. Com esse painel, é possível conferir métricas de desempenho importantes, como taxa de transferência de tokens, latência de solicitação e taxas de erro.
Para usar o painel do Triton, ative o Google Cloud Managed Service para Prometheus, que coleta as métricas do Triton no cluster do GKE. O Triton expõe métricas no formato do Prometheus por padrão. Não é necessário instalar um exportador adicional.
Em seguida, é possível conferir as métricas usando o painel do Triton. Para informações sobre como usar o Google Cloud Managed Service para Prometheus e coletar métricas do seu modelo, consulte as orientações de capacidade de observação do Triton na documentação do Cloud Monitoring.Exibição de TF
Para observar a performance do modelo, use a integração do painel do TF Serving no Cloud Monitoring. Com esse painel, é possível conferir métricas de desempenho importantes, como taxa de transferência de tokens, latência de solicitação e taxas de erro.
Para usar o painel do TF Serving, ative o Google Cloud Managed Service para Prometheus, que coleta as métricas do TF Serving no cluster do GKE.
Em seguida, é possível conferir as métricas usando o painel do TF Serving. Para informações sobre como usar o Google Cloud Managed Service para Prometheus para coletar métricas do seu modelo, consulte as orientações de capacidade de observação do TF Serving na documentação do Cloud Monitoring.