You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes清单设GPU限制后容器仍可见多GPU问题求助

解决MicroK8s集群中NVIDIA GPU独占分配异常问题

1. 验证NVIDIA设备插件状态与配置

  • 检查设备插件Pod运行状态:
    kubectl get pods -n kube-system | grep nvidia-device-plugin
    
    确保Pod处于Running状态,无重启或错误日志。
  • 确认设备插件是否启用独占设备分配:查看插件启动参数,确保包含--device-strategy=single(部分版本默认开启,需验证)。可通过以下命令查看Pod的启动命令:
    kubectl describe pod <nvidia-device-plugin-pod> -n kube-system | grep Command
    

2. 修复容器运行时的GPU隔离配置

  • 检查nvidia-container-runtime配置文件/etc/nvidia-container-runtime/config.toml,确保no-cgroups设置为false:
    no-cgroups = false
    
    该参数若为true会导致cgroup隔离失效,容器能绕过限制访问所有GPU。修改后重启containerd服务:
    sudo systemctl restart containerd
    
  • 确认RuntimeClass正确关联NVIDIA runtime:查看RuntimeClass定义:
    kubectl get runtimeclass nvidia -o yaml
    
    确保spec.handler为nvidia,且Pod清单中明确指定runtimeClassName: nvidia:
    spec:
      runtimeClassName: nvidia
    

3. 规范Pod资源请求配置

  • 确保Pod的resources.requests和resources.limits同时设置nvidia.com/gpu: 1,仅设置limits会导致调度逻辑异常:
    resources:
      requests:
        nvidia.com/gpu: 1
      limits:
        nvidia.com/gpu: 1
    
  • 验证Pod调度与分配状态:
    kubectl describe pod <pod-name>
    
    检查Events中是否有Successfully assigned记录,以及GPU资源分配的相关日志。

4. 验证容器内GPU隔离效果

  • 进入容器后,先确认NVIDIA_VISIBLE_DEVICES环境变量值为单个GPU(如0或1):
    echo $NVIDIA_VISIBLE_DEVICES
    
  • 执行nvidia-smi -i $NVIDIA_VISIBLE_DEVICES,若仅显示指定GPU则隔离生效;若仍显示所有GPU,说明runtime未正确应用隔离规则,需重新检查runtime配置。
  • 主机端检查容器的cgroup设备限制:找到容器的cgroup路径(可通过docker inspect <container-id>或crictl inspect <container-id>获取),查看/sys/fs/cgroup/nvidia/<cgroup-path>/devices.allow是否仅包含指定GPU的设备号(如c 195:0 rwm对应GPU 0)。

5. 强制DeepStream绑定指定GPU

  • DeepStream默认可能遍历所有可见GPU,需在配置或启动命令中指定GPU ID:
    • 修改DeepStream配置文件(如config_infer_primary.txt),添加或设置:
      gpu-id=0
      
    • 或在启动命令中添加参数:
      deepstream-app --gpu-id=0 -c config_file.txt
      
    容器内的gpu-id=0对应主机端分配的NVIDIA_VISIBLE_DEVICES指定的GPU,确保进程仅使用分配的资源。

6. 重置MicroK8s NVIDIA插件(若配置混乱)

  • 先禁用并清理现有配置:
    microk8s disable nvidia
    sudo apt purge -y nvidia-container-runtime nvidia-container-toolkit
    sudo rm -rf /etc/nvidia-container-runtime/
    
  • 重新安装依赖并启用插件:
    sudo apt install -y nvidia-container-runtime nvidia-container-toolkit
    microk8s enable nvidia
    
  • 等待插件Pod启动完成后,重新部署测试Pod验证效果。

内容的提问来源于stack exchange,提问作者tintin98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:42:45