前言
在语音识别领域,Whisper 模型因其出色的性能和灵活性备受关注。为了在更多平台和环境中部署 Whisper 模型,导出为 ONNX 格式是一个有效的途径。ONNX(Open Neural Network Exchange)是一个开放格式,支持不同的深度学习框架之间的模型互操作性。本指南将详细介绍如何将 Whisper 模型导出为 ONNX 格式,并提供测试模型的步骤。
本节描述了如何将 Whisper 模型导出为 ONNX 格式。
可用模型
请注意,我们已经将 Whisper 模型导出为 ONNX 格式,它们可以从以下 Huggingface 仓库中获取:
模型类型 Huggingface 仓库链接 tiny.en 链接 base.en 链接 small.en 链接 distil-small.en 链接 medium.en 链接 distil-medium.en 链接 tiny 链接 base 链接 small 链接 medium 链接提示:你也可以从 此处 下载它们。
如果你想自己导出模型或了解模型的导出过程,请继续阅读下文。
导出为 ONNX
我们使用 export-onnx.py 来导出 Whisper 模型到 ONNX。
首先,让我们安装依赖并下载导出脚本:
pip install torch openai-whisper onnxruntime onnx
git clone https://github.com/k2-fsa/sherpa-onnx/
cd sherpa-onnx/scripts/whisper
python3 ./export-onnx.py --help
它将打印以下信息:
usage: export-onnx.py [-h] --model {tiny,tiny.en,base,base.en,small,small.en,medium,medium.en,large,large-v1,large-v2}
optional arguments:
-h, --help show this help message and exit
--model {tiny,tiny.en,base,base.en,small,small.en,medium,medium.en,large,large-v1,large-v2}
要导出 tiny.en
模型,我们可以使用:
python3 ./export-onnx.py --model tiny.en
它将生成以下文件:
(py38) fangjuns-MacBook-Pro:whisper fangjun$ ls -lh tiny.en-*
-rw-r--r-- 1 fangjun staff 105M Aug 7 15:43 tiny.en-decoder.int8.onnx
-rw-r--r-- 1 fangjun staff 185M Aug 7 15:43 tiny.en-decoder.onnx
-rw-r--r-- 1 fangjun staff 12M Aug 7 15:43 tiny.en-encoder.int8.onnx
-rw-r--r-- 1 fangjun staff 36M Aug 7 15:43 tiny.en-encoder.onnx
-rw-r--r-- 1 fangjun staff 816K Aug 7 15:43 tiny.en-tokens.txt
tiny.en-encoder.onnx
是编码器模型,tiny.en-decoder.onnx
是解码器模型。
tiny.en-encoder.int8.onnx
是量化的编码器模型,tiny.en-decoder.int8.onnx
是量化的解码器模型。
tiny.en-tokens.txt
包含了令牌表,它将整数映射到令牌和反之。
要将导出的 ONNX 模型转换为 ONNX Runtime 格式,我们可以使用:
python3 -m onnxruntime.tools.convert_onnx_models_to_ort --optimization_style=Fixed ./
到目前为止,生成的文件如下:
(py38) fangjuns-MacBook-Pro:whisper fangjun$ ls -lh tiny.en-*
-rw-r--r-- 1 fangjun staff 105M Aug 7 15:43 tiny.en-decoder.int8.onnx
-rw-r--r-- 1 fangjun staff 185M Aug 7 15:43 tiny.en-decoder.onnx
-rw-r--r-- 1 fangjun staff 12M Aug 7 15:43 tiny.en-encoder.int8.onnx
-rw-r--r-- 1 fangjun staff 36M Aug 7 15:43 tiny.en-encoder.onnx
-rw-r--r-- 1 fangjun staff 816K Aug 7 15:43 tiny.en-tokens.txt
要检查导出的模型是否工作正常,我们可以使用 test.py。
我们使用 此测试音频。
pip install kaldi-native-fbank
wget https://huggingface.co/csukuangfj/sherpa-onnx-whisper-tiny.en/resolve/main/test_wavs/0.wav
python3 ./test.py \
--encoder ./tiny.en-encoder.onnx \
--decoder ./tiny.en-decoder.onnx \
--tokens ./tiny.en-tokens.txt \
./0.wav
要测试 int8 量化模型,我们可以使用:
python3 ./test.py \
--encoder ./tiny.en-encoder.int8.onnx \
--decoder ./tiny.en-decoder.int8.onnx \
--tokens ./tiny.en-tokens.txt \
./0.wav
希望这篇博客能帮助你顺利导出并测试 Whisper ONNX 模型。如果你有任何问题,请随时在评论区留言。
总结
### 文章总结:如何将Whisper模型导出为ONNX格式#### 前言
在语音识别领域,Whisper 模型因其优异的性能和灵活性而备受关注。为在多种平台和环境中部署该模型,将其导出为ONNX(Open Neural Network Exchange)格式是一种有效方式。ONNX是一种开放格式,支持不同深度学习框架间的模型互操作性。本指南旨在指导用户将Whisper模型导出为ONNX格式,并提供模型测试步骤。
#### 可用模型
已提供多种预导出的Whisper ONNX模型,可直接从Huggingface仓库中获取,包括不同规模和语言的版本。同时,如果用户希望自行导出模型或了解导出过程,可以继续阅读以下步骤。
#### 导出为ONNX
1. **安装必要的库和脚本**:通过`pip`安装PyTorch、OpenAI Whisper、ONNX Runtime和ONNX,并克隆`sherpa-onnx`仓库中的`export-onnx.py`脚本。
2. **使用脚本导出模型**:运行`export-onnx.py`脚本,并选择所需的模型类型(如`tiny.en`)进行导出。此步骤将生成编码器和解码器的ONNX文件,以及一个包含令牌映射表的文本文件。
3. **可选的量化步骤**:生成的模型同时包括标准版本和量化(int8)版本,其中量化版本的模型大小更小,适合对延迟敏感的应用。
4. **转换为ONNX Runtime格式**(如果需要):可使用ONNX Runtime提供的工具将模型进一步优化为ONNX Runtime的专属格式。
#### 测试导出的模型
使用提供的`test.py`脚本和一段测试音频,测试导出的ONNX模型在编码器和解码器协同工作下的性能。若运行正常,将输出相应的语音识别结果。同时,也支持测试量化后的模型。
#### 总结
本文详细介绍了如何将Whisper模型导出为ONNX格式,并提供了预导出的模型下载链接与自行导出、测试模型的具体步骤。旨在帮助用户在不同平台和环境中便利地部署和优化Whisper模型。如有任何问题,欢迎随时交流。