WeNet环境配置与aishell实践

WeNet环境配置与aishell模型训练

1环境配置

踩坑记录: 系统使用win11,我根据wenet官方文档,使用conda虚拟环境安装了cuda12.1,安装wenet依赖库,其中deepspeed报错,根据报错信息查询github,发现缺少libaio库,它通常在Linux系统上使用,根据githubu找到解决办法,重新编译了deepspeed,成功安装依赖。分析和运行wenet时发现,仍然有很多报错。随后我尝试在本机VMware+ubuntu22.04,wenet在不进行跑数据的情况下没有问题,开始数据测试后,发现VMware基于主机的显卡虚拟映射出了一个供uhuntu系统使用的显卡,这个显卡没有合适的驱动。随后查询到一个解决办法,显卡直连,尝试好几种博主的方法,均失败告终。

解决方法: 已老实,求放过,使用带GPU的服务器,本文服务器使用ubuntu22.04

1.1安装Miniconda

#下载
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py310_24.5.0-0-Linux-x86_64.sh
#安装:根据提示输入enter或yes
bash Miniconda3-py38_4.9.2-Linux-x86_64.sh
#验证:重启终端(必须),运行下方命令,显示版本号则安装成功
conda --version

1.2更换清华源

#在用户目录(/home/xxx)下新建.condarc文件
touch .condarc
#用vim打开.condarc文件,写入下方内容保存后退出
channels:
  - defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
 #清除索引缓存
 conda clean -i
 #配置完毕,执行以下命令查看是否已经换源,可以看到已经更换为清华源了
 conda config --show

1.3在服务器中安装CUDA

踩坑记录:在此之前,我一直尝试的是在虚拟环境中使用conda install进行安装cudatoolkit,如果你使用的cuda版本过高,则无法使用清华源(最高11.8.0),初次尝试使用的cudatoolkit-11.3.1,安装完成后,使用nvcc -v不能显示cuda版本,使用conda list不能显示cudatoolkit,使用conda list cuda可以显示,查阅博客,没有找到答案。于是忽略此条继续配置,根绝conda search cudnn查看对应版本cudnn,随之conda install cudnn=8.2.1安装完成。随后使用conda install pytorch1.12.1 torchvision0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch安装成功,随后进行相关python代码验证,均失败,conda list发现没有torch。于是忽略此条继续配置,随后根据requirements.txt进行pip,出现大量不兼容情况,主要是torch版本引起的,版本过高,因为官方文档使用的是cuda12.1对应的torch>=2.1.2。我降低torch版本,使其兼容。此时再次进行python代码验证均失败。

