API LLM Pertama Anda pada Kubernetes
Menjalankan LLM pada Kubernetes adalah berbeza daripada menjalankan aplikasi web standard. Anda tidak hanya melakukan penskalaan berdasarkan permintaan. Anda melakukan penskalaan berdasarkan kapasiti GPU dan pemberat model (model weights).
Dalam panduan ini, anda akan mendeploy model ke nod GPU, mendedahkannya sebagai API, dan memanggilnya dengan permintaan curl.
Kami menggunakan alatan ini:
- Model: Qwen/Qwen2.5-1.5B-Instruct
- Engine: vLLM
- Infrastruktur: Kubernetes dengan sokongan GPU NVIDIA
Langkah 1: Semak kapasiti GPU anda
Sebelum anda bermula, pastikan Kubernetes dapat mengesan perkakasan anda. Jalankan arahan ini:
kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu
Jika lajur GPU kosong, berhenti. Anda mesti membaiki plugin peranti NVIDIA anda terlebih dahulu.
Langkah 2: Amankan akses model anda Walaupun untuk model awam, gunakan token Hugging Face. Ini memudahkan anda untuk menukar kepada model peribadi kemudian hari.
- Cipta namespace:
kubectl create namespace llm-demo - Cipta Secret untuk token anda:
kubectl create secret generic hf-token -n llm-demo --from-literal=HF_TOKEN="your_token_here"
Langkah 3: Deploy pelayan model Kami menggunakan vLLM kerana ia mengendalikan tugas-tugas berat. Ia menguruskan batching, tokenization, dan API yang serasi dengan OpenAI.
Cipta fail deployment dengan keperluan utama berikut:
- Minta 1 GPU:
nvidia.com/gpu: 1 - Mount
/dev/shm: Pelayan model memerlukan memori kongsi (shared memory) untuk mengelakkan kegagalan (crash). - Gunakan Secrets: Hantar
HF_TOKENanda ke dalam kontena.
Aplikasikan konfigurasi anda:
kubectl apply -f qwen-vllm.yaml
Langkah 4: Sahkan API
Jangan percaya status "Running". Sesuatu pod dianggap "Running" walaupun ia masih memuat turun fail model yang besar. Perhatikan log anda:
kubectl logs -n llm-demo -f deployment/qwen-vllm
Tunggu sehingga anda melihat pelayan sedang mendengar (listening) pada port 8000.
Uji dengan port-forwarding:
kubectl port-forward -n llm-demo svc/qwen-vllm 8000:8000
Jalankan permintaan curl anda:
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
}'
Matlamatnya: Anda telah beralih daripada kapasiti GPU mentah kepada API yang berfungsi. Anda telah membuktikan bahawa:
- Kubernetes menjadualkan beban kerja GPU.
- Kontena boleh mengakses perkakasan.
- Pelayan model memuatkan pemberat (weights) ke dalam memori.
- API bertindak balas terhadap permintaan standard.
Jika kitaran ini gagal, penskalaan dan penghalaan (routing) tidak akan dapat menyelamatkan anda. Baiki asasnya terlebih dahulu.
Optional learning community: https://t.me/GyaanSetuAi
