在 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 能够响应标准请求。

如果这个闭环失败了,那么扩缩容和路由都无法救你。请先修复基础架构。

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

Optional learning community: https://t.me/GyaanSetuAi