Kubernetes 'ਤੇ ਤੁਹਾਡੀ ਪਹਿਲੀ LLM API

Kubernetes 'ਤੇ LLM ਚਲਾਉਣਾ ਇੱਕ ਸਟੈਂਡਰਡ ਵੈੱਬ ਐਪ ਚਲਾਉਣ ਨਾਲੋਂ ਵੱਖਰਾ ਹੈ। ਤੁਸੀਂ ਸਿਰਫ਼ ਰਿਕੁਐਸਟਾਂ (requests) ਦੇ ਆਧਾਰ 'ਤੇ ਸਕੈਲ (scale) ਨਹੀਂ ਕਰਦੇ। ਤੁਸੀਂ GPU ਸਮਰੱਥਾ ਅਤੇ ਮਾਡਲ ਵੇਟਸ (model weights) ਦੇ ਆਧਾਰ 'ਤੇ ਸਕੈਲ ਕਰਦੇ ਹੋ।

ਇਸ ਗਾਈਡ ਵਿੱਚ, ਤੁਸੀਂ ਇੱਕ ਮਾਡਲ ਨੂੰ GPU ਨੋਡ 'ਤੇ ਡਿਪਲੋਏ ਕਰੋਗੇ, ਇਸਨੂੰ ਇੱਕ API ਵਜੋਂ ਐਕਸਪੋਜ਼ (expose) ਕਰੋਗੇ, ਅਤੇ ਇੱਕ curl ਰਿਕੁਐਸ ਨਾਲ ਇਸਨੂੰ ਕਾਲ ਕਰੋਗੇ।

ਅਸੀਂ ਇਹਨਾਂ ਟੂਲਸ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ:

  • Model: Qwen/Qwen2.5-1.5B-Instruct
  • Engine: vLLM
  • Infrastructure: NVIDIA GPU ਸਪੋਰਟ ਦੇ ਨਾਲ Kubernetes

ਸਟੈਪ 1: ਆਪਣੀ GPU ਸਮਰੱਥਾ ਦੀ ਜਾਂਚ ਕਰੋ

ਸ਼ੁਰੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, ਇਹ ਯਕੀਨੀ ਬਣਾਓ ਕਿ Kubernetes ਤੁਹਾਡੇ ਹਾਰਡਵੇਅਰ ਨੂੰ ਦੇਖ ਸਕਦਾ ਹੈ। ਇਹ ਕਮਾਂਡ ਚਲਾਓ: kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu

ਜੇਕਰ GPU ਕਾਲਮ ਖਾਲੀ ਹੈ, ਤਾਂ ਰੁਕ ਜਾਓ। ਤੁਹਾਨੂੰ ਪਹਿਲਾਂ ਆਪਣਾ NVIDIA device plugin ਠੀਕ ਕਰਨਾ ਹੋਵੇਗਾ।

ਸਟੈਪ 2: ਆਪਣੇ ਮਾਡਲ ਐਕਸੈਸ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰੋ

ਜਨਤਕ (public) ਮਾਡਲਾਂ ਲਈ ਵੀ, Hugging Face ਟੋਕਨ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਬਾਅਦ ਵਿੱਚ ਪ੍ਰਾਈਵੇਟ ਮਾਡਲਾਂ 'ਤੇ ਬਦਲਣਾ ਆਸਾਨ ਬਣਾਉਂਦਾ ਹੈ।

  • ਇੱਕ namespace ਬਣਾਓ: kubectl create namespace llm-demo
  • ਆਪਣੇ ਟੋਕਨ ਲਈ ਇੱਕ Secret ਬਣਾਓ: kubectl create secret generic hf-token -n llm-demo --from-literal=HF_TOKEN="your_token_here"

ਸਟੈਪ 3: ਮਾਡਲ ਸਰਵਰ ਨੂੰ ਡਿਪਲੋਏ ਕਰੋ

ਅਸੀਂ vLLM ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ ਕਿਉਂਕਿ ਇਹ ਮੁਸ਼ਕਲ ਕੰਮਾਂ (heavy lifting) ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ। ਇਹ batching, tokenization, ਅਤੇ OpenAI-compatible API ਨੂੰ ਪ੍ਰਬੰਧਿਤ ਕਰਦਾ ਹੈ।

