当主机拥有CUDA 9时,我能否运行具有CUDA 10的Docker容器?

7
我正在部署一个需要 CUDA 10 的应用程序,它需要运行一些底层的 PyTorch 功能。 然而,托管服务器正在运行 Docker CE 17、Nvidia-docker V1.0 和 CUDA 9 版本,我无法升级主机。 我的理解是我只能使用主机上可用的 NVIDIA Docker 运行时和 CUDA 版本。 有没有办法在容器上运行 CUDA 10,以便利用这个工具包的功能?

2
这在很大程度上取决于具体的配置,特别是主机加载了哪个驱动程序,以及主机中的GPU是否为Tesla GPU。在某些情况下,依赖CUDA 10的docker容器可以在CUDA 9主机上运行,但需要一些特定的步骤。所有要求都在此文档中详细说明:https://docs.nvidia.com/deploy/cuda-compatibility/index.html。 - Robert Crovella
不错,之前没有遇到过这些要求。那么,如果主机没有特斯拉 GPU,而是使用 Quadros 呢?我仍然不清楚需要执行哪些安装步骤来进行 dockerfile 和/或 compose. ..? - JLuxton
此外,虽然它没有直接回答你的问题,但是这个帖子提供了一些关于兼容性库使用和容器的可能有用的信息。但是请注意,兼容性库不适用于Quadro GPU,这是可以保证的。 - Robert Crovella
GPU驱动程序所需的关系(例如安装在基础机器上的内容)和支持的CUDA版本(例如您可以或希望在容器中使用的CUDA版本)在表1 此处 中有所表述。由于您的基础机器中有Quadro GPU,因此无法使用兼容性库机制,如果基础机器上安装了“更新”的驱动程序(如410.48或更高版本),则您唯一的希望是运行CUDA 10.0容器。 - Robert Crovella
如果您的基础机器使用的是396.xx或更低版本的驱动程序,并且该机器包含Quadro GPU,则无法运行CUDA 10.0(或更高版本)容器。 - Robert Crovella
显示剩余2条评论
1个回答

11
在一般情况下,任何特定的CUDA版本都需要一个最低的GPU驱动程序版本。这些信息可以在这里这里(表格1)等地方找到。因此,要使用CUDA 9.0,您需要至少具备支持CUDA 9.0的GPU驱动程序版本,例如R384驱动程序。要使用CUDA 10.0,您需要至少具备支持CUDA 10.0的GPU驱动程序版本,例如R410驱动程序。
容器的使用并不会从根本上改变这一点。如果您想使用包含CUDA 10代码的容器,则您的基本机器需要具备支持CUDA 10的驱动程序。
NVIDIA开始发布兼容性库,以允许修改上述语句。这些兼容性库可用,但不会默认安装在CUDA工具包中。这些兼容性库仅在某些情况下起作用,并且有一定的可用要求。这些兼容性库的文档在这里
这些兼容性库的具体要求之一是使用的GPU必须是Tesla品牌的GPU。不支持使用GeForce、Quadro、Jetson和Titan系列的GPU。
此外,这些库只能与基础机器上安装的某些CUDA工具包版本和GPU驱动程序版本的组合配合使用。这个“兼容性矩阵”在这里(表3)有记录。只有特定的CUDA工具包版本与已安装的驱动程序版本的组合才可用于兼容性。举个例子,如果您想使用CUDA 10.0,并且您的基础机器上安装了一个带有R396驱动程序的Tesla GPU,则没有兼容性支持。然而,在相同的设置中,如果您想使用CUDA 10.1,则有兼容性支持。
如果您已满足兼容性使用的要求,则剩下的步骤是安装兼容性库(或从已安装兼容性库的基础容器构建您的容器)。
对于包管理器CUDA安装方法,安装兼容性库的方法很简单(以在Ubuntu上安装CUDA 10.1兼容性以匹配CUDA 10.1工具包安装为例)。
sudo apt-get install cuda-compat-10.1

请确保将版本与您使用的CUDA工具包版本匹配(使用包管理器方法安装或已在容器中安装)。
此兼容性“路径”仅始于CUDA 9.0时间范围内。配备CUDA 9.0之前驱动程序的系统将无法以任何方式用于此兼容性路径。还有各种功能限制和限制,这些限制在文档中介绍。
当正确安装并使用此“兼容性路径”时,整个系统配置可以“看起来”违反了本答案顶部指示的规则。例如,CUDA 10.1应用程序可能正在运行仅安装了R396驱动程序的机器上。
针对此问题,OP最终指出基础机器具有Quadro GPU,因此此“兼容性路径”不适用,例如,运行CUDA 10.0容器的唯一方法是在基础机器上安装CUDA 10.0兼容的驱动程序,例如R410或更高版本驱动程序。

主机使用的是CUDA 10和R430,但我想运行一个带有CUDA 9代码的容器怎么办?不知何故,它给了我“无法初始化NVML:驱动程序/库版本不匹配”的错误信息。 - Raven Cheuk
因此,“Failed to initialize NVML: Driver/library version mismatch”意味着我在容器内安装了驱动程序?由于我很久以前创建了这个容器,所以忘记了当时的操作...但是我提到的CUDA 10和R430都在主机上,而不是容器内。 - Raven Cheuk
有没有办法让这个容器再次工作?比如从容器中移除驱动程序? - Raven Cheuk
请提出新的问题,我无法在评论中解决它。 - Robert Crovella
感谢您的及时回复。这是我的问题链接: https://stackoverflow.com/questions/63079329/old-docker-containers-are-not-usable-no-gpu-after-updating-the-gpu-driver-in-t - Raven Cheuk
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接