Neste guia, mostramos como otimizar os custos das cargas de trabalho de serviço de LLM no GKE. Este tutorial usa uma combinação de flex-start, VMs spot e perfis personalizados de classe de computação para inferência econômica.
Este guia usa o Mixtral 8x7b como um exemplo de LLM que você pode implantar.
Este guia é destinado a engenheiros de machine learning (ML), administradores e operadores de plataforma e especialistas em dados e IA interessados em usar os recursos de orquestração de contêineres do Kubernetes para veiculação de LLMs. Para mais informações sobre papéis comuns e exemplos de tarefas que mencionamos no conteúdo do Trusted Cloud by S3NS , consulte Funções e tarefas de usuário comuns do GKE Enterprise.
Preços de início flexível
O início flexível é recomendado se a carga de trabalho exigir recursos provisionados dinamicamente conforme necessário, por até sete dias com reservas de curto prazo, sem gerenciamento complexo de cota e acesso econômico. O início flexível é alimentado pelo Programador dinâmico de cargas de trabalho e é faturado usando os preços do Programador dinâmico de cargas de trabalho:
- Desconto de até 53% para vCPUs, GPUs e TPUs.
- Você paga conforme a utilização.
Contexto
Nesta seção, descrevemos as técnicas disponíveis que podem ser usadas para obter recursos de computação, incluindo aceleradores de GPU, com base nos requisitos das suas cargas de trabalho de IA/ML. Essas técnicas são chamadas de estratégias de disponibilidade de aceleradores no GKE.
GPUs
As unidades de processamento gráfico (GPUs) permitem acelerar cargas de trabalho específicas, como machine learning e processamento de dados. O GKE oferece nós equipados com essas GPUs potentes para otimizar o desempenho das tarefas de machine learning e processamento de dados. O GKE oferece uma variedade de opções de tipo de máquina para configuração de nós, incluindo tipos de máquinas com GPUs NVIDIA H100, A100 e L4.
Para mais informações, consulte Sobre GPUs no GKE.
Modo de provisionamento de início flexível
O modo de provisionamento de início flexível, com tecnologia do Dynamic Workload Scheduler, é um tipo de consumo de GPU em que o GKE mantém sua solicitação de GPU e provisiona recursos automaticamente quando a capacidade fica disponível. Considere usar o flex-start para cargas de trabalho que precisam de capacidade de GPU por um período limitado, até sete dias, e não têm uma data de início fixa. Para mais informações, consulte flex-start.
VMs spot
É possível usar GPUs com VMs spot se as cargas de trabalho tolerarem interrupções frequentes de nós. O uso de VMs spot ou de início flexível reduz o preço da execução de GPUs. Usar VMs spot com flex-start oferece uma opção de substituição quando a capacidade das VMs spot não está disponível.
Para mais informações, consulte Como usar VMs spot com pools de nós de GPU.
Classes de computação personalizadas
É possível solicitar GPUs usando classes de computação personalizadas. Com as classes de computação personalizadas, é possível definir uma hierarquia de configurações de nós para o GKE priorizar durante as decisões de escalonamento de nós, de modo que as cargas de trabalho sejam executadas no hardware selecionado. Para mais informações, consulte Sobre as classes de computação personalizadas.
Antes de começar
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Make sure that billing is enabled for your Trusted Cloud project.
-
Make sure that you have the following role or roles on the project:
Check for the roles
-
In the Trusted Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Trusted Cloud console, go to the IAM page.
Acessar o IAM - Selecionar um projeto.
- Clique em CONCEDER ACESSO.
-
No campo Novos principais, insira seu identificador de usuário. Normalmente, é o identificador de um usuário em um pool de identidades de força de trabalho. Para mais detalhes, consulte Representar usuários do pool de força de trabalho nas políticas do IAM ou entre em contato com seu administrador.
- Na lista Selecionar um papel, escolha um.
- Para conceder outros papéis, clique em Adicionar outro papel e adicione cada papel adicional.
- Clique em Salvar.
-
- Verifique se você tem um cluster do GKE Autopilot ou Standard que executa a versão 1.32.2-gke.1652000 ou mais recente. Seu cluster precisa ativar o provisionamento automático de nós e configurar limites de GPU.
- Crie uma conta do Hugging Face caso ainda não tenha uma.
- Verifique se o projeto tem cota suficiente para GPUs NVIDIA L4. Para mais informações, consulte Sobre GPUs e Cotas de alocação.
Receber acesso ao modelo
Gere um token do Hugging Face, se você ainda não tiver um:
- Clique em Seu perfil > Configurações > Tokens de acesso.
- Selecione Novo token.
- Especifique um nome de sua escolha e uma função de pelo menos
Read
. - Selecione Gerar um token.
Criar um perfil de classe de computação personalizada
Nesta seção, você vai criar um perfil de classe de computação personalizada. Os perfis de classe de computação personalizados definem os tipos e as relações entre vários recursos de computação usados pela sua carga de trabalho.
- No console Trusted Cloud , inicie uma sessão do Cloud Shell clicando em
Ativar o Cloud Shell no consoleTrusted Cloud . Uma sessão é aberta no painel inferior do console Trusted Cloud .
Crie um arquivo de manifesto
dws-flex-start.yaml
:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: dws-model-inference-class spec: priorities: - machineType: g2-standard-24 spot: true - machineType: g2-standard-24 flexStart: enabled: true nodeRecycling: leadTimeSeconds: 3600 nodePoolAutoCreation: enabled: true
Aplique o manifesto
dws-flex-start.yaml
:kubectl apply -f dws-flex-start.yaml
O GKE implanta máquinas g2-standard-24
com aceleradores L4.
O GKE usa
classes de computação para
priorizar primeiro as VMs do Spot e, em segundo lugar, o início flexível.
Implantar a carga de trabalho de LLM
Crie um secret do Kubernetes que contenha o token do Hugging Face usando o comando a seguir:
kubectl create secret generic model-inference-secret \ --from-literal=HUGGING_FACE_TOKEN=HUGGING_FACE_TOKEN \ --dry-run=client -o yaml | kubectl apply -f -
Substitua
HUGGING_FACE_TOKEN
pelo token de acesso do Hugging Face.Crie um arquivo chamado
mixtral-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: inference-mixtral-ccc spec: nodeSelector: cloud.google.com/compute-class: dws-model-inference-class replicas: 1 selector: matchLabels: app: llm template: metadata: labels: app: llm spec: containers: - name: llm image: us-docker.pkg.dev/deeplearning-platform-release/gcr.io/huggingface-text-generation-inference-cu124.2-3.ubuntu2204.py311 resources: requests: cpu: "5" memory: "40Gi" nvidia.com/gpu: "2" limits: cpu: "5" memory: "40Gi" nvidia.com/gpu: "2" env: - name: MODEL_ID value: mistralai/Mixtral-8x7B-Instruct-v0.1 - name: NUM_SHARD value: "2" - name: PORT value: "8080" - name: QUANTIZE value: bitsandbytes-nf4 - name: HUGGING_FACE_HUB_TOKEN valueFrom: secretKeyRef: name: model-inference-secret key: HUGGING_FACE_TOKEN volumeMounts: - mountPath: /dev/shm name: dshm - mountPath: /tmp name: ephemeral-volume volumes: - name: dshm emptyDir: medium: Memory - name: ephemeral-volume ephemeral: volumeClaimTemplate: metadata: labels: type: ephemeral spec: accessModes: ["ReadWriteOnce"] storageClassName: "premium-rwo" resources: requests: storage: 100Gi
Neste manifesto, o campo
mountPath
é definido como/tmp
, porque é o caminho em que a variável de ambienteHF_HOME
no contêiner de aprendizado profundo (DLC) para inferência de geração de texto (TGI) é definida, em vez do caminho padrão/data
definido na imagem padrão do TGI. O modelo baixado será armazenado neste diretório.Implante o modelo:
kubectl apply -f mixtral-deployment.yaml
O GKE programa um novo pod para implantação, o que aciona o escalonador automático do pool de nós para adicionar um segundo nó antes de implantar a segunda réplica do modelo.
Verifique o status do modelo:
watch kubectl get deploy inference-mixtral-ccc
Se o modelo foi implantado com sucesso, a saída será semelhante a esta:
NAME READY UP-TO-DATE AVAILABLE AGE inference-mixtral-ccc 1/1 1 1 10m
Para sair da exibição, pressione
CTRL + C
.Confira os pools de nós provisionados pelo GKE:
kubectl get nodes -L cloud.google.com/gke-nodepool
O resultado será assim:
NAME STATUS ROLES AGE VERSION GKE-NODEPOOL gke-flex-na-nap-g2-standard--0723b782-fg7v Ready <none> 10m v1.32.3-gke.1152000 nap-g2-standard-24-spot-gpu2-1gbdlbxz gke-flex-nap-zo-default-pool-09f6fe53-fzm8 Ready <none> 32m v1.32.3-gke.1152000 default-pool gke-flex-nap-zo-default-pool-09f6fe53-lv2v Ready <none> 32m v1.32.3-gke.1152000 default-pool gke-flex-nap-zo-default-pool-09f6fe53-pq6m Ready <none> 32m v1.32.3-gke.1152000 default-pool
O nome do pool de nós criado indica o tipo de máquina. Nesse caso, o GKE provisionou Spot VMs.
Interagir com o modelo usando curl
Nesta seção, mostramos como realizar um teste de inferência básico para verificar o modelo implantado.
Configure o encaminhamento de portas para o modelo:
kubectl port-forward service/llm-service 8080:8080
O resultado será assim:
Forwarding from 127.0.0.1:8080 -> 8080
Em uma nova sessão do terminal, converse com seu modelo usando
curl
:curl http://localhost:8080/v1/completions \ -X POST \ -H "Content-Type: application/json" \ -d '{ "model": "mixtral-8x7b-instruct-gptq", "prompt": "<s>[INST]Who was the first president of the United States?[/INST]", "max_tokens": 40}'
A saída será assim:
George Washington was a Founding Father and the first president of the United States, serving from 1789 to 1797.
Limpar
Para evitar cobranças na sua conta do Trusted Cloud by S3NS pelos recursos usados nesta página, exclua o projeto que contém os recursos ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
- In the Trusted Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Excluir o recurso individual
Exclua os recursos do Kubernetes que você criou com base neste guia:
kubectl delete deployment inference-mixtral-ccc kubectl delete service llm-service kubectl delete computeclass dws-model-inference-class kubectl delete secret model-inference-secret
Exclua o cluster:
gcloud container clusters delete CLUSTER_NAME
A seguir
- Saiba como treinar uma pequena carga de trabalho com início flexível.
- Saiba mais sobre GPUs no GKE.