所以使用一个普通的docker,我得出的结论是,两个不同的CUDA版本不兼容以下运行概念:使用本地GPU与CUDA 11例如与较低OS版本和较低CUDA版本的docker环境,因为容器必须通过其CUDA接近本地GPU,因为它们不兼容,整个事情是不可能的。
这就是nvidia-docker 2要解决的问题吗?
假设我的操作系统是ubuntu 20+,CUDA 11+,我需要运行必须与CUDA 8一起运行的代码,该代码仅与UBUNTU 16兼容,并且我有另一个与Ubuntu 18上的CUDA 10兼容的代码。
正如我所看到的,如果我错了,请纠正我,nvidia-docker 2将使我能够在容器本身上运行nvidia-smi命令,因此容器模拟(“认为”)GPU是本地的,因此我可以用ubuntu 16创建一个容器,用18创建另一个容器,我的GPU将很高兴地参与任何CUDA,cudatoolkit和cudnn版本(安装在容器上)?我想它也写了,这些组件只能在容器中,因此它并不重要,我有什么CUDA版本在我的电脑上,我错了吗?
如果是这样的话,另一个问题是,我是否能够使用docker和cuda-container-toolkit从容器中运行解释器,就像我现在使用docker和PyCharm一样,也就是说,它是否支持这个功能,以便能够在不同的容器上运行不同的CUDA?
或者我错了,希望乐观地认为,有可能调试不同的docer环境与不兼容的cuda版本与相同的本地GPU,而无需安装diffenet UBUNTU版本的硬盘驱动器?
或者最后一个建议是唯一可能的(同一台计算机上有几个Ubuntu)?无论如何,听起来是最自信和最简单的解决方案,但请纠正我的错误。
1条答案
按热度按时间mwkjh3gx1#
这就是nvidia-docker 2要解决的问题吗?
主要问题与GPU驱动程序有关。GPU驱动程序有在内核空间运行的组件和在用户空间运行的其他组件。这意味着要在Docker中成功使用,这些组件(用户空间:容器内部,内核空间:容器外部)必须匹配。
这是增强Docker的NVIDIA容器工具包/容器运行时的一个关键功能:使容器内与GPU驱动程序相关的内容与容器外的内容相匹配。
CUDA工具包的其他方面(运行时库、
nvcc
等)是独立的,无论您是否使用NVIDIA容器工具包,容器中的代码都需要使用其中的任何内容。(例如运行时库、nvcc
等)。容器外部的内容与这些项无关(当然,除非你是通过从外到内的坐骑提供的)。除此之外,CUDA本身在CUDA版本的工具包和驱动程序之间有a dependency。简而言之,在普通使用中,容器中的CUDA版本必须是驱动程序可以支持的版本。较新的驱动程序支持较旧的工具包。较旧的驱动程序不支持较新的工具包,除非您采取特殊措施。
相关资源:
1234567
为了在设置中获得最大的灵活性,请确保您的基础计算机中安装了最新的GPU驱动程序。并使用NVIDIA容器工具包。“旧”CUDA工具包/Docker容器应该在该设置中运行良好。
NVIDIA的一般建议包括:
1.不要在容器中安装驱动程序。确保在主机中安装了正确的驱动程序,并且在容器中只安装/使用CUDA工具包(不带驱动程序)组件。
1.使用the nvidia container toolkit使容器与安装在基本机器中的驱动程序“协调”。
1.在主机中安装最新的GPU驱动程序通常是个好主意。这应该适用于所有使用CUDA的容器。
1.如果您希望使用容器化方法在基础机器中提供驱动程序(例如在kubernetes集群中可能会这样做),则可以使用GPU operator。但这不会将驱动程序安装在容器中,而是使用容器化交付方法将其安装在基础机器中。