在具有不同 CUDA SDK 版本的同一服务器上的虚拟机上使用 NVIDIA K20 卡
Posted
技术标签:
【中文标题】在具有不同 CUDA SDK 版本的同一服务器上的虚拟机上使用 NVIDIA K20 卡【英文标题】:Use NVIDIA K20 cards on virtual machines on the same server with different CUDA SDK versions 【发布时间】:2016-07-19 16:39:02 【问题描述】:我在带有 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 指令不在同一个地方使用,请参阅post)。
主要目标是在此服务器上获得两个不同的 CUDA 版本,以保持与旧计算的兼容性并为未来使用 CUDA 新功能做好准备。
我认为有两种可能:
VMWare ESXI 或 Citrix XenServer 虚拟机管理程序允许创建两个以直通模式连接到 K20 卡的虚拟机(Wheezy/SDK 5 和 Jessie/SDK 7.5)。我无法在它们的兼容硬件列表中查看这些视频卡,但一个 NVidia 驱动程序发行说明说它们是通过的(320.78 release notes 在第 11 页)。我必须在管理程序级别安装哪个驱动程序? 安装最新的 nvidia 驱动并使用两个 NVidia docker containers 与不同的 Cuda SDK 和 Debian 版本。是否可以使用最新的驱动程序运行 SDK 5?您如何看待这些可能性?你有什么想法吗?
非常感谢。
【问题讨论】:
【参考方案1】:我无法评论虚拟化建议,但是,运行最新版本的驱动程序(在撰写本文时为 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替代编译器版本选择的具体细节。
【讨论】:
感谢您澄清驱动程序/工具包版本的使用。在服务器上,我安装了最新的驱动程序,并在 Jessie 上使用 SDK 7.5 创建了一个 Docker 映像,它可以正常工作!现在我在 Wheezy 上使用 SDK 5 做同样的事情,以实现向后兼容性。我尝试使用 Docker,因为我想在不使用 GCC 版本的情况下获得隔离环境。最后,如果它不起作用,我将使用模块实用程序。【参考方案2】:尝试在虚拟化方面补充 talonmies 答案。在同一张卡上可以有两个操作系统实例,它们具有两个不同的驱动程序版本和/或 CUDA 版本。但是,据我所知,只有 PCI 直通才有可能,因此一次只有一个实例。通过这种配置,VM guest 可以完全控制 PCI 设备,并且 Hypervisor 不需要特定的驱动程序。
同时使用来自两个不同实例的同一设备需要一些 Hypervisor 级别的驱动程序组件(请参阅 NVIDIA GRID),对此我不知道 CUDA 的当前支持级别(如果有的话)。
【讨论】:
以上是关于在具有不同 CUDA SDK 版本的同一服务器上的虚拟机上使用 NVIDIA K20 卡的主要内容,如果未能解决你的问题,请参考以下文章
具有多个cuda版本的系统上的tensorflow-gpu安装问题
同一应用中不同版本的 Facebook iOS SDK 和 Audience Network iOS SDK