PaddleSpeech——安装与训练
记录从安装到训练PaddleSpeech 的语音识别(ASR)](https://github.com/PaddlePaddle/PaddleSpeech/blob/develop/demos/streaming_asr_server/README_cn.md))的一次踩坑记录
环境:
Python 3.8(ubuntu18.04)
Cuda 11.2
cudnn 8.2.1
Tesla T4(16GB)
8 vCPU Intel Xeon Processor (Skylake, IBRS)
PaddlePaddle v2.4.1
PaddleSpeech r1.4.1
服务器
服务器租用的是AutoDL最便宜的机子,约 0.8r/h
镜像使用PaddlePaddle 2.4.0 | Python 3.8(ubuntu18.04) | Cuda 11.2
服务器带宽很小,不管是直接下载东西还是 FTP 都很慢,不过 AutoDL 提供了阿里云盘的文件复制
从控制台进入AutoPanel,点击公网网盘,然后扫码登录就可以从你的网盘直接下载了
环境
服务器自带了 conda 环境,不需要重复安装
Git clone PaddleSpeech
首先随便找个目录,这里用 root 目录
cd ~
clone 仓库
git clone https://github.com/PaddlePaddle/PaddleSpeech.git
有时候会由于网络问题无法 clone 仓库,可以手动下载压缩包并通过 FTP 上传到服务器,然后解压
unzip filename.zip -d /root/PaddleSpeech
# 通过这种方式下载并解压的文件可能目录名称会带上版本号
# 可以先在本机解压一次修改名称再压缩上传,确保与clone形式一致
# 当然目录名称不影响任何操作,只要清楚“项目根目录”在哪即可
C++编译环境
根据系统选择安装命令:
# centos
sudo yum install gcc gcc-c++
# ubuntu
sudo apt install build-essential
Conda 环境
# 初始化 conda
conda init
# 激活 conda
bash
# 创建新环境: asr是自定义的环境名称
conda create -n asr python=3.8
# 激活新建的环境
conda activate asr
# 安装 paddlespeech 的 conda 依赖
conda install -y -c conda-forge sox libsndfile swig bzip2
CUDA & cuDNN
我使用的服务器镜像自带了 CUDA 11.2,而cuDNN是 8.1 且没有 lib 文件
安装 PaddlePaddle 时会看到 python 依赖库中 cuDNN 的版本,所以要先装 PaddlePaddle 然后再装 cuDNN
首先是安装 PaddlePaddle,在官网根据操作系统等选择合适的安装方式,然后复制命令执行。
需要注意的是:由于 2.5.1 的版本中 numpy 的语法冲突我没办法解决,所以我使用了 2.4.1
conda install paddlepaddle-gpu==2.4.1 cudatoolkit=11.2 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge
安装 PaddleSpeech
进入 PaddleSpeech 项目的根目录,如果是 clone 下来的,那么是
/root/PaddleSpeech
pip install pytest-runner -i https://pypi.tuna.tsinghua.edu.cn/simple # 请确保目前处于PaddleSpeech项目的根目录 pip install . -i https://pypi.tuna.tsinghua.edu.cn/simple
安装 cuDnn
# 查看cuDnn依赖版本 conda list
找到对应的cuDNN版本,这里使用的是 v8.2.1
下载 cuDNN Library for Linux (x86_64),通过 FTP 或阿里云盘上传到服务器
# 解压 tar -zxvf filename.tgz # 解压后产生 cuda 目录: # lib64 - cuDNN 库文件 # include - cuDNN 库头文件 # 复制他们到 CUDA 目录 sudo cp cuda/lib64/* /usr/local/cuda/lib64 sudo cp cuda/include/* /usr/local/cuda/include
还是在刚才的 cuDNN 网页,下载以下文件并上传到服务器
- cuDNN Runtime Library for Ubuntu18.04 x86_64 (Deb)
- cuDNN Developer Library for Ubuntu18.04 x86_64 (Deb)
之后依次安装
sudo dpkg -i libcudnn8_8.1.1.33-1+cuda11.2_amd64.deb sudo dpkg -i libcudnn8-dev_8.1.1.33-1+cuda11.2_amd64.deb
Numpy
运行训练脚本时,可能会出现 numpy 的语法报错,需要将版本降为 1.23
pip uninstall numpy
pip install numpy==1.23
这一步之后会有一个 protobuf 的依赖报错,根据提示调整版本:
pip install protobuf==3.20.0
这之后还有依赖报错,直接不管,因为我没管,然后训练跑起来了,能跑就行
数据集
数据集使用了 Aishell 的公开数据集,有 15 G,建议直接走阿里云盘
有 3 个镜像下载地址,选个最快的下就行
上传到服务器后,移动到根目录下的dataset/aishell
目录
mv data_aishell.tgz /root/PaddleSpeech/dataset/aishell
训练
# 进入 asr 的 aishell example 目录
cd /root/PaddleSpeech/examples/aishell/asr0
# 修改脚本
vim run.sh
# gpus是你要用的gpu索引,可以使用nvidia-smi查看,只有一个GPU写0就可以
# avg_num是最后保留的最优数量,写1
# conf_path是训练配置,如果需要websock的流式传输,需要改为online的配置
# 修改完配置后,执行数据集初始化
bash run.sh --stage 0 --stop_stage 0
# 初始化成功后,训练并测试模型
bash run.sh --stage 1 --stop_stage 3
# 训练完成后,导出模型
bash run.sh --stage 4 --stop_stage 5
# 单个音频文件测试
bash run.sh --stage 6 --stop_stage 6
# 以上的步骤也可以合并执行
bash run.sh