Este tutorial mostra como implementar e publicar um modelo de linguagem (conteúdo extenso) (MDI/CE) usando GPUs no Google Kubernetes Engine (GKE) com o NVIDIA Triton Inference Server e o TensorFlow Serving. Isto fornece uma base para compreender e explorar a implementação prática de MDIs/CEs para inferência num ambiente Kubernetes gerido. Implementa um contentor pré-criado num cluster do GKE com uma única GPU L4 Tensor Core e prepara a infraestrutura do GKE para fazer inferência online.
Este tutorial destina-se a engenheiros de aprendizagem automática (ML), administradores e operadores de plataformas, e a especialistas de dados e IA que queiram alojar um modelo de aprendizagem automática (ML) pré-preparado num cluster do GKE. Para saber mais sobre as funções comuns e as tarefas de exemplo referenciadas no Google Cloud conteúdo, consulte Funções e tarefas comuns de utilizadores do GKE.
Antes de ler esta página, certifique-se de que conhece o seguinte:
Crie um contentor do Cloud Storage
Crie um contentor do Cloud Storage para armazenar o modelo pré-preparado que vai ser publicado.
No Cloud Shell, execute o seguinte:
gcloud storage buckets create gs://$GSBUCKET
Configure o cluster para aceder ao contentor através da Workload Identity Federation para o GKE
Para permitir que o cluster aceda ao contentor do Cloud Storage, faça o seguinte:
- Crie uma Google Cloud conta de serviço.
- Crie uma conta de serviço do Kubernetes no seu cluster.
- Associe a conta de serviço do Kubernetes à Google Cloud conta de serviço.
Crie uma Google Cloud conta de serviço
Na Google Cloud consola, aceda à página Criar conta de serviço:
No campo ID da conta de serviço, introduza
gke-ai-sa
.Clique em Criar e continuar.
Na lista Função, selecione a função Cloud Storage > Serviço de recolha de estatísticas de armazenamento.
Clique em
Adicionar outra função.Na lista Selecionar uma função, selecione a função Cloud Storage > Administrador de objetos de armazenamento.
Clique em Continuar e, de seguida, em Concluído.
Crie uma conta de serviço do Kubernetes no seu 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 espaço de nomes:
kubectl create serviceaccount gpu-k8s-sa --namespace=gke-ai-namespace
Associe a conta de serviço do Kubernetes à Google Cloud conta de serviço
No Cloud Shell, execute os seguintes comandos:
Adicione uma associação do IAM à Google Cloud conta de serviço:
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 ServiceAccount do Kubernetes em Google Cloud.Anotar a ServiceAccount 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
Implemente o servidor de inferência online
Cada framework de inferência online espera encontrar o modelo de ML pré-preparado num formato específico. A secção seguinte mostra como implementar o servidor de inferência consoante a framework que quer usar:
Triton
No Cloud Shell, copie o modelo de ML pré-preparado para o contentor do Cloud Storage:
gcloud storage cp src/triton-model-repository gs://$GSBUCKET --recursive
Implemente a framework usando uma implementação. Uma implementação é um objeto da API Kubernetes que lhe permite executar várias réplicas de pods distribuídos entre os nós num cluster.
envsubst < src/gke-config/deployment-triton.yaml | kubectl --namespace=gke-ai-namespace apply -f -
Valide se o GKE implementou a framework:
kubectl get deployments --namespace=gke-ai-namespace
Quando a estrutura estiver pronta, o resultado é semelhante ao seguinte:
NAME READY UP-TO-DATE AVAILABLE AGE triton-deployment 1/1 1 1 5m29s
Implemente os serviços para aceder à implementaçã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 é semelhante ao seguinte:
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
Tome nota do endereço IP do
triton-server
na coluna EXTERNAL-IP.Verifique se o serviço e a implementação estão a funcionar corretamente:
curl -v EXTERNAL_IP:8000/v2/health/ready
O resultado é semelhante ao seguinte:
... < HTTP/1.1 200 OK < Content-Length: 0 < Content-Type: text/plain ...
Publicação de TF
No Cloud Shell, copie o modelo de ML pré-preparado para o contentor do Cloud Storage:
gcloud storage cp src/tfserve-model-repository gs://$GSBUCKET --recursive
Implemente a framework usando uma implementação. Uma implementação é um objeto da API Kubernetes que lhe permite executar várias réplicas de pods distribuídos entre os nós num cluster.
envsubst < src/gke-config/deployment-tfserve.yaml | kubectl --namespace=gke-ai-namespace apply -f -
Valide se o GKE implementou a framework:
kubectl get deployments --namespace=gke-ai-namespace
Quando a estrutura estiver pronta, o resultado é semelhante ao seguinte:
NAME READY UP-TO-DATE AVAILABLE AGE tfserve-deployment 1/1 1 1 5m29s
Implemente os serviços para aceder à implementaçã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 é semelhante ao seguinte:
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
Tome nota do endereço IP do
tfserve-server
na coluna EXTERNAL-IP.Verifique se o serviço e a implementação estão a funcionar corretamente:
curl -v EXTERNAL_IP:8000/v1/models/mnist
Substitua
EXTERNAL_IP
pelo seu endereço IP externo.O resultado é semelhante ao seguinte:
... < 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": "" } } ] }
Publique o modelo
Triton
Crie um ambiente virtual 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 o seguinte:
EXTERNAL_IP
: o seu endereço IP externo.TEST_IMAGE
: o nome do ficheiro que corresponde à imagem que quer testar. Pode usar as imagens armazenadas nosrc/client/images
.
Consoante a imagem que usar, o resultado é semelhante ao seguinte:
Calling Triton HTTP Service -> Prediction result: 7
Publicação de TF
Crie um ambiente virtual 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
Teste 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 o seguinte:
EXTERNAL_IP
: o seu endereço IP externo.TEST_IMAGE
: um valor de0
a9
. Pode usar as imagens armazenadas nosrc/client/images
.
Consoante a imagem que usar, recebe um resultado semelhante a este:
Calling TensorFlow Serve HTTP Service -> Prediction result: 5
Observe o desempenho do modelo
Triton
Para observar o desempenho do modelo, pode usar a integração do painel de controlo do Triton no Cloud Monitoring. Com este painel de controlo, pode ver métricas de desempenho críticas, como o débito de tokens, a latência de pedidos e as taxas de erro.
Para usar o painel de controlo do Triton, tem de ativar o Google Cloud Managed Service for Prometheus, que recolhe as métricas do Triton, no seu cluster do GKE. Por predefinição, o Triton expõe métricas no formato Prometheus; não precisa de instalar um exportador adicional.
Em seguida, pode ver as métricas através do painel de controlo do Triton. Para obter informações sobre a utilização do serviço gerido do Google Cloud para Prometheus para recolher métricas do seu modelo, consulte as orientações de observabilidade do Triton na documentação do Cloud Monitoring.Publicação de TF
Para observar o desempenho do modelo, pode usar a integração do painel de controlo do TF Serving no Cloud Monitoring. Com este painel de controlo, pode ver métricas de desempenho críticas, como o débito de tokens, a latência de pedidos e as taxas de erro.
Para usar o painel de controlo do TF Serving, tem de ativar o Google Cloud Managed Service for Prometheus, que recolhe as métricas do TF Serving, no seu cluster do GKE.
Em seguida, pode ver as métricas através do painel de controlo do TF Serving. Para obter informações sobre a utilização do serviço gerido do Google Cloud para Prometheus para recolher métricas do seu modelo, consulte as orientações de observabilidade do TF Serving na documentação do Cloud Monitoring.