docker 较旧的驱动程序、较新的CUDA工具包导致container启动失败-有什么配置解决方案吗?

rkkpypqq  于 2023-01-08  发布在  Docker
关注(0)|答案(2)|浏览(440)

NVIDIA从CUDA 11.x开始应该在理论上保证他们的CUDA工具包库(通常在Docker容器中提供)和驱动程序库libcuda.so(安装在主机上)的兼容性。至少当我们使用CUDA的所有次要版本(11.0到11.8)时,这应该是正确的。
因此,在预装了为旧版本CUDA构建的GPU驱动程序的主机上运行新版本CUDA的container应该是可行的。但这在实践中并不可行-启用CUDA的container(包括官方的nvidia/cuda)无法在这种情况下运行。
如果升级主机上的驱动程序库不可行,并且降级容器化CUDA工具包耗时且可能降低功能,是否有任何配置解决方案至少可以启动容器(以测试应用是否可以访问GPU)?

jaxagkaj

jaxagkaj1#

Github上一位NVIDIA员工推荐的NVIDIA_DISABLE_REQUIRE等解决方案最终将无法为您的应用提供GPU访问(如here所述)。您需要通过以下两种方式之一在驱动程序库(主机上)和CUDA工具包(容器中)之间同步CUDA版本:

  • 升级主机驱动程序库(首选),
  • 将container CUDA工具包降级。
iszxjhcz

iszxjhcz2#

根据NVIDIA文档,将此env.变量设置为true(或1)应在启动时禁用CUDA版本检查,并应在相同的主要CUDA版本中工作(由于次要版本兼容性):

NVIDIA_DISABLE_REQUIRE=1

但是,我必须警告您,此变通方案仅在表面上起作用,会让您的容器与(更新版本)CUDA工具包启动(不再在CUDA版本检查失败时崩溃)。在我的情况下,变通方案帮助在装有CUDA 11. 2驱动程序库的机器上启动装有11. 8 CUDA工具包的容器。但当你试图在GPU中测试一些ML算法时,变通方案最终会失败,他们将无法在模型中训练,打印出各种具体程度的错误消息(LightGBM甚至表面上“工作”,但GPU利用率为... 0%,即静默失败)。最具体的错误消息是Catboost给出的:

CatBoostError: catboost/cuda/cuda_lib/cuda_base.h:281: CUDA error 803: system has unsupported display driver / cuda driver combination

而XGBoost错误地给出了一条相当误导的消息:

XGBoostError: [17:49:24] ../src/gbm/gbtree.cc:554: Check failed: common::AllVisibleGPUs() >= 1 (0 vs. 1) : No visible GPU is found for XGBoost.

(Both容器中的CUDA工具包降级以匹配主机中的CUDA版本后,上述算法中的任何一个都可以在GPU中正常工作)。

相关问题