我在需要 CUDA 10 的 docker 容器中部署应用程序。这是运行应用程序使用的一些底层 pytorch 功能所必需的。
但是,主机服务器正在运行 docker ce 17、Nvidia-docker v 1.0 和 CUDA 版本 9,我将无法升级主机。
我的印象是我被主机上可用的 v1 nvidia docker runtime 和 CUDA 版本束缚住了。
有没有办法在容器上运行 CUDA 10,以便我可以利用这个工具包的功能?
我在需要 CUDA 10 的 docker 容器中部署应用程序。这是运行应用程序使用的一些底层 pytorch 功能所必需的。
但是,主机服务器正在运行 docker ce 17、Nvidia-docker v 1.0 和 CUDA 版本 9,我将无法升级主机。
我的印象是我被主机上可用的 v1 nvidia docker runtime 和 CUDA 版本束缚住了。
有没有办法在容器上运行 CUDA 10,以便我可以利用这个工具包的功能?
在一般情况下,任何特定的 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 或更高版本的驱动程序。