Kubernetes GPU节点上运行的CPU Pod如何禁用GPU资源?
问题原因
当GPU节点部署NVIDIA Device Plugin后,只要节点默认容器运行时为nvidia-container-runtime,所有调度到该节点的Pod哪怕未声明nvidia.com/gpu资源,容器内也会默认可见节点全部GPU设备。如果你的Jupyter镜像内置CUDA环境,深度学习框架会优先调用GPU算力,就会出现无GPU声明的Pod占用GPU的情况。
解决方法
方案1:单CPU Pod快速禁用(最简便)
直接在CPU Pod配置中添加环境变量NVIDIA_VISIBLE_DEVICES,值设为空即可,修改后的配置示例如下:apiVersion: v1 kind: Pod metadata: name: jupyter-cpu spec: containers: - name: jupyter image: 你实际使用的Jupyter镜像地址 env: - name: NVIDIA_VISIBLE_DEVICES value: "" resources: limits: cpu: 2 memory: 2000Mi requests: cpu: 2 memory: 2000Mi配置生效后容器内部将看不到任何GPU设备,程序只会使用CPU算力。
方案2:集群全局批量管控
修改NVIDIA Device Plugin的启动参数,添加--device-list-strategy=envvar配置,设置默认仅向显式声明了nvidia.com/gpu资源请求的Pod注入GPU设备信息,无需再为每个CPU Pod单独加环境变量。方案3:运行时层面彻底隔离
在集群中创建两类RuntimeClass:- CPU专用RuntimeClass:使用默认runc运行时,不会挂载任何GPU设备,所有CPU Pod调度时指定该RuntimeClass
- GPU专用RuntimeClass:使用nvidia-container-runtime,仅供给需要使用GPU的Pod使用
该方案可以从底层彻底避免CPU Pod误占GPU的情况。
内容的提问来源于stack exchange,提问作者OH KYOON
相关产品推荐
相关产品推荐

