模型体积砍到 1/4、CPU 推理速度翻倍:FunASR INT8 量化部署实操手册
2026/9/7 17:11:28 网站建设 项目流程

模型体积砍到 1/4、CPU 推理速度翻倍:FunASR INT8 量化部署实操手册

【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR

体积砍到 1/4,推理时间减半,字错率不变——这是把 FunASR 的 Paraformer-large 量化成 INT8 后的效果。FunASR INT8 量化只要导出时多传一个参数,16 核 CPU 就能扛 96 路并发实时转写。下面是从导出量化模型到验证部署的完整流程。

结论先行:INT8 量化值不值得做?

拿 AISHELL-1 测试集说三件事:

  • 体积:Paraformer-large 从 880MB 降到 237MB,约 1/4
  • 速度:单线程 RTF 0.0777 降到 0.0446;96 并发加速比从 238 提到 452
  • 精度:CER 1.95% → 1.95%,大模型上零损失

一句话结论:CPU 带 avx512_vnni 指令集的机器是纯赚;老机器主要赚体积,别指望单线程提速。

原理 60 秒:quantize_dynamic 是怎么把体积压到 1/4 的?

打个比方:FP32 权重像给每个数留了 32 位小数位,INT8 量化(用 8 位整数近似浮点权重)把它压成 1 位数字加一个每通道的缩放系数,体积自然掉到约 1/4。

具体实现在 funasr/utils/export_utils.py:导出 ONNX 后调用 onnxruntime 的quantize_dynamic,只量化 MatMul(矩阵乘,模型里占计算大头的部分)权重,逐通道(per-channel)自动算缩放系数,并且显式跳过outputbias_encoderbias_decoder这几个敏感节点,防止精度掉链子。还有一个好处:动态量化不需要校准数据集,不用先攒几百条录音,导出即用。

动手实操四步走:从下载依赖到验证输出 🔧

第 1 步|下载 onnxruntime 与 ffmpeg,装好 Python 依赖

这一步在干什么:拿齐编译 C++ 引擎的两个依赖包,并安装模型导出、ONNX 推理需要的 Python 库。

wget https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/dep_libs/onnxruntime-linux-x64-1.14.0.tgz tar -zxvf onnxruntime-linux-x64-1.14.0.tgz wget https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/dep_libs/ffmpeg-master-latest-linux64-gpl-shared.tar.xz tar -xvf ffmpeg-master-latest-linux64-gpl-shared.tar.xz sudo apt-get install libopenblas-dev libssl-dev pip install -U modelscope funasr onnx onnxruntime funasr-onnx

如何确认成功:python -c "import onnxruntime; print(onnxruntime.__version__)"能打印版本号,两个压缩包解压出onnxruntime-linux-x64-1.14.0和 ffmpeg 目录。

第 2 步|编译支持 INT8 的 C++ 推理引擎

这一步在干什么:用 CMake 构建 FunASR 仓库里的 ONNX 推理引擎(源码见 runtime/onnxruntime/),它原生支持加载 INT8 量化模型。

git clone https://gitcode.com/GitHub_Trending/fun/FunASR cd FunASR/runtime/onnxruntime && mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=release .. \ -DONNXRUNTIME_DIR=/path/to/onnxruntime-linux-x64-1.14.0 \ -DFFMPEG_DIR=/path/to/ffmpeg-master-latest-linux64-gpl-shared make -j4

如何确认成功:build/bin下出现可执行文件,编译日志无红色报错。

第 3 步|一条命令导出 ONNX 并完成 INT8 量化

这一步在干什么:加载 Paraformer-large 的 PyTorch 模型,导出 ONNX 并顺手做 INT8 量化。

from funasr import AutoModel model = AutoModel(model="iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch") model.export(type="onnx", quantize=True)

如何确认成功:控制台打印 "Quantizing model from ... to ...",模型目录里同时出现model.onnxmodel_quant.onnx

第 4 步|加载量化模型,验证识别与速度

这一步在干什么:用 ONNX Python 客户端(funasr-onnx包)指定quantize=True加载model_quant.onnx,跑一条样例音频确认结果正常。

from funasr_onnx import Paraformer model = Paraformer( "damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch", quantize=True, ) print(model(["asr_example.wav"]))

如何确认成功:打印出正常转写文本,且与quantize=False的结果一致;对比两个模型的加载体积,量化版应小约 3.7 倍。

实测数据看板:CPU 上到底快多少?

以下数据来自 runtime/docs/benchmark_onnx.md 的 AISHELL-1 测试集实测(音频总长 36108 秒),CPU 为 Intel Xeon 8369B(16 核 32 线程,带 avx512_vnni)。

体积与精度:

模型FP32 体积INT8 体积缩减量化前 CER量化后 CER
Paraformer-large880MB237MB3.7 倍1.95%1.95%
Paraformer275MB81MB3.4 倍3.73%3.78%

并发吞吐(8369B,带 vnni):

并发数FP32 RTFINT8 RTF提速
10.07770.04461.7 倍
160.00800.00322.5 倍
320.00460.00241.9 倍
960.00420.00221.9 倍

这个数字意味着什么:96 路并发下 INT8 的 RTF 是 0.0022,处理 1 秒音频只要 2 毫秒,同一台机器相当于白捡一倍机器数。反面教材是 8163 这类没有 vnni 的 CPU:单线程 RTF 几乎没变(0.0820→0.0778),高并发也只提升 15%~20%——提速高度依赖 CPU 指令集。

落地选型:3 条建议避开常见坑

  1. 先看指令集再决定要不要量化:跑lscpu | grep -i avx512,有avx512_vnni才是"提速+减体积"双收;没有的话 INT8 主要赚体积,单线程提速预期应该归零,别拿 96 并发的数字做预算。
  2. 别动节点排除名单:量化逻辑只处理 MatMul、跳过输出层和 bias 节点,因为输出层最容易先掉精度。想自己扩展量化节点,先拿小数据集对比 CER 再上线。
  3. 并发服务直接上量化模型:C++ 引擎加载model_quant.onnx后,单机内存能省下 600MB 以上,多路并发场景下吞吐还有近 2 倍余量;部署流程参考 runtime/quick_start_zh.md。

下一步行动清单:

  • lscpu确认本机是否支持 avx512_vnni,决定量化目标
  • 抽 1000 句真实业务音频,分别跑quantize=True/False对比 CER
  • 确认无误后把服务里的 FP32 模型换成model_quant.onnx,保留 FP32 模型兜底

延伸资源

  • funasr/utils/export_utils.py — INT8 量化导出源码
  • runtime/python/onnxruntime/README.md — ONNX Python 推理用法
  • runtime/docs/benchmark_onnx.md — CPU 基准完整数据
  • runtime/onnxruntime/readme.md — C++ 引擎编译说明
  • runtime/quick_start_zh.md — 服务部署快速上手

【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询