繁体   English   中英

较旧的驱动程序,较新的 CUDA 工具包导致容器启动失败 - 任何配置解决方法?

[英]Older driver, newer CUDA Toolkit leads to container startup failure - any configuration workarounds?

从 CUDA 11.x 开始,NVIDIA 理论上应保证其 CUDA 工具包库(通常在 docker 容器内提供)和驱动程序库libcuda.so (安装在主机上)的兼容性。 至少当我们停留在 CUDA(11.0 到 11.8)的所有次要版本中时,这应该是正确的。

因此,应该可以在预装了为旧版 CUDA 构建的 GPU 驱动程序的主机上运行带有新版本 CUDA 的容器。 但这在实践中不起作用——支持 CUDA 的容器(包括官方的nvidia/cuda )在这种情况下无法运行。

如果升级主机上的驱动程序库不可行并且降级容器化的 CUDA 工具包很耗时并且可能会降低功能,是否有任何配置解决方法至少可以使容器启动(以测试应用程序是否具有 GPU 访问权限)?

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

NVIDIA_DISABLE_REQUIRE=1

但是,我必须警告您,此解决方法仅在表面上起作用,让您的容器与不匹配的(较新的)CUDA 工具包启动(不再因 CUDA 版本检查失败而崩溃)。 在我的例子中,解决方法帮助在具有 CUDA 11.2 驱动程序库的机器上使用 11.8 CUDA 工具包启动容器。 但是,当您尝试在 GPU 中测试某些 ML 算法时,解决方法最终将失败,它们将无法在 model 中训练,打印具有不同级别特异性的错误消息(LightGBM 甚至显然“工作”,但在.. . 0% GPU 利用率,即静默失败)。 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.

(在容器中的 CUDA Toolkit 降级以匹配来自主机的 CUDA 版本后,上述两种算法在 GPU 中开始正常工作)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM