不进入容器, 怎么知道docker 容器挂了哪些卡-NVIDIA

223 阅读1分钟

背景

最近在做容器的gpu监控, 涉及到需要知道容器内gpu发现的问题

需求

支持docker run 启动时的gpu发现 支持k8s 起的容器 gpu 发现

分析

k8s runtime 如果是docker , 那启动的容器也是在docker 里, 所以,只需要知道 docker 的 挂载 nvida 卡的方式, 就能知道容器使用了哪些gpu

原理

Nvidia 提供了 工具 nvidia-container-toolkit , 内部提供了 nvidia-container-runtime, 提供了两种方法挂载 gpu

  • 环境变量方法
docker run --rm --runtime=nvidia \
  -e NVIDIA_VISIBLE_DEVICES=all nvidia/cuda nvidia-smi
  • --gpus 使用的方式是 在容器启动前将设备挂进去
  docker run --rm --gpus all nvidia/cuda nvidia-smi

发现

环境变量方式

通过docker inspec 容器, 查看 env

image.png

--gpus 方式

通过 docker inspect 容器, 查看 deviceRequests image.png