当主机有 CUDA 9 时,我可以 运行 带有 CUDA 10 的 Docker 容器吗?

Can I run a Docker container with CUDA 10 when host has CUDA 9?

我在需要 CUDA 10 的 docker 容器中部署应用程序。这对于 运行 应用程序使用的一些底层 pytorch 功能是必需的。

但是,主机服务器是运行ning docker ce 17,Nvidia-docker v 1.0 with CUDA version 9,我将无法升级主机。

我的印象是我被铐在主机上可用的 v1 nvidia docker 运行time 和 CUDA 版本上。

有没有办法在容器上 运行 CUDA 10,以便我可以利用此工具包的功能?

在一般情况下,任何特定的 CUDA 版本都需要最低 GPU 驱动程序版本。 and here (table 1) 等地方对此进行了介绍。因此,要使用 CUDA 9.0,您至少需要一个支持 CUDA 9.0 的 GPU 驱动程序版本,例如 R384 驱动程序。要使用 CUDA 10.0,您至少需要支持 CUDA 10.0 的 GPU 驱动程序版本,例如 R410 驱动程序。

容器的使用并没有从根本上改变这一点。如果您想使用其中包含 CUDA 10 代码的容器,您的基础机器需要支持 CUDA 10 的驱动程序。

NVIDIA 确实开始发布允许修改上述声明的兼容性库。这些兼容性库可用,但默认情况下不会随 CUDA 工具包安装一起安装。这些兼容性库只在某些情况下有效,并且它们有一定的使用要求。兼容性库已记录 here.

使用这些兼容性库的具体要求之一是使用的 GPU 必须是 Tesla-brand 个 GPU。这些兼容性库不支持 GeForce、Quadro、Jetson 和 Titan 系列 GPU。

此外,这些库仅适用于 CUDA 工具包版本的特定组合,以及安装在基础计算机上的 GPU 驱动程序版本。 "compatibility matrix" 记录在案 here (Table 3)。只有 CUDA 工具包版本与已安装驱动程序版本的特定组合可用于兼容性。举一个例子,如果你想使用 CUDA 10.0,并且你的基础机器有一个安装了 R396 驱动程序的 Tesla GPU,则没有兼容性支持。但是,在相同的设置中,如果您想使用 CUDA 10.1,则有兼容性支持。

如果您已经满足兼容性使用要求,那么剩下的步骤就是安装兼容性库(or build your container from a base container that has the compatibility libraries already installed)。

对于包管理器 CUDA 安装方法,安装兼容性库的方法很简单(Ubuntu 上的示例,安装 CUDA 10.1 兼容性以匹配 CUDA 10.1 工具包安装):

sudo apt-get install cuda-compat-10.1

确保版本与您正在使用的 CUDA 工具包版本相匹配(您使用包管理器方法安装的,或者已经安装在您的容器中的)。

这种兼容性 "path" 仅从 CUDA 9.0 时间框架开始。配备早于 CUDA 9.0 的驱动程序的系统将无法以任何方式用于此兼容性路径。还有各种功能限制和约束,在documentation中有介绍。

当此 "compatibility path" 正确安装和使用时,整个系统配置可能 "appear" 违反此答案顶部指示的规则。例如,CUDA 10.1 应用程序可能 运行 在只安装了 R396 驱动程序的机器上运行。

对于此处查看的具体问题,OP 最终表示基础机器具有 Quadro GPU,因此此 "compatibility path" 不适用,唯一的方法是 运行 例如如果在基础机器上安装了支持 CUDA 10.0 的驱动程序,例如 CUDA 10.0 容器R410 或更高版本的驱动程序。