0x00 缘起
本文将介绍在WSL2-Ubuntu系统中,使用Conda配置百度飞浆paddlepaddle虚拟环境中所出现的各种问题以及解决方法,最终运行"run_check()"通过测试。
在WSL2中配置paddlepaddle不像配置Pytorch那样顺滑,会出现各种问题(如:库的文件缺失、不知道如何匹配CuDNN、CUDA和Paddle版本等),本文将全部介绍到。
本文将默认读者已经安装好WSL2-Ubuntu 20.04.6 LTS、MiniConda以及Python集成开发环境(如Pycharm),本文将在此基础至上进行介绍。
运行环境如下:
1. 系统版本:Windows 11 专业版
2. 硬件信息:CPU: i7-9750H、RAM: 32GB、GPU: GTX 1650
3. 软件要求:WSL2-Ubuntu 20.04.6 LTS
4. GPU驱动信息:552.22
5. CUDA驱动版本:12.4.131
0x01 创建虚拟环境并激活
使用Pycharm创建名为paddle-gpu的项目,并选择到WSL2中的Conda,并创建新的环境。
1. 创建新项目
2. 添加WSL2中的Conda作为解释器
3. 修改终端自动加载WSL,修改Shell路径到wsl
4. 删除本地的虚拟环境
5. 查看当前的虚拟环境为“paddle-gpu”
6. 输出测试代码
当前虚拟环境搭建完成。
7. 控制台激活当前虚拟环境
当前为base环境,输入代码:“conda activate paddle-gpu”,为当前会话激活虚拟环境。
此时已经激活虚拟环境。
0x02 Conda安装飞浆Paddle-GPU
1. 查看GPU硬件驱动版本
输入nvidia-smi,查看硬件驱动版本:
- NVIDIA-SMI 550.76.01
- Driver Version: 552.22
- CUDA Version: 12.4
即在虚拟环境中,所使用的CUDA不能高于12.4,低于或等于12.4的CUDA是可以使用的。
2. 查看系统CUDA运行时环境版本
输入nvcc -V查看版本信息:
在全局系统中的CUDA版本为12.0.76,虚拟环境可以使用该版本,也可以安装其他版本,最高版本号不高于12.4即可。
3. Conda安装Paddle-GPU
安装GPU版本的PaddlePaddle,使用CUDA 11.7和cuDNN 8.4.1的安装命令:
conda install paddlepaddle-gpu==2.6.1 cudatoolkit=11.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge
Conda将统计安装信息,并询问你是否安装,输入'y'继续。
显示done则为安装完成
4. 使用Paddle查看虚拟环境版本信息
清除main中的代码,使用以下代码查看版本信息:
import paddle
print("paddle version", paddle.__version__)
print("cudnn: ", paddle.version.cudnn())
print("cuda: ", paddle.version.cuda())
执行结果如下:
若cudnn的版本不对,请查看以下资料,使用conda安装指定版本cudnn:
conda install cudnn=8.4.1
重新运行测试:
paddle-gpu虚拟环境中:
CUDA:11.7
cuDNN:8.4.1
5. 使用run_check()测试Paddle工作状态
在main中追加代码:
paddle.utils.run_check()
运行出错:
出错信息为:
...
The third-party dynamic library (libcuda.so) that Paddle depends on is not configured correctly. (error code is libcuda.so: cannot open shared object file: No such file or directory)
...
Suggestions:
1. Check if the third-party dynamic library (e.g. CUDA, CUDNN) is installed correctly and its version is matched with paddlepaddle you installed.
2. Configure third-party dynamic library environment variables as follows:
- Linux: set LD_LIBRARY_PATH by `export LD_LIBRARY_PATH=...`
- Windows: set PATH by `set PATH=XXX;...
提示环境中确实文件“libcuda.so”,或者环境变量:“LD_LIBRARY_PATH”没有被正确配置。
0x03 排查LD_LIBRARY_PATH与libcuda.so
在终端中输入:
${LD_LIBRARY_PATH}
结果如下:
-bash: cd: /usr/local/cuda-12.0/lib64:: No such file or directory
在虚拟环境中,“LD_LIBRARY_PATH”被代理成为“CONDA_PREFIX”,在LD_LIBRARY_PATH中缺失文件,即在CONDA_PREFIX的lib库中缺失文件。
故解决方法为:在CONDA_PREFIX的lib库中补齐文件,LD_LIBRARY_PATH作为全局环境无需补齐。
进入CONDA_PREFIX的lib库中,进行查询:
cd ${CONDA_PREFIX}/lib
ll | grep libcuda
发现缺失没有文件“libcuda.so”,从系统其他位置,copy一份libcuda.so到当前位置:
1. 全局搜索libcuda.so
sudo find / -mount -name libcuda.so*
发现目标文件:/usr/local/cuda-12.0/targets/x86_64-linux/lib/stubs/libcuda.so
2. 复制目标文件到${CONDA_PREFIX}/lib中
cd ${CONDA_PREFIX}/lib
cp /usr/local/cuda-12.0/targets/x86_64-linux/lib/stubs/libcuda.so .
ll | grep libcuda
此时,文件libcuda.so已被补齐。
再次运行测试:
此时,PaddlePaddle is installed successfully !
0x04 其他可能出现的问题
1. libtinfo.so.6: no version information available (required by bash)
这个问题在初次配置上出现过,再初次配置后,再配置其他环境没有报错,解决方法:
rm ${CONDA_PREFIX}/lib/libtinfo*
ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 ${CONDA_PREFIX}/lib/libtinfo.so.6
问题分析:虚拟环境中的lib库中的libtinfo过失,使用文件替换到新版本。
0x05 后记
在虚拟环境中的操作,一般都在conda文件夹下的虚拟环境目录下进行文件替换,这种文件替换操作不对全局环境造成影响,这是一种安全的文件替换方法。
对于在全局文件夹中的操作,要慎重进行!
在配置PaddlePaddle的同时也在配置Pytorch,Pytorch一次就可以测试通过,而在PaddlePaddle的过程中的出现了很多问题,这个问题可能也是影响Paddle流行度的一个原因。
- Stay Hangry,Stay Foolish!