解决方法: 采用在base环境中安装cuda,配置环境变量,即可使用nvcc。在虚拟环境中继续后续的配置,我在base环境中安装了cuda11.3和cuda12.1,wenet代码均可运行。使用cuda11.3,安装conda install pytorch1.12.1 torchvision0.13.1 torchaudio0.12.1 cudatoolkit=11.3 -c pytorch,随后使用requirements.txt进行pip时,注意torch2.1.2和torchaudio==2.1.2版本即可(已老实,求放过,这个方法我个人认为不是很完美,但是它让我的代码成功运行了起来

本文采用wenet官方文档推荐的CUDA12.1

其他版本的CUDA配置方法可查看:CUDA and cuDNN — k2 1.24.4 documentation (k2-fsa.github.io)

#下载CUDA12.1 官方地址:https://developer.nvidia.com/cuda-toolkit-archive
wget https://developer.download.nvidia.com/compute/cuda/12.2.1/local_installers/cuda_12.2.1_535.86.10_linux.run
#安装,此处采用静默模式安装,交互模式可参考:https://blog.youkuaiyun.com/qq_46699596/article/details/134552021
sh ./cuda_12.1.1_530.30.02_linux.run \
  --silent \
  --toolkit \
  --installpath=/s6home/lnj524/module/cuda/cuda-12.1 \
  --no-opengl-libs \
  --no-drm \
  --no-man-page
#./cuda_12.1.1_530.30.02_linux.run:CUDA 12.1.1 的安装程序文件。
#--silent:以静默模式安装,不需要用户交互。
#--toolkit:只安装 CUDA Toolkit,而不安装其他组件(如驱动程序等)。
#--installpath=/home/xxx/module/cuda/cuda-12.1:指定安装路径。
#--no-opengl-libs:不安装 OpenGL 库。
#--no-drm:不安装 Direct Rendering Manager(DRM)模块。DRM 模块用于图形硬件加速的直接渲染。
#--no-man-page:不安装手册页。
#添加环境变量
vim ~/.bashrc
#将下方内容写入.bashrc 
export CUDA_HOME=/s6home/lnj524/module/cuda/cuda-12.1
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$CUDA_HOME/extras/CUPTI/lib64:$LD_LIBRARY_PATH
export CUDAToolkit_ROOT_DIR=$CUDA_HOME
export CUDAToolkit_ROOT=$CUDA_HOME

export CUDA_TOOLKIT_ROOT_DIR=$CUDA_HOME
export CUDA_TOOLKIT_ROOT=$CUDA_HOME
export CUDA_BIN_PATH=$CUDA_HOME
export CUDA_PATH=$CUDA_HOME
export CUDA_INC_PATH=$CUDA_HOME/targets/x86_64-linux
export CFLAGS=-I$CUDA_HOME/targets/x86_64-linux/include:$CFLAGS
export CUDAToolkit_TARGET_DIR=$CUDA_HOME/targets/x86_64-linux
#更新用户环境
source ~/.bashrc
#验证
nvcc -V
#到此cuda安装完成
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Mon_Apr__3_17:16:06_PDT_2023
Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0

1.3创建虚拟环境

#创建虚拟环境
conda create -n wenet2.0 python=3.10
#启动虚拟环境
conda activate wenet2.0

1.4在虚拟环境中完成后续安装

#安装conda-forge::sox
conda install conda-forge::sox
#查看cuda对应的cudnn版本
conda search cudnn
#下载cudnn
conda install cudann=8.9.2.26
#配置pip清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
#查看pip源
pip config list
global.index-url='https://pypi.tuna.tsinghua.edu.cn/simple'
#安装torch和torchaudio,清华源中没有找个包,只能从官网下载,静静等待。
pip install torch==2.2.2+cu121 torchaudio==2.2.2+cu121 -f https://download.pytorch.org/whl/torch_stable.html
#根据requirements.txt安装其他其他依赖
pip install -r requirements.txt
#完成

1.5aishell模型训练

cd /s6home/lnj524/module/wenet/examples/aishell/s0
chmod +x run.sh
./run.sh --stage -1 #采用默认配置从数据集下载到完成模型训练。
./run.sh --stage 4 --stop_stage 4 #执行模型训练

2Wenet文件分析

2.1run.sh

  1. 下载数据(阶段 -1)此步骤将AIShell-1数据集下载到本地路径。这可能需要几个小时。如果已经下载了数据,请在 run.sh 脚本中调整 $data 变量,并从阶段0开始。请确保为 $data 设置绝对路径,例如 /home/username/asr-data/aishell/

  2. 准备训练数据(阶段 0)将原始的AIShell-1数据组织成两个文件:

    • wav.scp:每行包含两列,分别是 wav_idwav_path

    • text:每行包含两列,分别是 wav_idtext_label

  3. 提取可选的CMVN特征(阶段 1)使用原始的WAV文件作为输入。标准化文本标签,去除空格。使用 tools/compute_cmvn_stats.py 提取全局倒谱均值和方差归一化(CMVN)统计信息。

  4. 生成标签令牌字典(阶段 2)创建标签令牌(AIShell-1中的字符)与整数索引之间的映射。字典包括特殊令牌,如 <blank>(用于CTC)、<unk>(未知令牌)和 <sos/eos>(开始/结束语音)。

  5. 准备数据的所需格式(阶段 3)将数据转换为模型训练所需的格式。对于小型数据集,使用原始格式raw;对于大型数据集,使用shard,将数据分片以提高读取和训练速度。

  6. 模型训练(阶段 4)配置并启动模型训练。根据配置,选择使用DeepSpeed或Torch DDP进行分布式训练。这一步包含了设置分布式训练的各种参数,如节点数、每个节点的进程数、训练配置文件等。

  7. 模型评估(阶段 5)使用训练好的模型进行推理和评估,计算WER(Word Error Rate)。如果启用了模型平均,会首先对多个检查点进行平均以得到最终的评估模型。

  8. 导出模型(阶段 6)导出训练好的模型,生成可用于推理的模型文件。这一步通常包括导出标准模型和量化模型,以便在不同的设备和环境中进行高效推理。

  9. 语言模型准备和解码(阶段 7)准备语言模型和解码工具,进行语言模型的训练和解码。这包括生成字典、训练语言模型、编译FST(Finite State Transducer)图并进行解码测试。

  10. 使用HLG图进行解码(阶段 8)使用HLG(HMM-Lexicon-Grammar)图进行解码,以进一步提升模型的解码性能。这一步需要预先准备HLG图并进行推理和评估。

  11. 使用LF-MMI进行训练(阶段 9)使用LF-MMI(Lattice-Free Maximum Mutual Information)进行模型训练,以进一步优化模型性能。这一步包括准备LF-MMI所需的FST图,并在之前的基础上进行进一步的模型训练和评估。

#!/bin/bash

# Copyright 2019 Mobvoi Inc. All Rights Reserved.
. ./path.sh || exit 1;

# 自动检测 GPU 的数量
if command -v 
### 配置 WeNet 语音识别模型的训练环境 在 Linux 系统中配置 WeNet 的训练环境涉及多个步骤,包括安装必要的依赖项、设置开发工具链以及准备数据集。以下是详细的说明: #### 1. 安装基础依赖 为了支持 WeNet 的运行和训练过程,需要先安装一些基本的软件包和库。这些依赖通常可以通过系统的包管理器完成。 ```bash sudo apt update && sudo apt install -y git cmake build-essential sox libsox-dev python3-pip python3-setuptools ``` 上述命令会安装 Git、CMake、编译工具链以及其他 Python 相关的基础组件[^1]。 #### 2. 创建虚拟环境并安装 Python 库 建议使用虚拟环境隔离项目的依赖关系,避免其他项目发生冲突。 ```bash python3 -m venv wenet_env source wenet_env/bin/activate pip install --upgrade pip setuptools wheel ``` 接着,按照官方文档中的推荐,安装 WeNet 及其所需的 Python 包。 ```bash git clone https://github.com/wenet-e2e/wenet.git cd wenet pip install -r requirements.txt ``` 如果遇到 `torch` 或其他深度学习框架版本不匹配的问题,请参考具体错误提示调整兼容版本[^3]。 #### 3. 准备数据集 WeNet 支持多种标准的数据集格式(如 Aishell),但在实际操作前需确保数据已下载至本地目录,并按 Kaldi 格式整理好转录音本、音频路径列表等文件[^4]。 对于自定义数据集的情况,则要遵循类似的结构化处理流程,即生成对应的 `.scp`, `.txt` 文件用于后续脚本解析。 #### 4. 构建 Docker 镜像(可选) 考虑到跨平台一致性问题或者硬件加速的需求,可以利用容器技术简化部署难度。下面展示了一个基于 ONNXRuntime 的构建实例: ```Dockerfile FROM nvidia/cuda:11.7-base-ubuntu20.04 RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \ software-properties-common curl wget unzip ffmpeg vim nano htop tmux git ca-certificates locales && \ rm -rf /var/lib/apt/lists/* WORKDIR /workspace/ COPY . . CMD ["./run.sh"] ``` 通过执行以下指令即可完成镜像制作启动工作: ```bash cd ./docker docker build --no-cache -t wenet_onnxruntime:latest . docker run --shm-size 8g --gpus all -v $(pwd):/workspace -it wenet_onnxruntime:latest bash ``` 这里特别强调的是 GPU 加速选项 (`--gpus`) 对性能提升的重要性[^5]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@李思成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值