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则正常显示。


原因分析:

由于生产环境不方便截图,因此没有配图。

原因: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;由于对于驱动软连接不是很熟悉,其余的解决方法还没有发现。

你可能感兴趣的:(深度学习,tensorflow,python,docker,深度学习)