win10 WSL2 Docker 与 Linux Docker

项目场景:用win10 wsl2 docker开发使用GPU(tensorflow、onnx、TensorRT)的镜像,然后部署到Linux生产环境进行使用,发现不识别cuda驱动。

在Linux上运行wsl2 save 后的镜像。

docker run -it --gpus all tensorrt:21.06-py3

出现错误:

ERROR: No supported GPU(s) detected to run this container

输入 nvidia-smi

NVIDIA-SMI couldn't find libnvidia-ml.so library in your system. Please make sure that the NVIDIA Display Driver is properly installed and present in your system.

Please also try adding directory that contains libnvidia-ml.so to your system PATH.

输入 nvcc -V则正常显示。

因为在生产环境中截图不方便,所以没有图片。

[En]

Because it is not convenient to take screenshots in the production environment, there are no pictures.

原因:NVIDIA驱动不匹配

Linux运行没有使用WSL2开发过镜像,会发现一切正常,如果在WSL2上通过 --gpus all运行过就无法识别NVIDIA驱动了。

如原镜像名为tensorrt:21.06-py3。

在WSL运行此镜像:

docker run -it --gpus all tensorrt:21.06-py3

无论是 nvidia-smi还是 nvcc -V都是正常的。

在Linux直接运行此镜像:

docker run -it --gpus all tensorrt:21.06-py3

无论是 nvidia-smi还是 nvcc -V也都是正常的。

从WSL导出此镜像为tensorrt:21.06-py3-wls2,将它导入到Linux Docker会出现一开始的问题。
Linxu Docker 在两个镜像根目录中输入:

find -name linnvidia-ml*

会发现tensorrt:21.06-py3-wls2比tensorrt:21.06-py3多了两个路径中带有wsl的文件,应该是由于在WSL2中使用的驱动为CUDA For WSL不是单纯的CUDA驱动。删除了这两个也没有正常识别NVIDIA驱动。

需要将使用GPU的镜像从WSL2 Docker迁移到 Linux Docker时,目前的解决方案是在win10上运行镜像不能添加 --gpus all配置参数,即不使用GPU;由于对于驱动软连接不是很熟悉,其余的解决方法还没有发现。

Original: https://blog.csdn.net/qq_27375383/article/details/123845278
Author: 刘丶小歪
Title: win10 WSL2 Docker 与 Linux Docker

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/497043/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球