Neste guia, mostramos como otimizar os custos para cargas de trabalho de serviço de LLM no GKE. Este tutorial usa uma combinação de VMs flex-start, VMs spot e ComputeClasses 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 disponibilizar LLMs. Para mais informações sobre papéis comuns e exemplos de tarefas mencionados no conteúdo do Google Cloud , consulte Tarefas e papéis de usuário comuns do GKE.
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 cotas e com acesso econômico. O início flexível é alimentado pelo Dynamic Workload Scheduler e é faturado usando os preços do Dynamic Workload Scheduler:
- Receber um desconto (até 53%) em vCPUs, GPUs, TPUs e discos SSD locais anexados.
- Você paga conforme usa (PAYG).
Contexto
Nesta seção, descrevemos os recursos disponíveis que podem ser usados para obter recursos de computação, incluindo GPUs ou TPUs, com base nos requisitos das cargas de trabalho de IA/ML. Esses recursos ajudam você a implementar estratégias para maximizar a flexibilidade, a eficiência e a disponibilidade da sua capacidade de computação.
GPUs
As unidades de processamento gráfico (GPUs) permitem acelerar cargas de trabalho específicas, como machine learning e tratamento 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.
Início flexível
O início flexível, com tecnologia do Escalonador dinâmico de cargas de trabalho, é uma opção de consumo de GPU em que o GKE persiste sua solicitação de GPU e provisiona automaticamente VMs flex-start quando a capacidade fica disponível. Considere usar o início flexível 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
Também é possível usar GPUs com VMs spot quando as cargas de trabalho conseguirem tolerar 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 início flexível 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.
ComputeClasses
É possível solicitar GPUs usando ComputeClasses. Com as ComputeClasses, é possível definir uma hierarquia de configurações de nós para o GKE priorizar durante as decisões de escalonamento de nós, para que as cargas de trabalho sejam executadas no hardware selecionado. Para mais informações, consulte Sobre as ComputeClasses personalizadas.
Antes de começar
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloudagora, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Verifique se você tem um cluster do GKE Autopilot ou Standard que executa a versão 1.32.2-gke.1652000 ou mais recente. O 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 preemptiva suficiente para GPUs NVIDIA L4. Para mais informações, consulte Cotas preemptivas.
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 um papel de pelo menos
Read. - Selecione Gerar um token.
Criar uma ComputeClass
Nesta seção, você vai criar uma ComputeClass personalizada. As ComputeClasses definem os tipos e as relações entre vários recursos de computação usados pela sua carga de trabalho.
- No console do Google Cloud , inicie uma sessão do Cloud Shell clicando em
Ativar o Cloud Shell no console doGoogle Cloud . Uma sessão é aberta no painel inferior do console do Google 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: trueAplique 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 ComputeClasses para priorizar primeiro as VMs spot e depois as VMs flex-start.
Implantar a carga de trabalho de LLM
Crie um secret do Kubernetes que contenha o token do Hugging Face usando o seguinte comando:
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_TOKENpelo token de acesso do Hugging Face.Crie um arquivo chamado
mixtral-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: inference-mixtral-ccc spec: replicas: 1 selector: matchLabels: app: llm template: metadata: labels: app: llm spec: nodeSelector: cloud.google.com/compute-class: dws-model-inference-class 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: 100GiNesse manifesto, o campo
mountPathé definido como/tmp, porque é o caminho em que a variável de ambienteHF_HOMEno Deep Learning Container (DLC) para inferência de geração de texto (TGI, na sigla em inglês) é definida, em vez do caminho padrão/datadefinido na imagem padrão do TGI. O modelo baixado será armazenado neste diretório.Implante o modelo:
kubectl apply -f mixtral-deployment.yamlO GKE programa a implantação de um novo pod, 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-cccSe 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 10mPara sair da exibição, pressione
CTRL + C.Aguarde o download do contêiner e o início da disponibilização do modelo:
watch "kubectl logs $(kubectl get pods -l app=llm -o custom-columns=:metadata.name --no-headers) | tail"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-nodepoolO resultado será o seguinte:
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-poolO nome do pool de nós criado indica o tipo de máquina. Nesse caso, o GKE provisionou VMs spot.
Exponha o modelo:
kubectl expose deployment/inference-mixtral-ccc --port 8080 --name=llm-service
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:8080O resultado será o seguinte:
Forwarding from 127.0.0.1:8080 -> 8080Em 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 Google Cloud 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
- No console Google Cloud , acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
Excluir o recurso individual
Exclua os recursos do Kubernetes que você criou 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-secretExclua 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.