API LLM đầu tiên của bạn trên Kubernetes
Chạy một LLM trên Kubernetes khác với việc chạy một ứng dụng web tiêu chuẩn. Bạn không chỉ mở rộng quy mô theo số lượng yêu cầu (requests). Bạn mở rộng quy mô dựa trên dung lượng GPU và trọng số mô hình (model weights).
Trong hướng dẫn này, bạn sẽ triển khai một mô hình lên một node GPU, công khai nó dưới dạng một API và gọi nó bằng một yêu cầu curl.
Chúng ta sử dụng các công cụ sau:
- Model: Qwen/Qwen2.5-1.5B-Instruct
- Engine: vLLM
- Infrastructure: Kubernetes với hỗ trợ NVIDIA GPU
Bước 1: Kiểm tra dung lượng GPU của bạn
Trước khi bắt đầu, hãy đảm bảo Kubernetes nhận diện được phần cứng của bạn. Chạy lệnh này:
kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu
Nếu cột GPU trống, hãy dừng lại. Bạn phải khắc phục NVIDIA device plugin trước.
Bước 2: Bảo mật quyền truy cập mô hình của bạn
Ngay cả đối với các mô hình công khai, hãy sử dụng một Hugging Face token. Điều này giúp việc chuyển sang các mô hình riêng tư sau này trở nên dễ dàng hơn.
- Tạo một namespace:
kubectl create namespace llm-demo - Tạo một Secret cho token của bạn:
kubectl create secret generic hf-token -n llm-demo --from-literal=HF_TOKEN="your_token_here"
Bước 3: Triển khai máy chủ mô hình
Chúng ta sử dụng vLLM vì nó xử lý các tác vụ nặng nề. Nó quản lý việc gom nhóm (batching), mã hóa token (tokenization) và API tương thích với OpenAI.
Tạo một tệp triển khai (deployment file) với các yêu cầu chính sau:
- Yêu cầu 1 GPU:
nvidia.com/gpu: 1 - Mount
/dev/shm: Các máy chủ mô hình cần bộ nhớ dùng chung (shared memory) để tránh bị sập. - Sử dụng Secrets: Truyền
HF_TOKENcủa bạn vào container.
Áp dụng cấu hình của bạn:
kubectl apply -f qwen-vllm.yaml
Bước 4: Xác minh API
Đừng chỉ tin vào trạng thái "Running". Một pod có thể ở trạng thái "Running" ngay cả khi nó vẫn đang tải các tệp mô hình khổng lồ. Hãy theo dõi nhật ký (logs) của bạn:
kubectl logs -n llm-demo -f deployment/qwen-vllm
Đợi cho đến khi bạn thấy máy chủ đang lắng nghe trên cổng 8000.
Kiểm tra bằng cách chuyển tiếp cổng (port-forwarding):
kubectl port-forward -n llm-demo svc/qwen-vllm 8000:8000
Chạy yêu cầu curl của bạn:
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
}'
Mục tiêu:
Bạn đã chuyển từ dung lượng GPU thô sang một API đang hoạt động. Bạn đã chứng minh được rằng:
- Kubernetes lập lịch cho khối lượng công việc GPU.
- Container có thể truy cập vào phần cứng.
- Máy chủ mô hình tải các trọng số vào bộ nhớ.
- API phản hồi các yêu cầu tiêu chuẩn.
Nếu vòng lặp này thất bại, việc mở rộng quy mô và định tuyến sẽ không cứu được bạn. Hãy sửa chữa nền tảng trước.
Optional learning community: https://t.me/GyaanSetuAi
