2024第一篇🐾, 预祝大家新年快乐,有多少小伙伴在还没放假~
文章概要:Win11系统环境装paddle-paddle-GPU版本, 在conda环境中。 后续新增Ubuntu22.04环境下安装paddlepaddle-gpu历程。
安装Paddle-Paddle深度学习环境
三步曲:
1.下载CUDA Toolkit
2.下载cuDNN
3.命令行下载paddle
1.下载
CUDA(Compute Unified Device Architecture),是一种由NVIDIA推出的通用并行计算架构,它包含了CUDA 指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员可以使用C/C++/Python等来为CUDA架构编写程序,以在支持CUDA的处理器上以超高性能运行。nvcc则是CUDA的编译器,翻译高级语言为GPU能理解的机器语言。
要想成功进行 CUDA 开发,必须
1.具有一个支持 CUDA 的显卡
2.安装兼容的CUDA驱动和toolkit程序。驱动能够帮助计算机调度识别硬件,在cmd中输入
nvidia-smi
可以看到你当前的显卡安装的CUDA版本与驱动版本(Driver Vision)
下载链接:CUDA Toolkit Archive | NVIDIA Developer
我这的CUDA版本为12.x,注意下载对应版本的CUDA Toolkit就行
下载过程一直next。
安装好后,打开cmd,输入nvcc -V
(大写),有返回结果即可。
如果没有,可能是系统变量没有设置。(一般来说,选择简易安装会给你配置好的)
那么:设置 -> 系统 -> 系统信息 -> 高级系统设置 -> 环境变量 -> 新建
类似于下图所示,
新建系统变量CUDA_PATH_Vx_n
value = C:Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x
用户变量将CUDA\12.x下的bin
和libnvvp
添加进去即可
2.下载cuDNN
下载链接: cuDNN Archive | NVIDIA Developer
好像要注册登录,注册一下就行
找到对应的CUDA版本的cuDNN下载即可。不知道啥版本的cmd输入nvidia-smi
就会返回对应的版本信息。
将安装好的压缩包解压,解压后可以看见bin、include、lib三个文件夹。
将bin、include、lib三个文件夹的内容分别复制到CUDA安装目录下,即前文提到的C:Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x
这一步和之前一直报错的代码相关!!!记得复制就行。
(PreconditionNotMet) The third-party dynamic library (cudnn64_8.dll) that Paddle
depends on is not configured correctly. (error code is 126)
可以在C:Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x\extras\demo_suite
文件夹下,
输入cmd,运行deviceQuery.exe
和 bandwidthTest.exe
验证安装是否成功。
3.下载paddle
官网:开始使用_飞桨-源于产业实践的开源深度学习平台 (paddlepaddle.org.cn)
# CUDA 12.0 pip Windows11
python3 -m pip install paddlepaddle-gpu==2.6.0.post120 -f https://www.paddlepaddle.org.cn/whl/linux/cudnnin/stable.html
使用 python
进入 python 解释器, 检测是否安装成功。若出现PaddlePaddle is installed successfully!
,说明您已成功安装。
import paddle
paddle.utils.run_check() # CUDA是否可用
Ubuntu22.04安装
默认安装了conda环境,或者直接pip安装也行。
# CUDA 11.2 conda
conda install paddlepaddle-gpu==2.6.0 cudatoolkit=11.2 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge
# CUDA 12.0 pip
python3 -m pip install paddlepaddle-gpu==2.6.0.post120 -f https://www.paddlepaddle.org.cn/whl/linux/cudnnin/stable.html
可以寻找自己对应的版本进行安装,感觉pip安装比conda反映快些,不到为啥
安装完后,使用以下命令进行测试是否安装成功
python -c "import paddle;print(paddle.__version__)" # 查看版本
python -c "import paddle;paddle.utils.run_check()" # 环境支持
出现successful,恭喜你,结束了.
但,我出现了:
ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.30`
not found (required
然后, 查看版本,最高3.4.29。 GG
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
在github上发现同样的问题,历史遗留了属于是 libstdc++.so.6:version 'GLIBCXX_3.4.30‘ not found · Issue #56047 · PaddlePaddle/Paddle
然后用这个方法更新了下gcc version
conda install -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge gcc=12.2.0
更新完之后又出现了Error
libstdc++.so.6: cannot open shared object file: No such file or directory
好了,这下彻底G, 然后发现apt-get update
也用不了了。。。
然后就把gcc这个版本删了
conda uninstall gcc
并查看gcc version, 恢复到原来的7.5.0, 好。 还是不能使用命令apt-get update
gcc --version
但是发现 libstdc++.so.6 有 GLIBCXX_3.4.30 乐。<喜
strings /root/anaconda3/envs/paddle/lib/libstdc++.so.6 | grep GLIBCXX
于是乎,创建一个软连接,应该就行. <remember: 删除之前的软连接
sudo cp /root/anaconda3/envs/paddle/lib/libstdc++.so.6.0.30 /usr/lib/x86_64-linux-gnu/
sudo rm /usr/lib/x86_64-linux-gnu/libstdc++.so.6
ln -s /root/anaconda3/envs/paddle/lib/libstdc++.so.6 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
再次测试,成功!
python -c "import paddle;paddle.utils.run_check()"
瞎猫碰上死耗子属于是
其他可能用到的命令:
# 查看同类型文件
sudo find / -name "libstdc++.so.6*"
# 此方法对我来说没用
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9
sudo apt-get upgrade libstdc++6
注意,这种方法虽然run_check()成功了,但是在Ubuntu18.04中,加载数据可能会出现错误。且他报的错误根本不是主要原因,见 [[ Error 2. ]] 。
如果可以使用,当我没说。
其他Error
1.OSError: (External) CUDA error(719), unspecified launch failure.
报错原因: 很有可能是CUDA和paddlepaddle-gpu版本兼容的问题。
解决方法:
conda install paddlepaddle-gpu==2.6.1 cudatoolkit=11.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge
2. OSError: codec configuration error when reading image file
File "/root/anaconda3/envs/paddle/lib/python3.9/site-packages/PIL/ImageFile.py", line 310, in load
raise _get_oserror(err_code, encoder=False)
OSError: codec configuration error when reading image file
data = self.transforms(data)
ValueError: Can't read The label file /root/workspace/label/5955.png
3.SystemError: (Fatal) Blocking queue is killed because the data reader raises an exception.
总结,还是版本兼容性问题。数据本身是没有问题的。
最终解决办法,新开一个conda容器,并降低paddlepaddle-gpu版本以及对应的各包版本。这里选择用paddlepaddle-gpu==2.4.2,以及Python=3.7。其他依赖库对应版本如下:
pyyaml==6.0
six==1.16.0
numpy==1.21.6
paddleslim==2.4.0
Requests==2.28.2
scikit_learn==1.0.2
scikit-image==0.19.3
scipy==1.7.3
tqdm==4.65.2
opencv-python==4.6.0.66
visualdl==2.5.1
protobuf==3.20.3
conda install paddlepaddle-gpu==2.4.2 cudatoolkit=11.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge
我的环境:
Ubuntu 18.04。6 LTS
Python3.7
最后能够正确加载数据,可能是框架本身的问题。如果出现了这种数据加载/读取错误,并且你确保了你的数据shape没有问题的话,不妨降低一下版本。(升级最新版本也可以,如果你的机子可以的话。)
paddleseg AssertionError: If train_dataset class is not Dataset
, it must have NUM_CLASSES
attr.
paddle中自定义Dataset时,使用yaml格式的时候,需要有三个默认属性:NUM_CLASSES、IGNORE_INDEX、IMG_CHANNELS。
NUM_CLASSES = 5
IGNORE_INDEX = 255
IMG_CHANNELS = 3
Could not load library libcudnn_cnn_train.so.8. Error:
Could not load library libcudnn_cnn_train.so.8. Error: /root/xxx/../lib/libcudnn_ops_train.so.8: symbol _ZN5cudnn3ops26JoinInternalPriorityStreamEP12cudnnContexti version libcudnn_ops_infer.so.8 not defined in file libcudnn_ops_infer.so.8 with link time reference
参考链接
2.Windows CUDA Toolkit安装 - 知乎 (zhihu.com)
3.解决paddlepaddle-gpu和cuda兼容的问题_hint: 'cudaerrorlaunchfailure'. an exception occu-CSDN博客