在 Kubernetes 上部署你的第一个 LLM API
在 Kubernetes 上运行 LLM 与运行标准的 Web 应用不同。你不能仅根据请求量进行扩缩容,还需要根据 GPU 容量和模型权重进行扩缩容。
在本指南中,你将把模型部署到 GPU 节点,将其作为 API 暴露出来,并使用 curl 请求进行调用。
我们使用以下工具:
- 模型:Qwen/Qwen2.5-1.5B-Instruct
- 推理引擎:vLLM
- 基础设施:支持 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 步:确保模型访问安全
即使是使用公开模型,也建议使用 Hugging Face token。这便于日后切换到私有模型。
- 创建命名空间:
kubectl create namespace llm-demo - 为你的 token 创建 Secret:
kubectl create secret generic hf-token -n llm-demo --from-literal=HF_TOKEN="your_token_here"
第 3 步:部署模型服务器
我们使用 vLLM,因为它能处理繁重的任务,包括管理批处理(batching)、分词(tokenization)以及提供兼容 OpenAI 的 API。
创建一个包含以下关键要求的部署文件:
- 请求 1 个 GPU:
nvidia.com/gpu: 1 - 挂载
/dev/shm:模型服务器需要共享内存以避免崩溃。 - 使用 Secret:将你的
HF_TOKEN传递给容器。
应用你的配置:
kubectl apply -f qwen-vllm.yaml
第 4 步:验证 API
不要仅仅相信 "Running" 状态。Pod 在下载巨大的模型文件时也会显示为 "Running"。请观察日志:
kubectl logs -n llm-demo -f deployment/qwen-vllm
等待直到看到服务器正在监听 8000 端口。
使用端口转发进行测试:
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 工作负载。
- 容器可以访问硬件。
- 模型服务器能够将权重加载到内存中。
- API 能够响应标准请求。
如果这个闭环失败了,那么扩缩容和路由都无法救你。请先修复基础架构。
Optional learning community: https://t.me/GyaanSetuAi
