在具有不同 CUDA SDK 版本的同一服务器上的虚拟机上使用 NVIDIA K20 卡

Use NVIDIA K20 cards on virtual machines on the same server with different CUDA SDK versions

我在带有 4 个 Nvidia K20m 卡的双处理器 Debian Wheezy 服务器上工作。我实际上使用带有 304.54 驱动程序和 GCC 4.6.3 的 CUDA 5,但我想更新到 Debian Jessie (GCC 4.9) 和 CUDA 7.5。我已经评估了 CUDA 7.5,它给出了与 CUDA 5 不同的结果,因为 NVCC 使用了指令(例如:FMA 指令未在相同的地方使用,请参阅 )。

主要目标是在此服务器上获得两个不同的 CUDA 版本,以保持与旧计算的兼容性并为未来的 CUDA 新功能做好准备。

我觉得有两种可能:

您如何看待这些可能性?你有什么想法吗?

非常感谢。

我无法对虚拟化建议发表评论,但是,运行安装最新版本的驱动程序(在撰写本文时为 CUDA 7.5)并使用较旧的工具包没有问题。

每个 CUDA 工具包版本及其组件都是完全版本化的,因此您不能将 CUDA 运行time 和来自不同工具包版本的其他库(cuFFT、CUBLAS 等)或您自己的代码与这些库混合使用。但是,驱动程序和它们公开的驱动程序 API 向后 兼容。因此,您可以毫无困难地将 CUDA 7.5 驱动程序和驱动程序 API 与 CUDA 5 或 CUDA 7.5 运行 一起使用。但是,您不能 运行 较新的 运行 旧驱动程序。这将产生 运行 时间错误。我发现 modules 实用程序对于在 toolkit/runtime 版本之间进行开发和测试选择非常有用。我目前的开发箱安装了 4.2 和 7.5 之间的每个版本,带有 7.5 驱动程序。

另请注意,较旧的工具链需要较旧的主机编译器和支持库。因此,如果您转向更现代的发行版,您仍然需要设计一种方法来为您要使用的旧工具包安装受支持的 gcc(请参阅工具包的发行说明和 this question 了解更多详细信息) .许多发行版都有内置的系统来管理多个编译器版本,但是我 运行 debian 已经很多年了,所以我不确定 debian 替代编译器版本选择的具体细节。

试图在虚拟化方面补充 talonmies 的答案。在同一张卡上可以有两个操作系统实例和两个不同的驱动程序版本 and/or CUDA 版本。但是,据我所知,只有 PCI 直通才有可能,因此一次一个实例。使用此配置,VM guest 完全控制 PCI 设备,Hypervisor 不需要特定的驱动程序。

同时使用来自两个不同实例的同一设备需要一些管理程序级别的驱动程序组件(请参阅 NVIDIA GRID),对此我不知道 CUDA 的当前支持级别(如果有的话)。