Docker调用GPU报错

docker 报错
docker: Error response from daemon: 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: initialization error: load library failed: libnvidia-ml.so.1: cannot open shared object file: no such file or directory: unknown.

把国内外网站上讨论有关这个问题解决的方法都试了一遍还是解决不了,球高人可以指点一下迷津

load library failed: libnvidia-ml.so 这个可以看出安装的时候缺少这个依赖库。建议重新下载镜像试一下

这个报错信息看起来是因为 Docker 在启动容器时无法加载 NVIDIA 相关的库文件 libnvidia-ml.so.1。你可以尝试确认一下以下几点:

  1. 确认 NVIDIA 驱动已经正确安装:在主机上通过 nvidia-smi 命令检查是否可以正常显示 GPU 信息,如果无法显示 GPU 信息,则可能是因为 NVIDIA 驱动未正确安装。
  2. 确认 NVIDIA 容器运行时(NVIDIA Container Toolkit)已经正确安装:在主机上执行 sudo docker run --rm nvidia/cuda:11.0-base nvidia-smi 命令,如果可以输出 GPU 相关信息,则 NVIDIA 容器运行时已经正确安装。如果不能输出 GPU 相关信息,则可能是因为 NVIDIA 容器运行时未正确安装。
  3. 确认 NVIDIA 容器运行时的配置是否正确:在主机上查看 NVIDIA 容器运行时的配置文件 /etc/nvidia-container-runtime/config.toml 是否正确。你可以参考 NVIDIA 的官方文档(https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#configuring-nvidia-container-runtime%EF%BC%89%E4%BA%86%E8%A7%A3%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E9%85%8D%E7%BD%AE%E8%AF%A5%E6%96%87%E4%BB%B6%E3%80%82

如果你确认以上几点都没有问题,那么你可以尝试重新安装 NVIDIA 容器运行时和 Docker。你可以先卸载现有的 NVIDIA 容器运行时和 Docker,然后按照 NVIDIA 和 Docker 官方文档的指导重新安装。

另外,你还可以尝试在启动容器时指定 --gpus all 参数来确保 Docker 正确使用 NVIDIA 容器运行时。例如:

docker run --gpus all your-image

这个错误提示似乎是因为在Docker容器中无法找到 libnvidia-ml.so.1 库文件,这是NVIDIA GPU驱动程序的一部分。在使用NVIDIA GPU的Docker容器中,需要在主机上安装正确的NVIDIA驱动程序和CUDA工具包,并使用nvidia-docker启动容器。

以下是一些可能的解决方案:

确保您已经在主机上安装了正确版本的NVIDIA驱动程序和CUDA工具包,同时也要安装好nvidia-docker。可以在终端中运行以下命令来检查是否已正确安装NVIDIA驱动程序:

nvidia-smi

尝试使用nvidia-docker启动Docker容器。nvidia-docker是一个第三方工具,用于在使用NVIDIA GPU的Docker容器中正确配置和管理GPU。

首先,请确保您已经安装了nvidia-docker。然后,在终端中运行以下命令来启动Docker容器:

sudo nvidia-docker run -it

如果仍然出现问题,请尝试重新安装Docker,并确保您使用的是最新版本。您可以在终端中运行以下命令来卸载旧版本的Docker

sudo apt-get remove docker docker-engine docker.io containerd runc

希望这些解决方案能够帮助您解决Docker报错问题。如果您仍然遇到困难,请提供更多详细信息

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这个错误的原因是在 Docker 容器中,缺少 libnvidia-ml.so.1 这个库文件。

下面是一些可能的解决方法:

  1. 确保在 Dockerfile 文件中添加了相应的 NVIDIA 容器工具:
RUN distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
   && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add - \
   && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list \
   && apt-get update \
   && apt-get install -y nvidia-container-toolkit \
   && systemctl restart docker

这个操作会自动下载并安装 libnvidia-ml.so.1 这个库文件。

  1. 如果第一种解决方法没有效果,可以尝试手动将 libnvidia-ml.so.1 文件复制到容器中:

在本地电脑上找到 libnvidia-ml.so.1 文件,然后将它复制到容器中:

docker cp /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 <container_id>:/usr/lib/x86_64-linux-gnu/

其中 <container_id> 是你需要复制文件的容器的 ID。

复制完成后,重新启动容器即可。

这两种方法应该可以解决你的问题,如果还有其他问题,请问出来。
如果我的回答解决了您的问题,请采纳!

引用新必应

我看到你的docker报错了,可能是因为你的libnvidia-ml.so.1文件找不到或者无法加载。¹² 有几种可能的解决方法:

  • 你可以尝试用docker desktop来运行你的镜像,因为它可以在虚拟机中执行hook,而不需要访问主机上的库和设备。²
  • 你可以用docker而不是nvidia-docker来启动原始镜像下的容器,然后手动删除或改名文件/usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1和文件/usr/lib/x86_64-linux-gnu/libcuda.so.1,然后把此时的容器打包为镜像。³
  • 你可以检查你的libnvidia-ml.so.1文件是否存在,是否有正确的权限和链接,是否和你的驱动版本匹配。⁴

希望这些方法能帮到你。

该回答引用ChatGPT
该错误提示是由于在Docker容器中缺少所需要的NVIDIA GPU相关库文件。以下为解决该问题的步骤:

1. 首先确认主机中是否安装了对应的NVIDIA驱动和CUDA。可以通过命令行`nvidia-smi`和`nvcc -V`检查。

2. 为Docker容器添加NVIDIA GPU支持。这可以通过NVIDIA官方提供的nvidia-docker解决。可以参考[官方文档](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker)进行安装和配置。

3. 在Docker镜像中安装NVIDIA GPU相关的库文件。具体命令如下:


FROM nvidia/cuda:10.0-cudnn7-runtime
RUN apt-get update && apt-get install -y --no-install-recommends \
cuda-libraries-10-0 \
libcudnn7=7.6.5.32-1+cuda10.0 \
libcudnn7-dev=7.6.5.32-1+cuda10.0 \
libnvinfer6=6.0.1-1+cuda10.0 \
libnvinfer-dev=6.0.1-1+cuda10.0


在Dockerfile中使用以上命令,安装CUDA和相关的NVIDIA GPU库文件。

4. 启动Docker容器时,通过`--gpus all`参数启用GPU支持。具体命令如下:


docker run --gpus all [image]


需要注意的是,该参数仅在Docker 19.03或更高版本中可用。在更早的版本中,可以使用NVIDIA官方提供的nvidia-docker命令来启用GPU支持。

希望以上解决方案能够帮助到你。