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