ਇਹਨਾਂ ਮੁੱਖ ਲੋੜਾਂ ਦੇ ਨਾਲ ਇੱਕ deployment ਫਾਈਲ ਬਣਾਓ:

  • 1 GPU ਦੀ ਮੰਗ ਕਰੋ: nvidia.com/gpu: 1
  • /dev/shm ਨੂੰ ਮਾਊਂਟ (mount) ਕਰੋ: ਕ੍ਰੈਸ਼ਾਂ ਤੋਂ ਬਚਣ ਲਈ ਮਾਡਲ ਸਰਵਰਾਂ ਨੂੰ shared memory ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।
  • Secrets ਦੀ ਵਰਤੋਂ ਕਰੋ: ਆਪਣੇ HF_TOKEN ਨੂੰ ਕੰਟੇਨਰ (container) ਵਿੱਚ ਪਾਸ ਕਰੋ।

ਆਪਣੀ ਕੌਂਫਿਗਰੇਸ਼ਨ ਲਾਗੂ ਕਰੋ: kubectl apply -f qwen-vllm.yaml

ਸਟੈਪ 4: API ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ

"Running" ਸਟੇਟਸ 'ਤੇ ਭਰੋਸਾ ਨਾ ਕਰੋ। ਇੱਕ pod "Running" ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ ਜਦੋਂ ਉਹ ਅਜੇ ਵੀ ਵੱਡੀਆਂ ਮਾਡਲ ਫਾਈਲਾਂ ਡਾਊਨਲੋਡ ਕਰ ਰਿਹਾ ਹੁੰਦਾ ਹੈ। ਆਪਣੇ ਲੌਗਸ (logs) 'ਤੇ ਨਜ਼ਰ ਰੱਖੋ: kubectl logs -n llm-demo -f deployment/qwen-vllm

ਉਦੋਂ ਤੱਕ ਉਡੀਕ ਕਰੋ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਸਰਵਰ ਨੂੰ port 8000 'ਤੇ ਲਿਸਨਿੰਗ (listening) ਕਰਦੇ ਨਹੀਂ ਦੇਖਦੇ।

ਇਸਦੀ port-forwarding ਨਾਲ ਜਾਂਚ ਕਰੋ: kubectl port-forward -n llm-demo svc/qwen-vllm 8000:8000

ਆਪਣੀ 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
}'

ਟੀਚਾ:

ਤੁਸੀਂ ਕੱਚੀ (raw) GPU ਸਮਰੱਥਾ ਤੋਂ ਇੱਕ ਕੰਮ ਕਰਦੇ ਹੋਏ API ਤੱਕ ਪਹੁੰਚ ਗਏ ਹੋ। ਤੁਸੀਂ ਸਾਬਤ ਕਰ ਦਿੱਤਾ ਹੈ ਕਿ:

  • Kubernetes GPU ਵਰਕਲੋਡ (workload) ਨੂੰ ਸ਼ਡਿਊਲ ਕਰਦਾ ਹੈ।
  • ਕੰਟੇਨਰ ਹਾਰਡਵੇਅਰ ਤੱਕ ਪਹੁੰਚ ਕਰ ਸਕਦਾ ਹੈ।
  • ਮਾਡਲ ਸਰਵਰ ਵੇਟਸ (weights) ਨੂੰ ਮੈਮੋਰੀ ਵਿੱਚ ਲੋਡ ਕਰਦਾ ਹੈ।
  • API ਸਟੈਂਡਰਡ ਰਿਕੁਐਸਾਂ ਦਾ ਜਵਾਬ ਦਿੰਦੀ ਹੈ।

ਜੇਕਰ ਇਹ ਲੂਪ (loop) ਫੇਲ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਸਕੈਲਿੰਗ ਅਤੇ ਰੂਟਿੰਗ ਤੁਹਾਨੂੰ ਨਹੀਂ ਬਚਾ ਸਕਦੇ। ਪਹਿਲਾਂ ਬੁਨਿਆਦ (foundation) ਨੂੰ ਠੀਕ ਕਰੋ।

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

ਵਿਕਲਪਿਕ ਲਰਨਿੰਗ ਕਮਿਊਨਿਟੀ: https://t.me/GyaanSetuAi