Kubernetes 部署 RAG 服务如何配置 GPU 资源限制

文章导读
在 Kubernetes 部署 RAG 服务时,通过在 Pod 规格的 resources 字段设置 nvidia.com/gpu 请求与限制值来配置 GPU 资源。该方案适合基于 NVIDIA 显卡的推理场景,风险边界在于若未安装 Device Plugin 或请求值超过节点物理容量,Pod 将处于 Pending 状态。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 常见问题
  7. G 参考来源
A A

在 Kubernetes 部署 RAG 服务时,通过在 Pod 规格的 resources 字段设置 nvidia.com/gpu 请求与限制值来配置 GPU 资源。该方案适合基于 NVIDIA 显卡的推理场景,风险边界在于若未安装 Device Plugin 或请求值超过节点物理容量,Pod 将处于 Pending 状态。

先说结论:配置 GPU 资源限制必须依赖 NVIDIA Device Plugin 且 requests 与 limits 值需保持一致。

  • 适合:需要独占显卡或明确隔离显存资源的 RAG 推理服务。
  • 先准备:确认集群节点已安装 NVIDIA 驱动及 Kubernetes Device Plugin。
  • 验收:Pod 状态为 Running 且容器内 nvidia-smi 能识别到指定数量的 GPU。

命令速用版

以下命令用于检查节点 GPU 状态及 Pod 资源配置:

kubectl describe node <node-name> | grep -A 5 Capacity
kubectl describe pod <pod-name> | grep -A 5 limits

为什么会这样

Kubernetes 将 GPU 视为扩展资源,默认不支持超分且请求值必须等于限制值。

GPU 属于硬件独占资源,Kubernetes 调度器原生不支持像 CPU 那样的时间片轮转,除非启用 MIG 或时间片切片插件。RAG 服务通常涉及大模型加载,显存占用固定,若限制配置过小会导致模型加载失败,配置过大则造成资源浪费。

分步处理

步骤 1:确认插件状态

Kubernetes 部署 RAG 服务如何配置 GPU 资源限制

检查 kube-system 命名空间下是否存在 NVIDIA Device Plugin 守护进程集。

kubectl get pods -n kube-system | grep nvidia-device-plugin

步骤 2:编写资源配置

在 Deployment 或 Pod YAML 的 spec.containers.resources 字段添加 GPU 限制。

resources:
  limits:
    nvidia.com/gpu: 1
  requests:
    nvidia.com/gpu: 1

步骤 3:应用并观察

应用配置后观察 Pod 调度状态,若长期 Pending 需检查节点 GPU 容量。

Kubernetes 部署 RAG 服务如何配置 GPU 资源限制

怎么验证是否生效

进入容器内部执行 nvidia-smi 命令,确认可见 GPU 数量与配置一致。

kubectl exec -it <pod-name> -- nvidia-smi

查看容器监控指标,确认显存使用率未触及限制导致 OOM。

常见坑

  • 请求与限制不一致:Kubernetes 要求 GPU 的 requests 必须等于 limits,否则 Pod 无法创建。
  • 忽略显存限制:nvidia.com/gpu 仅控制显卡数量,不直接限制显存大小,需配合模型量化或 MIG 使用。
  • 驱动版本不匹配:节点驱动版本过低可能导致 Device Plugin 无法上报资源。

常见问题

如何限制单个 Pod 的显存使用量?

原生 Kubernetes 不支持直接限制显存大小,需使用 NVIDIA MIG 技术或第三方配额插件。

GPU 资源限制配置后 Pod 为什么 Pending?

通常因为集群内没有节点满足 GPU 数量请求,或 Device Plugin 未正常运行。

RAG 服务需要配置 CPU 限制吗?

需要,数据预处理和推理后处理依赖 CPU,过低会导致 GPU 等待。

参考来源

  • Kubernetes Documentation, "Using GPUs", https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/
  • NVIDIA Kubernetes Device Plugin, "README", https://github.com/NVIDIA/k8s-device-plugin