Sua Primeira API de LLM no Kubernetes

Executar um LLM no Kubernetes é diferente de executar um aplicativo web padrão. Você não escala apenas por requisições. Você escala por capacidade de GPU e pesos do modelo.

Neste guia, você implantará um modelo em um nó de GPU, o exporá como uma API e o chamará com uma requisição curl.

Usamos estas ferramentas:

  • Modelo: Qwen/Qwen2.5-1.5B-Instruct
  • Engine: vLLM
  • Infraestrutura: Kubernetes com suporte a GPU NVIDIA

Passo 1: Verifique sua capacidade de GPU Antes de começar, certifique-se de que o Kubernetes reconhece seu hardware. Execute este comando: kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu

Se a coluna GPU estiver vazia, pare. Você deve corrigir seu plugin de dispositivo NVIDIA primeiro.

Passo 2: Proteja o acesso ao seu modelo Mesmo para modelos públicos, use um token do Hugging Face. Isso facilita a troca para modelos privados posteriormente.

  • Crie um namespace: kubectl create namespace llm-demo
  • Crie um Secret para o seu token: kubectl create secret generic hf-token -n llm-demo --from-literal=HF_TOKEN="your_token_here"

Passo 3: Implante o servidor do modelo Usamos o vLLM porque ele cuida do trabalho pesado. Ele gerencia o batching, a tokenização e a API compatível com a OpenAI.

Crie um arquivo de deployment com estes requisitos principais:

  • Solicite 1 GPU: nvidia.com/gpu: 1
  • Monte /dev/shm: Servidores de modelos precisam de memória compartilhada para evitar falhas.
  • Use Secrets: Passe seu HF_TOKEN para o container.

Aplique sua configuração: kubectl apply -f qwen-vllm.yaml

Passo 4: Verifique a API Não confie no status "Running". Um pod está em "Running" enquanto ainda está baixando arquivos de modelo massivos. Acompanhe seus logs: kubectl logs -n llm-demo -f deployment/qwen-vllm

Aguarde até ver o servidor ouvindo na porta 8000.

Teste com port-forwarding: kubectl port-forward -n llm-demo svc/qwen-vllm 8000:8000

Execute sua requisição curl:

curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
  "model": "Qwen/Qwen2.5-1.5B-Instruct",
  "messages": [{"role": "user", "content": "Explain Kubernetes in two sentences."}],
  "max_tokens": 120
}'

O Objetivo: Você passou da capacidade bruta de GPU para uma API funcional. Você provou que:

  • O Kubernetes agenda a carga de trabalho da GPU.
  • O container pode acessar o hardware.
  • O servidor do modelo carrega os pesos na memória.
  • A API responde a requisições padrão.

Se este ciclo falhar, o escalonamento e o roteamento não o salvarão. Corrija a base primeiro.

Source: https://dev.to/the-persistent-engineer/your-first-llm-api-on-kubernetes-from-model-to-curl-request-4l1j

Optional learning community: https://t.me/GyaanSetuAi