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

时间:2016-03-31 09:45:57

标签: cuda server gpu virtualization

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

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

我认为有两种可能性:

  • VMWare ESXI或Citrix XenServer虚拟机管理程序,允许在通过模式下创建连接到K20卡的两个虚拟机(Wheezy / SDK 5和Jessie / SDK 7.5)。我无法在兼容的硬件列表中查看这些视频卡,但是一个NVidia驱动程序发行说明说它们已通过(第{11页的320.78 release notes)。我必须在虚拟机管理程序级别安装哪个驱动程序?
  • 安装最新的nvidia驱动程序,并使用两个NVidia docker containers与不同的Cuda SDK和Debian版本。是否可以使用最新的驱动程序运行SDK 5?

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

非常感谢你。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

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