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
--member
fornece 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-server
na 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-server
na 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_IP
pelo 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 emsrc/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 de0
a9
. Use as imagens armazenadas no appsrc/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.