因此,使用常规docker,我得出结论,两个不同的CUDA版本与以下运行概念不兼容:将本地GPU与CUDA 11一起使用,例如与具有较低OS版本和较低CUDA版本的docker环境一起使用,因为容器必须通过其CUDA接近本地GPU,并且因为它们不兼容,所以整个事情是不可能的。
这正是nvidia-docker2正在解决的问题吗?
假设我的操作系统是ubuntu 20+,CUDA 11+,我需要运行必须与CUDA 8一起运行的代码,CUDA 8只与ubuntu 16兼容,而我在ubuntu 18上有另一个与CUDA 10兼容的代码。
正如我所看到的,如果我错了,nvidia-docker2将使我能够在容器本身上运行nvidia-smi命令,因此容器模拟("认为"(gpu是它的本地,因此我可以用ubuntu 16创建一个容器,用18创建另一个容器,我想要的cudatoolkit和cudnn版本(安装在容器上(?我想也有人写过,这些组件只能在容器中,所以我的计算机上有什么CUDA版本并不重要,我错了吗?
如果是这样的话,另一个问题是,我是否能够使用docker和cuda容器工具包从容器中运行解释器,就像我现在使用docker或PyCharm所做的那样,也就是说,它是否还支持这个功能,以便能够在不同的容器上运行不同的cuda?
还是我错了,并乐观地希望在硬盘上安装不同的UBUNTU版本的情况下,用相同的本地GPU调试具有不兼容cuda版本的不同docer环境是可能的?
还是最后一个建议是唯一可能的(同一台计算机上有几个Ubuntus(?无论如何,这听起来是最自信、最简单的解决方案,但请纠正我的错误。
这正是nvidia-docker2正在解决的问题吗?
主要问题与GPU驱动程序有关。GPU驱动程序具有在内核空间中运行的组件和在用户空间中运行其他组件。这意味着,为了在docker中成功使用,这些组件(用户空间:容器内,内核空间:容器外(必须匹配。
这是NVIDIA容器工具箱/容器运行时的一个关键功能,它增强了docker:使容器内与GPU驱动程序相关的内容与容器外的内容相匹配。
CUDA工具包的其他方面(运行时库、nvcc
等(是独立的,无论您是否使用NVIDIA容器工具包,容器内的代码都需要在容器内显示它使用的任何内容(例如运行时库和nvcc
等(。这些物品的容器外的东西是无关紧要的(当然,除非你是通过从外到内的支架提供的(。
除此之外,CUDA本身在CUDA版本的工具包和驱动程序之间存在依赖关系。简而言之,在普通使用中,容器中的CUDA版本必须是驱动程序可以支持的版本。较新的驱动程序支持较旧的工具包。旧的驱动程序不支持更新的工具包,除非您采取特殊措施。
相关资源:
1 2 3 4 5 6 7
要在设置中具有最大的灵活性,请确保在基本机器中安装了最新的GPU驱动程序。并使用NVIDIA容器工具包"较老的";CUDA工具包/docker容器在该设置中应该运行良好。