nvidia/cuda-xx镜像使用报错nvidia-container-cli: requirement error: unsatisfied condition: cuda>=12.0, ....
在这个目录下你可能看到类似libcuda.so.460.106.00这样的文件,我们可以让libcuda.so.1分别指向一下这些文件,每切换一次,测试一次,应该会有一个能让环境起作用的。不知道你是否有疑问什么时候用nvdiasmi查看驱动,什么时候用nvcc查看驱动呢?然后用nvidia-smi, 就能看到环境已经使用了 物理机上的cuda了。首先找到libcuda.so.1所在的目录,我的是/
描述
我使用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了。
##



更多推荐



所有评论(0)