当前位置:AIGC资讯 > AIGC > 正文

rk3588使用npu加速运行whisper语音识别模型

rk3588运行whisper模型有三种方法:1.使用纯cpu运行原始pytorch模型;2.将whisper模型转成onnx格式,再转成rknn格式使用npu运行;3.利用npu提供的矩阵运算功能,结合cpu一起运行原始pytorch模型。方法1做不到实时,方法2有rockchip官方仓库。方法3是这篇教程介绍的,方法3比方法2更快,同时功能更完整,比如tiny和small模型都可以运行。
我们在https://github.com/usefulsensors/useful-transformers基础上,通过修复bug,增加运行参数和prompt控制输出字体格式,实现了多语言模型的实时准确推理,whisper tiny和base模型rtf<0.1, small模型rtf<0.5。

一、优化修改后的开源代码库

whisper: https://git.bwbot.org/publish/useful-transformers

二、代码运行说明

通过 git clone 克隆代码后,准备好 Python 环境,然后执行 transcrible_wav.py完成语音识别。

克隆源代码:
git clone http://git.bwbot.org/publish/useful-transformers.git
准备python运行环境:
我们在 RK3588 上使用的是 Ubuntu22.04 Desktop,默认的 Python 版本是 3.10。为了避免破坏系统环境,我们使用 virtualenv 来配置需要的 Python 运行环境。
sudo apt install python3-virtualenv

#进入上面git clone下来的文件夹根目录
cd useful-transformers

#创建虚拟环境
virtualenv --system-site-packages -p /usr/bin/python3 venv

#激活虚拟环境
source venv/bin/activate

#开始在虚拟环境中安装pybind11
pip install -i https://mirror.baidu.com/pypi/simple pybind11

#在虚拟环境中编译安装useful-transformers包,注意指令中的文件路径要改成自己的实际路径
export pybind11_DIR=/home/xiaoqiang/npu/useful-transformers/venv/lib/python3.10/site-packages/pybind11/share/cmake/pybind11
./venv/bin/pip install  ../useful-transformers  -i https://pypi.mirrors.ustc.edu.cn/simple

3.环境配置完成,开始运行whisper:

taskset -c 4-7 ./venv/bin/python -m useful_transformers.transcribe_wav ./wav/chinese.wav tiny zh

运行指令格式如下,modelname可以为tiny、base、small、tiny.en、base.en、small.en或者自己微调的模型。languge可以为en或zh,分别代表英文和中文。

taskset -c 4-7 python -m useful_transformers.transcribe_wav <wav_file> modelname languge

自己微调的模型可以用torch_state_dict_to_npz.py 文件来转换。

三、运行结果

总结

### 总结文章:
**标题:在RK3588上优化并运行Whisper模型**
**一、引言**
本文介绍了在RK3588平台上运行Whisper语音模型的三种方法,包括:
1. **纯CPU运行PyTorch模型**:适应性有限,无法实时处理。
2. **模型转换法(ONNX -> RKNN)**:利用Rockchip官方支持,通过NPU实现高效处理,但功能可能受限。
3. **CPU+NPU协作运行**:结合NPU的矩阵运算优化与CPU通用处理能力,实现更快速更完整的功能,支持tiny、small等多种模型。
本文重点介绍了通过优化和修改的开源代码库(基于`useful-transformers`),实现了Whisper多语言模型的实时准确推理,显著提高了tiny和base模型的响应时间(RTF<0.1),small模型也达到RTF<0.5的良好表现。
**二、优化后的代码库**
- **代码库地址**:[https://git.bwbot.org/publish/useful-transformers](https://git.bwbot.org/publish/useful-transformers)
- **优化内容**:修复bug、增加运行参数和prompt控制输出字体格式,增强多语言模型的支持。
**三、代码运行步骤**
1. **克隆代码库**
使用`git clone`命令从指定链接下载优化后的代码。
```bash
git clone http://git.bwbot.org/publish/useful-transformers.git
```
2. **准备Python环境**
使用Ubuntu 22.04 Desktop系统,Python 3.10版本,通过`virtualenv`创建隔离环境以安装依赖,确保系统和开发环境分离。
```bash
sudo apt install python3-virtualenv
#后续步骤包括创建虚拟环境、激活虚拟环境、安装pybind11及编译安装useful-transformers包。
```
3. **运行Whisper**
执行特定Python脚本来进行语音识别,可指定不同的模型和语言。
```bash
taskset -c 4-7 ./venv/bin/python -m useful_transformers.transcribe_wav ./wav/chinese.wav tiny zh
```
上述命令中使用`taskset`绑定特定CPU核以优化性能。
4. **扩展使用**
支持自定义微调模型,可使用`torch_state_dict_to_npz.py`文件进行转换以便在环境中运行。
**四、运行结果**
通过优化的代码和恰当地配置环境,能够实现高效、实时且准确的多语言语音识别,满足不同应用场景的需求。
**总结**:
本文为在RK3588硬件平台上高效运行Whisper语音模型提供了详细指导,通过代码优化和恰当配置,极大地提高了模型的实时性和处理能力。

更新时间 2024-09-16