前言
之前做了一个Ubuntu18.04.6本地部署PaddleSpeech实验代码(CPU版)的相关项目,因为是CPU版的,合成/训练等方面的耗时真的是非常感人,有了之前的经验,又部署了一个GPU版的,说实话虽然时间用的相对之前少了很多,但是问题还是挺多的,依然是对Python的学习深度不够,CPU和GPU之间的差距是很大的,CPU不需要驱动,不需要驱动相关的库,而GPU问题就多多了,下面就是我安装全过程,包含了一些问题的分析。
为什么选择使用22.04这个版本呢,主要原因就是“ldd (Ubuntu GLIBC 2.35-0ubuntu3.4) 2.35” GLIBC的这个版本问题了。18.04的GLIBC版本低,GPU训练是需要用到这个库的。但是手动变更GLIBC版本风险是非常大的,最后平衡后放弃了18.04 。
一、软件版本的选择
1.1.程序方面所需的版本匹配:
PaddlePaddl==2.4.2-GPU
PaddleSpeech==1.4.1
Numpy==1.22.4 或 1.23.5
PaddleNLP==2.5.2
1.2.硬件驱动所需的版本匹配:
这里 参考于:飞桨PaddlePaddle-源于产业实践的开源深度学习平台飞桨致力于让深度学习技术的创新与应用更简单。具有以下特点:同时支持动态图和静态图,兼顾灵活性和效率;精选应用效果最佳算法模型并提供官方支持;真正源于产业实践,提供业界最强的超大规模并行深度学习能力;推理引擎一体化设计,提供训练到多端推理的无缝对接;唯一提供系统化技术服务与支持的深度学习平台https://www.paddlepaddle.org.cn/install/old?docurl=/documentation/docs/zh/install/pip/linux-pip.html
1.2.1显卡驱动:最新版即可
官方驱动 | NVIDIA下载适用于 GeForce、TITAN、NVIDIA RTX、数据中心、GRID 等 NVIDIA 产品的新驱动。https://www.nvidia.cn/Download/index.aspx?lang=cn
1.2.2 CUDA:
按照Paddle官方的说法,选择10.2 ,也是因为我显卡比较老,担心算力不够出问题.进入下面的网页,选择对应版本。
CUDA Toolkit Archive | NVIDIA Developerhttps://developer.nvidia.com/cuda-toolkit-archive
1.2.3 cuDNN:官方对应7.6.5
cuDNN 历史版本 | NVIDIA 开发者https://developer.nvidia.cn/rdp/cudnn-archive
告诉你个不用登陆和注册NVIDIA的方法下载cuDNN
将以上三个文件都准备好,我放到了 /home 目录下,等下面安装就会用到。
二、系统设置
桌面上鼠标右键 或 Ctrl+Alt+T(打开终端)
2.1.设置root
sudo passwd root
2.2.修改国内镜像
先找到对应系统的镜像地址:
ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirrorubuntu 使用帮助 | 镜像站使用帮助 | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
#替换内容
sudo gedit /etc/apt/sources.list
2.3.关闭显示器设置
三、硬件配置
3.1.CPU
CPU当然要支持AVX2指令集了:
cat /proc/cpuinfo |grep
3.2.内存
我的电脑是32G内存,之前实验的时候16G也可以跑起来,问题都不大。
3.3.显卡及驱动安装
买显卡的时候上当了,买了一块3060,发现驱动无论如何都安装不上,后来问了商家,才发现显卡是代工厂做的,显卡驱动得用代工厂发布的,后来给我了个安装官方驱动的解决方案,安装后程序依然跑不起来,避坑指南(发行者)便宜没好货!!!
最后还得使用之前的1060,算力虽然差了点,但最起码能用,下面是安装的显卡步骤,下载已经在上面说过了,自己提前准备好:
3.3.1安装显卡驱动
3.3.1.1安装工具GCC
sudo apt-get install gcc g++ make
这里不得不说以下GCC。Ubuntu22.04默认安装的是 g++ -11 gcc -11 。后续在实验过程中有一个非常重要的关于MFA的库,在11下会报错,需要安装 g++ -6 gcc -6。
3.3.1.2禁止nouveau
sudo gedit /etc/modprobe.d/blacklist.conf
在底部追加
blacklist nouveau
options nouveau modeset=0
执行命令使之生效
sudo update-initramfs -u
重启电脑
reboot
再次回到桌面(此时应该是没有驱动的状态,大图标)
验证是否关闭nouveau ,没有输出即成功
lsmod | grep nouveau
3.3.1.3安装驱动
关闭桌面
sudo telinit 3
#切换到 我的驱动文件目录
cd /home
#赋予权限
sudo chmod +x NVIDIA-Linux-x86_64-535.113.01.run
#执行安装
sudo bash NVIDIA-Linux-x86_64-535.113.01.run –no-opengl-files –no-x-check
–no-opengl-files 只安装驱动文件,不安装OpenGL文件。这个参数最重要,不加很有可能出现循环登录,也就是loop login。
–no-x-check 安装驱动时不检查X服务
进入界面
选择:Continue installathion 继续安装
自动更新X配置 选择否 直到完成安装
重启电脑
#查看显卡
nvidia-smi
3.3.2 CUDA安装
安装依赖
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
执行安装过程
#进入目录
cd /home
#执行安装
sudo sh cuda_10.2.89_440.33.01_linux.run
出现的协议的地方输入 accept 一路安装就可以了 。
添加环境变量
sudo gedit ~/.bashrc
末尾添加
export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}
export PATH=${CUDA_HOME}/bin:${PATH}
验证
nvcc -V
3.3.3 cuDNN安装
#进入文件目录
cd /home
#解压文件
tar zxvf cudnn-10.2-linux-x64-v7.6.5.32.tgz
#复制文件到指定位置
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
验证
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
四、安装环境
4.1.安装Miniconda
Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source MirrorIndex of /anaconda/miniconda/ | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/我使用了 Miniconda3-py39_23.9.0-0-Linux-x86_64.sh
#进入目录
cd /home
#执行安装
sudo bash Miniconda3-py39_23.9.0-0-Linux-x86_64.sh
一路查看协议,慢点,最后按多了会退出。最后 有个要输入目录的地方,我输入了/home
#刷新环境变量
source ~/.bashrc
创建虚拟环境
conda create --name m1 python=3.9
进入虚拟环境
conda activate m1
4.2相关库(conda环境下)
sudo apt-get install build-essential libssl-dev libffi-dev python3-dev
sudo apt-get install gcc make zlib1g-dev
sudo apt-get install libbz2-dev
sudo apt-get install libsqlite3-dev
sudo apt-get install libxml2-dev libffi-dev libxslt1-dev
pip install pytest-runner -i https://pypi.tuna.tsinghua.edu.cn/simple
#这个是server实例中,变速需要的三方插件
pip intall soxbindings -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install streamlit -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo apt-get install ffmpeg
4.3 安装Paddle(conda环境下)
conda install paddlepaddle-gpu==2.4.2 cudatoolkit=10.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
这步基本没问题,直接过。
4.4 安装PaddleSpeech(conda环境下)
pip install paddlespeech -i https://mirror.baidu.com/pypi/simple
安装过程中有个包总是连接超时,名字记不住了,好像是 setuptools-msc ?反正根据提示 手动安装下,指定清华源就可以了。
4.5补充安装PaddleNLP(conda环境下)
pip install paddlenlp==2.5.2 -i https://mirror.baidu.com/pypi/simple
为什么补充安装它呢?因为GPU版在运行实验代码的时候,会有一个 错误:
ModuleNotFoundError: No module named ‘paddle.nn.layer.layers‘
4.6补充安装paddlespeech_ctcdecoders(conda环境下)
pip install paddlespeech_ctcdecoders -i https://mirror.baidu.com/pypi/simple
4.7更换NUMPY版本
不换默认的numpy会报错,就是speech中使用的是老版本函数。
pip install numpy==1.23.5 -i https://pypi.tuna.tsinghua.edu.cn/simple
五、实验代码部署
实验代码下载及修改参考:Ubuntu18.04.6本地部署PaddleSpeech实验代码(CPU版)-CSDN博客文章浏览阅读365次。这是我最早使用的部署系统,使用了Docker和直接安装两种方式,也失败了,但是后来在ubuntu解决问题的过程中,也发现Centos出现的问题也是可以解决的,所以等有空了,我会在尝试一次在Centos中部署下,并制作成Docker。这个文件里有很多这样的地方,原文是 python3 /home/aistudio/xxxxxxxx,但是我们python3可是系统自己带的python3.6啊,而且没安装相关插件环境,不出错才怪呢,路径也不对,自行搜索修改吧,不多。所以说,运行失败的大部分原因是因为权限和路径。https://blog.csdn.net/alarey/article/details/131511738
六、配置实验代码相关环境
这里参考了代码中带的env.sh ,最重要的 就是关于MFA部分了。这是训练用的。
6.1 处理NLTK,下载失败几率高
cp -r /home/ajb/aistudio/nltk_data/ /root/
6.2 配置MFA环境
这个脚本在 上面的文章中有,这里只作说明。
相关的文件,下载的代码中都有。注意脚本中的 路径修改即可。
最关键的就是那个软连接,没有它会报错,这个错误就是:
找不到 mfa文件夹,这个文件夹是项目中的,是在训练的时候应该自动生成,如果没有生成,说明MFA配置是有问题的,下面就都进行不下去了。
6.3解决MFA相关问题
好嘛!上面通过了,文件夹也生成了,出现新问题:
找不到文件raw_mfcc.0.scp或.ark
查了下CPU版的项目,这个文件存在于
它其实还是 因为MFA出现了问题。我查看了下日志。提示是有个库找不到:
libgfortran.so.3
这个库安装过程稍微有点麻烦,我写在6.4
6.4安装libgfortran3
直接安装会出错:
sudo-apt get install libgfortran3
E: Unable to locate package libgfortran3
因为22.04不支持g++ -6 ,默认是g++-11,这个库竟然在g++ -6下。
sudo gedit /etc/apt/sources.list
文末加入
deb http://gb.archive.ubuntu.com/ubuntu/ bionic main universe
更新源
sudo apt-get update
碰到错误
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY XXXXXXXXX
解决密钥错误(XXXXXX的地方就是系统提示的那个密钥)
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys XXXXXXXXXXXX
再更新源(这个过程看网络了,我是真的很慢,用了1个小时)
sudo apt-get update
安装g++ -6
apt-get install g++-6
设置为系统默认版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 6
安装 libgfortran3
sudo apt-get install libgfortran3
6.5关于GCC G++版本的选择设置
这里提前说了下这个设置,最好提前设置好,方便接下来的问题修正
设置多版本gcc g++
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100
切换
#切换gcc版本
sudo update-alternatives --config gcc
#切换g++版本
sudo update-alternatives --config g++
弹出选择
选择 路径 优先级 状态
------------------------------------------------------------
* 0 /usr/bin/gcc-6 100 自动模式
1 /usr/bin/gcc-11 100 手动模式
2 /usr/bin/gcc-6 100 手动模式
要维持当前值[*]请按<回车键>,或者键入选择的编号:2
到这里其实整个项目就可以跑起来,最后有个大问题需要解决。
七、安装g++-6后,重启电脑,显卡驱动丢失
上面问题都处理完后,程序也运行没有任何问题,训练、合成速度明显提高,非常快,重启了下系统,再进入的时候发现分辨率变最低了。。。。通过 nvidia-smi 命令查看驱动,竟然变未知命令了。
我又再一次 通过 sudo telinit 3进入,再执行一次驱动安装,会出错退出,回来查看nvidia install.log,发现是 gcc g++版本过低导致的,那么,我就通过 6.5切换到gcc g++-11版本上,重新安装了一次显卡驱动。
再重启,显卡恢复(nvidia-smi),启动项目streamlit run SpeechMain.py 。运行训练。。。
一切正常。