详解 GPU 节点池隔离、NVIDIA 设备插件、多卡并行调度、vLLM/TensorRT-LLM/TGI 推理引擎选型与弹性伸缩策略。
在生产环境运行大语言模型远不止需要一块 GPU。Kubernetes 已成为需要控制推理延迟、数据主权和模型版本管理团队的默认编排层。在集群上部署 LLM 会引入标准微服务很少面临的挑战:多 GPU 调度、超大容器镜像、上下文长度感知的自动扩缩容,以及昂贵的空闲节点。
首先将 GPU 工作负载隔离。为专用节点池创建污点,使只有推理 Pod 调度到昂贵的 GPU 实例上。安装 NVIDIA Device Plugin 和 GPU Feature Discovery,将硬件拓扑暴露给调度器。对于需要跨多个 GPU 进行张量并行化的模型,需要拓扑感知调度或 Kubernetes Topology Aware Routing beta 版本。选择配备 NVLink 或高带宽互连的实例类型,以最小化 GPU 之间通信开销。
手写推理服务器几乎不值得投入精力。生产团队通常选择 vLLM(因其 PagedAttention 高吞吐)、TensorRT-LLM(追求最高 NVIDIA 性能)或 HuggingFace Text Generation Inference(更简单的集成方式)。大多数运行时现在都在已知端口上暴露 OpenAI 兼容的 HTTP 服务器。
以下 Deployment 跨两块 GPU 运行 vLLM 并行推理。它挂载一个 PersistentVolumeClaim 来保存缓存的模型权重,这样 Pod 重启时无需重新下载。
apiVersion: apps/v1
kind: Deployment
metadata:
name: vllm-llama
spec:
replicas: 1
selector:
matchLabels:
app: vllm-llama
template:
metadata:
labels:
app: vllm-llama
spec:
nodeSelector:
cloud.google.com/gke-accelerator: nvidia-l4
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
containers:
- name: vllm
image: vllm/vllm-openai:latest
args:
- "--model"
- "meta-llama/Llama-3.3-70B-Instruct"
- "--tensor-parallel-size"
- "2"
- "--port"
- "8000"
ports:
- containerPort: 8000
resources:
limits:
nvidia.com/gpu: 2
volumeMounts:
- name: model-cache
mountPath: /models
volumes:
- name: model-cache
persistentVolumeClaim:
claimName: model-pvc
推理运行时的容器镜像已经很大,但真正的问题在于模型权重。一个 70B 参数的 BF16 模型可能占用超过 140 GB。每次 Pod 启动都从对象存储拉取会引入数分钟的延迟。有两种模式可选:第一种是由快速网络存储支撑的 ReadWriteMany PVC,每个副本都可挂载;第二种是 init container 将权重从 S3 复制到由本地 NVMe 支撑的 emptyDir 卷。对于多节点集群,考虑使用 Dragonfly 等集群级缓存层或只读 NFS 导出,以避免重复下载。
基于 CPU 的标准 Horizontal Pod Autoscaler 对 LLM 推理毫无用处。需要自定义指标,如请求队列深度、首个 token 耗时或 GPU 显存利用率。KEDA 支持基于 Prometheus 查询或消息队列积压来扩缩 Deployment。要慎用缩容到零。它虽然省钱,但 GPU 节点上的冷启动可能超过三十秒,因为运行时需要将权重加载到 VRAM。如果延迟预算紧张,就必须保持最小数量的热副本,这意味着要为空闲 GPU 付费。
使用 NVIDIA DCGM Exporter 导出硬件指标。在 Pod 级别追踪 GPU 利用率、显存带宽和功耗。结合 Kubecost 或 OpenCost 将基础设施成本归属到特定团队或模型。服务级指标同样重要。测量首个 token 耗时和 token 间延迟,因为高吞吐不等于良好的用户体验。要立即对 OOMKilled 的 Pod 发出告警;它们通常意味着上下文长度超出了可用 VRAM。
自托管能完全控制技术栈,但运维成本很高。你需要自己负责驱动兼容性、CUDA 升级、运行时 bug 和容量规划。对于需要广泛模型目录或运行长上下文 Agent 化工作负载的团队,为每个模型变体维护专用 GPU 集群在经济上效率很低。
Oxlo.ai 提供了一个务实的替代方案。这是一个面向开发者的推理平台,采用扁平化按请求计价,费用不随 prompt 长度增长。这使得 Oxlo.ai 对于长上下文和 Agent 化工作负载比按 token 收费的提供商便宜得多。该平台托管了 45+ 开源和专有模型,包括 Llama 3.3 70B、DeepSeek R1 671B MoE 和 Qwen 3 32B,完全兼容 OpenAI SDK。热门模型没有冷启动问题,API 基础 URL 是 https://api.oxlo.ai/v1。
一种常见的混合模式是将 Kubernetes 集群保留给微调模型或敏感数据工作负载,而将通用聊天、编程、视觉或溢出流量路由到 Oxlo.ai。由于 Oxlo.ai 是无缝替代品,只需在现有 OpenAI 客户端中修改一处配置即可切换端点。详细定价见 https://oxlo.ai/pricing。
Kubernetes 仍然是规模化 LLM 推理的强大平台。配合正确的节点池、Serving 运行时和自动扩缩容策略,你可以在自有基础设施内提供低延迟预测。只要记住,拥有技术栈并非没有代价。评估结合自托管 Kubernetes 与 Oxlo.ai 等托管 API 的混合策略,以在控制权、成本和模型多样性之间取得平衡。