Docker中执行nvidia-smi不显示Processes是否正常?
解答:容器内
nvidia-smi看不到宿主机GPU进程是正常特性 这完全是正常的预期行为,不是你的Docker+GPU环境安装出错了!
为什么会出现这种差异?
nvidia-smi显示的进程列表是基于当前运行环境的PID命名空间的:
- 宿主机上的
nvidia-smi能看到所有在宿主机PID命名空间里的GPU进程(比如你看到的Xorg、gnome-shell、Firefox这些桌面相关进程) - Docker容器默认是PID隔离的,它有自己独立的PID命名空间,容器内的
nvidia-smi只能识别到容器内部启动的GPU进程。宿主机的进程不在容器的命名空间里,所以自然不会显示出来。
额外说明
- 你提到Jupyter Notebook能正常使用GPU,这已经能证明你的Docker+NVIDIA环境配置是完全正常的,进程列表的差异不影响GPU的实际使用
- 容器内
nvidia-smi显示的总内存使用是准确的(包含宿主机和容器自身的GPU内存占用),只是看不到具体的宿主机进程条目 - 如果确实需要在容器内查看宿主机的GPU进程,有两种可选方式,但一般不推荐(会打破容器隔离性):
- 启动容器时添加
--pid=host参数,共享宿主机的PID命名空间,这样容器内的nvidia-smi就能看到所有宿主机进程了 - 通过查看容器内的
/proc/driver/nvidia/gpus/<GPU-ID>/information文件,获取GPU的整体使用统计,但依然看不到具体进程
- 启动容器时添加
内容的提问来源于stack exchange,提问作者Ina_Ta
相关产品推荐
相关产品推荐

