描述

我使用nvidia/cuda-miniconda:12.0.1-base-centos7打了一个镜像,在另一个环境运行的时候报错:

docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'
nvidia-container-cli: requirement error: unsatisfied condition: cuda>=12.0, please update your driver to a newer version, or use an earlier cuda container: unknown.

主要的错误在最后一行了。

解决

我们查看当前cuda驱动的版本:

我们的错误是因为当前机器上的驱动版本比较低(容器是12.0 大于服务器上的11.7),解决办法如下:

在docker run命令里面加入 --env NVIDIA_DISABLE_REQUIRE=1 参数

 不知道你是否有疑问什么时候用nvdiasmi查看驱动,什么时候用nvcc查看驱动呢?可以参考下面的博客:

CUDA版本不同:nvidia-smi和nvcc -V_nvidia-smi和nvcc-v的cuda版本不一致-CSDN博客

 额外情况

当容器内的cuda版本高,服务器上的cuda版本低的时候,通过上面的方式可以将容器启动起来(如果你用的是nvidia的基础镜像),但是再推理的时候可能会报如下错误:

Did you run some cuda functions before calling NumCudaDevices() that might have already set an error? Error 803: system has unsupported display driver / cuda driver combination (Triggered internally at  ../c10/cuda/CUDAFunctions.cpp:109

解决办法:

这种情况只能让容器内部切换为物理机上的cuda了。

首先找到libcuda.so.1所在的目录,我的是/usr/lib64。

在这个目录下你可能看到类似libcuda.so.460.106.00这样的文件,我们可以让libcuda.so.1分别指向一下这些文件,每切换一次,测试一次,应该会有一个能让环境起作用的。

rm -rf  /usr/lib64/libcuda.so.1
ln -s  /usr/lib64/libcuda.so.460.106.00  /usr/lib64/libcuda.so.1
import torch

torch.cuda.is_available()
# 返回True就证明环境ok了

然后用nvidia-smi, 就能看到环境已经使用了 物理机上的cuda了。

##

Logo

分享最新的 NVIDIA AI Software 资源以及活动/会议信息,精选收录AI相关技术内容,欢迎大家加入社区并参与讨论。

更多推荐