为什么nvidia-smi在docker容器内外显示相同的CUDA版本和驱动程序版本?



我安装了nvidia-docker,为了测试我的安装,我运行了docker run --rm --gpus all nvidia/cuda:10.0-base nvidia-smi。我得到这个

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.57.02    Driver Version: 470.57.02    CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Quadro T2000 wi...  On   | 00000000:01:00.0  On |                  N/A |
| N/A   46C    P0    10W /  N/A |   2294MiB /  3911MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

驱动程序版本和CUDA版本与我在常规终端的容器外运行nvidia-smi时得到的完全相同。我对驱动程序版本相同的理解是,设备驱动程序是特定于硬件的,因此不安装在容器内,nvidia-docker存在的原因是允许在容器内运行的软件与设备驱动程序通信。这是正确的吗?

我的主要困惑点是为什么从容器内部报告CUDA版本为11.4。当我在这个容器内启动一个bash终端并查看/usr/local中的CUDA安装时,我只看到10.0版本,那么为什么容器内的nvidia-smi给我安装在主机系统上的CUDA版本?

我相信这些问题显示了对nvidia-smi如何工作或nvidia-docker如何工作的根本误解,所以有人可以为我指出可能帮助我解决这个误解的资源吗?

在此设置中不能有多个GPU驱动程序运行。时期。该驱动程序安装在基本机器中。如果您执行了一些不推荐的操作,比如在容器中安装它或尝试将它安装在容器中,那么它仍然是基础机器中对基础机器和容器都有效的那个。注意nvidia-smi报告的任何都只属于GPU驱动程序,因此使用安装在基本机器中的驱动程序,无论您是在容器内部还是外部运行它。可能会有详细的差异报告,比如可见的gpu,但这不会影响报告的版本。

CUDA运行时版本将是安装在容器中的版本。时期。它没有能力检查容器外的东西。如果它恰好与您在容器外部看到的内容相匹配,那么很简单,您在容器外部和内部都有相同的配置。

可能你的大部分困惑都可以用这个答案解决,也许你的问题是那个问题的重复。