NVIDIA从CUDA 11.x开始应该在理论上保证他们的CUDA工具包库(通常在Docker容器中提供)和驱动程序库libcuda.so
(安装在主机上)的兼容性。至少当我们使用CUDA的所有次要版本(11.0到11.8)时,这应该是正确的。
因此,在预装了为旧版本CUDA构建的GPU驱动程序的主机上运行新版本CUDA的container应该是可行的。但这在实践中并不可行-启用CUDA的container(包括官方的nvidia/cuda
)无法在这种情况下运行。
如果升级主机上的驱动程序库不可行,并且降级容器化CUDA工具包耗时且可能降低功能,是否有任何配置解决方案至少可以启动容器(以测试应用是否可以访问GPU)?
2条答案
按热度按时间jaxagkaj1#
Github上一位NVIDIA员工推荐的
NVIDIA_DISABLE_REQUIRE
等解决方案最终将无法为您的应用提供GPU访问(如here所述)。您需要通过以下两种方式之一在驱动程序库(主机上)和CUDA工具包(容器中)之间同步CUDA版本:iszxjhcz2#
根据NVIDIA文档,将此env.变量设置为
true
(或1)应在启动时禁用CUDA版本检查,并应在相同的主要CUDA版本中工作(由于次要版本兼容性):但是,我必须警告您,此变通方案仅在表面上起作用,会让您的容器与(更新版本)CUDA工具包启动(不再在CUDA版本检查失败时崩溃)。在我的情况下,变通方案帮助在装有CUDA 11. 2驱动程序库的机器上启动装有11. 8 CUDA工具包的容器。但当你试图在GPU中测试一些ML算法时,变通方案最终会失败,他们将无法在模型中训练,打印出各种具体程度的错误消息(LightGBM甚至表面上“工作”,但GPU利用率为... 0%,即静默失败)。最具体的错误消息是Catboost给出的:
而XGBoost错误地给出了一条相当误导的消息:
(Both容器中的CUDA工具包降级以匹配主机中的CUDA版本后,上述算法中的任何一个都可以在GPU中正常工作)。