K8s集群GPU时间切片配置与避坑:让多Pod共享一块显卡

在 Kubernetes 集群里,如果一台服务器只装了一块 GPU,默认情况下同一时刻只能有一个 Pod 占用它,其余 Pod 会一直处于 Pending。
GPU 时间切片(Time-Slicing)要解决的问题就是:让多个 Pod 轮流使用同一块物理 GPU,从而提高单卡利用率。
它适合开发测试、小模型推理、教学环境等对显存隔离要求不高的场景;
如果你需要严格的故障隔离或显存硬隔离,应优先考虑 MIG 而不是时间切片。

下面按准备、配置、验证和排错的顺序讲清楚,命令和路径都可以直接照着改。

动手前需要确认的前提

时间切片依赖 NVIDIA 官方组件,先把环境核对清楚,能省掉后面大量排错时间。

  • 服务器已安装 NVIDIA 驱动,执行 nvidia-smi 能看到显卡型号和驱动版本。
  • 集群已部署 NVIDIA GPU Operator,或者已手动安装 nvidia-device-plugin。
  • 节点能被集群正常调度,kubectl get nodes 状态为 Ready。
  • GPU 节点最好打上标签,例如 kubectl label node 节点名 gpu=on,方便后续用 nodeSelector 指定。

需要提醒的是:时间切片只做时间维度的轮流调度,不隔离显存。
一个 Pod 占满显存,其他 Pod 依然会失败。
所以生产环境要配合显存限额、请求队列和监控使用。

配置时间切片的核心步骤

时间切片通过修改设备插件配置实现,常见做法是给 GPU Operator 的 device-plugin 传入一个 ConfigMap。

第一步,创建或修改配置文件。
下面这段 YAML 里,replicas 表示每块物理 GPU 被拆成几个逻辑 GPU,这里设为 4:

apiVersion: v1
kind: ConfigMap
metadata:
  name: time-slicing-config
  namespace: nvidia-device-plugin
data:
  any: |-
    version: v1
    flags:
      migStrategy: none
    sharing:
      timeSlicing:
        resources:
          - name: nvidia.com/gpu
            replicas: 4

把文件保存为 time-slicing-config.yaml,然后执行:

kubectl apply -f time-slicing-config.yaml

第二步,让设备插件读取这份配置。
如果使用 GPU Operator,可以通过修改 ClusterPolicy 指定配置名:

kubectl edit clusterpolicy -n gpu-operator

找到 devicePlugin.config.name 字段,
填入 time-slicing-config,
保存后 Operator 会重建 device-plugin 的 Pod。

第三步,等待设备插件重启完成:

kubectl get pods -n nvidia-device-plugin -w

当 Pod 状态恢复为 Running,说明新配置已生效。

如果你的集群是手动部署的 nvidia-device-plugin,则把上面的配置写入它的 DaemonSet 挂载 ConfigMap 中,并重启 DaemonSet。

用 Pod 验证切片是否生效

先查看节点可分配的 GPU 数量,正常情况下会从 1 变成 4:

kubectl describe node 节点名 | grep nvidia.com/gpu

然后创建一个申请 GPU 的测试 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: gpu-slice-test
spec:
  restartPolicy: Never
  containers:
    - name: cuda
      image: nvidia/cuda:12.0.0-base-ubuntu22.04
      command: ["nvidia-smi"]
      resources:
        limits:
          nvidia.com/gpu: 1

应用后查看日志:

kubectl apply -f gpu-slice-test.yaml
kubectl logs gpu-slice-test

能打印出 GPU 信息,说明这个 Pod 成功拿到了一片逻辑 GPU。
再同时启动多个同样的 Pod,如果都能 Running,就说明时间切片在正常工作。

容易踩的坑和对应排查

  • Pod 一直 Pending,提示 insufficient nvidia.com/gpu:先确认 kubectl describe node 里 GPU 数量是否已变成配置的份数;没有变化通常是 device-plugin 没读到新 ConfigMap。
  • 修改配置后没生效:device-plugin 的 Pod 需要重启,检查 kubectl get pods -n nvidia-device-plugin 是否出现了新副本。
  • 多个 Pod 报显存不足:这是时间切片的固有限制,不是配置错误。请降低并发数、限制 batch size,或改用 MIG。
  • 驱动和 CUDA 版本不匹配:确认容器镜像里的 CUDA 版本不高于宿主机驱动支持的上限,否则 nvidia-smi 会报错。

另外,改动 device-plugin 会影响节点上所有 GPU 工作负载,建议在维护窗口操作,并提前备份 ClusterPolicy 和 ConfigMap 的旧内容,方便回滚。

什么时候该用、什么时候不该用

时间切片的好处是配置简单、改造成本低,适合单卡多用户共享、模型调参、CI 中的 GPU 任务等场景。
它的边界也很明确:不提供显存隔离和故障隔离,一个 Pod 崩溃或占满显存会影响同卡其他任务。
如果业务对稳定性和资源隔离要求高,MIG 或直接多卡分配会更稳妥。

常见疑问

时间切片能提高单卡总吞吐吗?
它主要提升利用率,让 GPU 不那么空闲。
多个任务并发时,单任务延迟可能上升,吞吐是否提升取决于任务类型。

改成时间切片后需要重启节点吗?
通常不需要,重启 device-plugin 即可;
但驱动升级或 Operator 大版本变更时,节点重启更保险。

切片份数设多少合适?
常用值是 2 到 8。
份数越多,单任务可用算力越少,建议结合实际负载逐步调整,不要一次设得过大。

如果按本文步骤配置后仍无法调度,优先回看设备插件日志和节点可分配资源,再决定是调整切片参数还是切换到 MIG。

分享到:
上一篇
K8s集群GPU拓扑感知调度:从部署到验证的完整配置教程
下一篇
K8s集群GPU与vGPU配置:从设备插件到虚拟化切分
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意