之前做了一个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 。
PaddlePaddl==2.4.2-GPU
PaddleSpeech==1.4.1
Numpy==1.22.4 或 1.23.5
PaddleNLP==2.5.2
按照Paddle官方的说法,选择10.2 ,也是因为我显卡比较老,担心算力不够出问题.进入下面的网页,选择对应版本。
CUDA Toolkit Archive | NVIDIA Developerhttps://developer.nvidia.com/cuda-toolkit-archive
cuDNN 历史版本 | NVIDIA 开发者https://developer.nvidia.cn/rdp/cudnn-archive
告诉你个不用登陆和注册NVIDIA的方法下载cuDNN
将以上三个文件都准备好,我放到了 /home 目录下,等下面安装就会用到。
桌面上鼠标右键 或 Ctrl+Alt+T(打开终端)
sudo passwd root
先找到对应系统的镜像地址:
- #替换内容
- sudo gedit /etc/apt/sources.list
CPU当然要支持AVX2指令集了:
cat /proc/cpuinfo |grep
我的电脑是32G内存,之前实验的时候16G也可以跑起来,问题都不大。
买显卡的时候上当了,买了一块3060,发现驱动无论如何都安装不上,后来问了商家,才发现显卡是代工厂做的,显卡驱动得用代工厂发布的,后来给我了个安装官方驱动的解决方案,安装后程序依然跑不起来,避坑指南(发行者)便宜没好货!!!
最后还得使用之前的1060,算力虽然差了点,但最起码能用,下面是安装的显卡步骤,下载已经在上面说过了,自己提前准备好:
sudo apt-get install gcc g++ make
这里不得不说以下GCC。Ubuntu22.04默认安装的是 g++ -11 gcc -11 。后续在实验过程中有一个非常重要的关于MFA的库,在11下会报错,需要安装 g++ -6 gcc -6。
sudo gedit /etc/modprobe.d/blacklist.conf
在底部追加
- blacklist nouveau
- options nouveau modeset=0
执行命令使之生效
sudo update-initramfs -u
重启电脑
reboot
再次回到桌面(此时应该是没有驱动的状态,大图标)
验证是否关闭nouveau ,没有输出即成功
lsmod | grep nouveau
关闭桌面
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
安装依赖
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
- #进入文件目录
- 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
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
- 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
conda install paddlepaddle-gpu==2.4.2 cudatoolkit=10.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
这步基本没问题,直接过。
pip install paddlespeech -i https://mirror.baidu.com/pypi/simple
安装过程中有个包总是连接超时,名字记不住了,好像是 setuptools-msc ?反正根据提示 手动安装下,指定清华源就可以了。
pip install paddlenlp==2.5.2 -i https://mirror.baidu.com/pypi/simple
为什么补充安装它呢?因为GPU版在运行实验代码的时候,会有一个 错误:
ModuleNotFoundError: No module named ‘paddle.nn.layer.layers‘
pip install paddlespeech_ctcdecoders -i https://mirror.baidu.com/pypi/simple
不换默认的numpy会报错,就是speech中使用的是老版本函数。
-
- pip install numpy==1.23.5 -i https://pypi.tuna.tsinghua.edu.cn/simple
这里参考了代码中带的env.sh ,最重要的 就是关于MFA部分了。这是训练用的。
cp -r /home/ajb/aistudio/nltk_data/ /root/
这个脚本在 上面的文章中有,这里只作说明。
相关的文件,下载的代码中都有。注意脚本中的 路径修改即可。
最关键的就是那个软连接,没有它会报错,这个错误就是:
找不到 mfa文件夹,这个文件夹是项目中的,是在训练的时候应该自动生成,如果没有生成,说明MFA配置是有问题的,下面就都进行不下去了。
好嘛!上面通过了,文件夹也生成了,出现新问题:
找不到文件raw_mfcc.0.scp或.ark
查了下CPU版的项目,这个文件存在于
它其实还是 因为MFA出现了问题。我查看了下日志。提示是有个库找不到:
libgfortran.so.3
这个库安装过程稍微有点麻烦,我写在6.4
直接安装会出错:
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
这里提前说了下这个设置,最好提前设置好,方便接下来的问题修正
设置多版本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
上面问题都处理完后,程序也运行没有任何问题,训练、合成速度明显提高,非常快,重启了下系统,再进入的时候发现分辨率变最低了。。。。通过 nvidia-smi 命令查看驱动,竟然变未知命令了。
我又再一次 通过 sudo telinit 3进入,再执行一次驱动安装,会出错退出,回来查看nvidia install.log,发现是 gcc g++版本过低导致的,那么,我就通过 6.5切换到gcc g++-11版本上,重新安装了一次显卡驱动。
再重启,显卡恢复(nvidia-smi),启动项目streamlit run SpeechMain.py 。运行训练。。。
一切正常。