Kubernetes-இல் உங்கள் முதல் LLM API
Kubernetes-இல் ஒரு LLM-ஐ இயக்குவது ஒரு சாதாரண இணையச் செயலியை (web app) இயக்குவதிலிருந்து மாறுபட்டது. நீங்கள் கோரிக்கைகளின் (requests) அடிப்படையில் மட்டும் அளவை (scale) அதிகரிக்க முடியாது. நீங்கள் GPU திறன் மற்றும் மாடல் எடைகளின் (model weights) அடிப்படையில் அளவை அதிகரிக்க வேண்டும்.
இந்த வழிகாட்டியில், நீங்கள் ஒரு மாடலை GPU நோடிற்கு (node) வரிசைப்படுத்தி (deploy), அதை ஒரு API-ஆக வெளிப்படுத்தி, ஒரு curl கோரிக்கையின் மூலம் அதை அழைப்பீர்கள்.
நாங்கள் இந்தத் கருவிகளைப் பயன்படுத்துகிறோம்:
- மாடல்: Qwen/Qwen2.5-1.5B-Instruct
- இன்ஜின்: vLLM
- உள்கட்டமைப்பு: NVIDIA GPU ஆதரவுடன் கூடிய Kubernetes
படி 1: உங்கள் GPU திறனைச் சரிபார்க்கவும்
நீங்கள் தொடங்குவதற்கு முன், Kubernetes உங்கள் வன்பொருளை (hardware) அடையாளம் காண்பதை உறுதிப்படுத்திக் கொள்ளுங்கள். இந்த கட்டளையை இயக்கவும்:
kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu
GPU நெடுவரிசை (column) காலியாக இருந்தால், நிறுத்திவிடவும். முதலில் உங்கள் NVIDIA device plugin-ஐ சரிசெய்ய வேண்டும்.
படி 2: உங்கள் மாடல் அணுகலைப் பாதுகாக்கவும்
பொதுவான மாடல்களுக்குக் கூட, ஒரு Hugging Face token-ஐப் பயன்படுத்தவும். இது பிற்காலத்தில் தனிப்பட்ட (private) மாடல்களுக்கு மாறுவதை எளிதாக்கும்.
- ஒரு namespace-ஐ உருவாக்கவும்:
kubectl create namespace llm-demo - உங்கள் token-க்கான Secret-ஐ உருவாக்கவும்:
kubectl create secret generic hf-token -n llm-demo --from-literal=HF_TOKEN="your_token_here"
படி 3: மாடல் சர்வரை வரிசைப்படுத்தவும் (Deploy)
vLLM கடினமான பணிகளைக் கையாளுவதால் நாங்கள் இதைப் பயன்படுத்துகிறோம். இது batching, tokenization மற்றும் OpenAI-க்கு இணக்கமான API ஆகியவற்றை நிர்வகிக்கிறது.
கீழ்க்கண்ட முக்கியத் தேவைகளுடன் ஒரு deployment கோப்பை உருவாக்கவும்:
- 1 GPU-ஐக் கோரவும்:
nvidia.com/gpu: 1 - /dev/shm-ஐ மவுண்ட் (Mount) செய்யவும்: மாடல் சர்வர்கள் செயலிழப்பதைத் (crashes) தவிர்க்கப் பகிரப்பட்ட நினைவகம் (shared memory) தேவைப்படுகின்றன.
- Secrets-ஐப் பயன்படுத்தவும்: உங்கள் HF_TOKEN-ஐ கன்டெய்னருக்கு (container) அனுப்பவும்.
உங்கள் உள்ளமைவை (configuration) செயல்படுத்தவும்:
kubectl apply -f qwen-vllm.yaml
படி 4: API-ஐச் சரிபார்க்கவும்
"Running" நிலையை மட்டும் நம்பிவிடாதீர்கள். ஒரு pod மிகப்பெரிய மாடல் கோப்புகளைப் பதிவிறக்கம் செய்துகொண்டிருக்கும் போதும் "Running" நிலையில் இருக்கலாம். உங்கள் லாக்ஸ்களைக் (logs) கவனியுங்கள்:
kubectl logs -n llm-demo -f deployment/qwen-vllm
சர்வர் போர்ட் 8000-இல் இயங்குவதைக் காணும் வரை காத்திருக்கவும்.
போர்ட்-ஃபார்வர்டிங் (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
}'
இலக்கு: நீங்கள் வெறும் GPU திறனில் இருந்து ஒரு செயல்படும் API-க்கு வந்துவிட்டீர்கள். நீங்கள் பின்வருவனவற்றை நிரூபித்துள்ளீர்கள்:
- Kubernetes, GPU பணிச்சுமையை (workload) திட்டமிடுகிறது (schedules).
- கன்டெய்னரால் வன்பொருளை அணுக முடிகிறது.
- மாடல் சர்வர் எடைகளை (weights) நினைவகத்தில் (memory) ஏற்றுகிறது.
- API நிலையான கோரிக்கைகளுக்குப் பதிலளிக்கிறது.
இந்தச் சுழற்சி (loop) தோல்வியடைந்தால், அளவை அதிகரிப்பதோ (scaling) அல்லது ரூட்டிங் (routing) செய்வதோ உங்களைக் காப்பாற்றாது. முதலில் அடித்தளத்தைச் சரிசெய்யுங்கள்.
விருப்பமான கற்றல் சமூகம்: https://t.me/GyaanSetuAi
