[英]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 中开始正常工作)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.