La tua prima API LLM su Kubernetes

Eseguire un LLM su Kubernetes è diverso dal far girare una normale web app. Non si scala solo in base alle richieste. Si scala in base alla capacità della GPU e ai pesi del modello.

In questa guida, distribuirai un modello su un nodo GPU, lo esporrai come API e lo chiamerai tramite una richiesta curl.

Usiamo questi strumenti:

  • Modello: Qwen/Qwen2.5-1.5B-Instruct
  • Motore: vLLM
  • Infrastruttura: Kubernetes con supporto GPU NVIDIA

Passaggio 1: Controlla la capacità della tua GPU Prima di iniziare, assicurati che Kubernetes veda il tuo hardware. Esegui questo comando: kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu

Se la colonna GPU è vuota, fermati. Devi prima risolvere il problema del tuo NVIDIA device plugin.

Passaggio 2: Assicura l'accesso al tuo modello Anche per i modelli pubblici, usa un token di Hugging Face. Questo renderà più facile passare a modelli privati in seguito.

  • Crea un namespace: kubectl create namespace llm-demo
  • Crea un Secret per il tuo token: kubectl create secret generic hf-token -n llm-demo --from-literal=HF_TOKEN="your_token_here"

Passaggio 3: Distribuisci il server del modello Usiamo vLLM perché gestisce il lavoro pesante. Si occupa di batching, tokenizzazione e dell'API compatibile con OpenAI.

Crea un file di deployment con questi requisiti chiave:

  • Richiesta 1 GPU: nvidia.com/gpu: 1
  • Monta /dev/shm: I server dei modelli necessitano di memoria condivisa per evitare crash.
  • Usa i Secret: Passa il tuo HF_TOKEN al container.

Applica la tua configurazione: kubectl apply -f qwen-vllm.yaml

Passaggio 4: Verifica l'API Non fidarti dello stato "Running". Un pod risulta "Running" anche mentre sta ancora scaricando enormi file di modello. Monitora i log: kubectl logs -n llm-demo -f deployment/qwen-vllm

Attendi finché non vedi il server in ascolto sulla porta 8000.

Testalo con il port-forwarding: kubectl port-forward -n llm-demo svc/qwen-vllm 8000:8000

Esegui la tua richiesta 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
}'

L'obiettivo: Sei passato dalla semplice capacità GPU a un'API funzionante. Hai dimostrato che:

  • Kubernetes pianifica il carico di lavoro della GPU.
  • Il container può accedere all'hardware.
  • Il server del modello carica i pesi in memoria.
  • L'API risponde alle richieste standard.

Se questo ciclo fallisce, lo scaling e il routing non ti salveranno. Sistema prima le fondamenta.

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

Community di apprendimento opzionale: https://t.me/GyaanSetuAi