导出 Whisper 模型到 ONNX

前言

在语音识别领域,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。

首先,让我们安装依赖并下载导出脚本:

bash 复制代码
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

它将打印以下信息:

plaintext 复制代码
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 模型,我们可以使用:

bash 复制代码
python3 ./export-onnx.py --model tiny.en

它将生成以下文件:

plaintext 复制代码
(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 格式,我们可以使用:

bash 复制代码
python3 -m onnxruntime.tools.convert_onnx_models_to_ort --optimization_style=Fixed ./

到目前为止,生成的文件如下:

plaintext 复制代码
(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

我们使用 此测试音频

bash 复制代码
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 量化模型,我们可以使用:

bash 复制代码
python3 ./test.py \
  --encoder ./tiny.en-encoder.int8.onnx \
  --decoder ./tiny.en-decoder.int8.onnx \
  --tokens ./tiny.en-tokens.txt \
  ./0.wav

希望这篇博客能帮助你顺利导出并测试 Whisper ONNX 模型。如果你有任何问题,请随时在评论区留言。

相关推荐
新智元7 小时前
AI 科学家登场!12 小时抵人类科学家半年工作量,已有 7 项大成果
人工智能·openai
新智元7 小时前
PyTorch 之父闪电离职,AI 半壁江山集体致敬!
人工智能·openai
安思派Anspire12 小时前
构建一个自主深度思考的RAG管道以解决复杂查询--分析最终的高质量答案(8)
aigc·openai·agent
程序员小赵同学12 小时前
Spring AI Alibaba语音合成实战:从零开始实现文本转语音功能
人工智能·spring·语音识别
Geo_V1 天前
OpenAI 大模型 API 使用示例
python·chatgpt·openai·大模型应用·llm 开发
新智元1 天前
全球十大AI杀入美股!最新战况曝光,第一名太意外
人工智能·openai
新智元1 天前
ICML 2026史上最严新规:LLM不得列为作者,滥用AI直接退稿
人工智能·openai
力江1 天前
攻克维吾尔语识别的技术实践(多语言智能识别系统)
人工智能·python·自然语言处理·语音识别·unicode·维吾尔语
未来智慧谷2 天前
OpenAI押注的NEO人形机器人:技术拆解与消费级人形机器人落地启示
机器人·openai·人形机器人neo
Moment2 天前
Cursor 2.0 支持模型并发,我用国产 RWKV 模型实现了一模一样的效果 🤩🤩🤩
前端·后端·openai