FunASR SenseVoiceSmall 在爱芯 NPU 上的部署包,支持
AX650N / AX630C / AX620Q 三芯。
官方模型仓库:
https://github.com/FunAudioLLM/SenseVoice
1 sudo apt-get install libsndfile-dev
2 cd python
3 pip install -r requirements.txt
1 cd python
2 # AX650N
3 python3 main.py -i .. /example/zh.mp3 --chip ax650
4 # AX630C
5 python3 main.py -i .. /example/zh.mp3 --chip ax630c
6 # AX620Q(AXera Pi Zero)
7 python3 main.py -i .. /example/zh.mp3 --chip ax620q
RTF: 0.04386647134764582 Latency: 0.2463541030883789s Total length: 5.616s
ASR result: 开饭时间早上九点至下午五点
RTF: 0.036785734138361184 Latency: 0.2639744281768799s Total length: 7.176s
ASR result: the tribal chieftain called for the boy and presented him with fifty pieces of gold
1 cd python
2 python3 main.py -i .. /example/zh.mp3 --chip ax650 --streaming
3 python3 main.py -i .. /example/zh.mp3 --chip ax630c --streaming
4 python3 main.py -i .. /example/zh.mp3 --chip ax620q --streaming
{'timestamps': [540], 'text': '开'}
{'timestamps': [540, 780, 1080], 'text': '开放时'}
{'timestamps': [540, 780, 1080, 1260, 1740], 'text': '开放时间早'}
{'timestamps': [540, 780, 1080, 1260, 1740, 1920, 2340], 'text': '开放时间早上9'}
{'timestamps': [540, 780, 1080, 1260, 1740, 1920, 2340, 2640], 'text': '开放时间早上9点'}
{'timestamps': [540, 780, 1080, 1260, 1740, 1920, 2340, 2640, 3060], 'text': '开放时间早上9点至'}
{'timestamps': [540, 780, 1080, 1260, 1740, 1920, 2340, 2640, 3060, 3780, 4020], 'text': '开放时间早上9点至下午'}
{'timestamps': [540, 780, 1080, 1260, 1740, 1920, 2340, 2640, 3060, 3780, 4020, 4440, 4620], 'text': '开放时间早上9点至下午五点'}
RTF: 0.03678379235444246
1 cd python
2 python3 gradio_demo.py
1 # AX650N
2 ./cpp/ax650/test_sensevoice -a example/zh.mp3 -t sensevoice -p models/sensevoice_ax650
3 # AX630C
4 ./cpp/ax630c/test_sensevoice -a example/zh.mp3 -t sensevoice -p models/sensevoice_ax630c
5 # AX620Q(AXera Pi Zero,arm uclibc)
6 export LD_LIBRARY_PATH = /opt/lib: $LD_LIBRARY_PATH
7 ./cpp/ax620q/test_sensevoice -a example/zh.mp3 -t sensevoice -p models/sensevoice_ax620q
Init asr: sensevoice success, take 0.6930seconds
Result: 开饭时间早上9点至下午5点。
RTF(0.60 / 5.62) = 0.1072
1 # 命令行演示:-s 流式模式(100ms 步长喂音频,打印增量结果)
2 ./cpp/ax650/test_sensevoice -a example/zh.mp3 -t sensevoice -p models/sensevoice_ax650 -s
3 ./cpp/ax630c/test_sensevoice -a example/zh.mp3 -t sensevoice -p models/sensevoice_ax630c -s
4 ./cpp/ax620q/test_sensevoice -a example/zh.mp3 -t sensevoice -p models/sensevoice_ax620q -s
[ 5.30s] 开放时间早上嗯九点至下
[ 5.40s] 开放时间早上嗯九点至下
[ 5.50s] 开放时间早上嗯九点至下
[ 5.60s] 开放时间早上嗯九点至下
[FINAL] 开放时间早上嗯九点至下午五点
RTF(0.43 / 5.62) = 0.0759
1 AX_ASR_StreamInit ( handle ) ; // 初始化流式状态
2 AX_ASR_StreamFeed ( handle , pcm , n , 16000 ) ; // 喂音频(float [-1,1],16k)
3 AX_ASR_StreamResult ( handle , & text ) ; // 获取当前增量结果
4 AX_ASR_StreamFinish ( handle ) ; // 喂完后收尾刷新
源码在
Github main 分支
(SenseVoice LFR 前端修复与 AX620Q 构建修复已合入 main,
PR #10 )。
流式专用模型的增量缓存等改动见
ml-inory/sensevoice.axera
的
cpp/ax_asr_api_streaming.patch。
RTF = 推理耗时 / 音频时长。非流式每次推理对应 256 帧 chunk(2.56 s 音频);流式每 10 帧推一次(对应 0.1 s 音频)。
数据为 ax_run_model 纯 NPU 实测(warmup=3, repeat=20):
测量说明:AX650N 测于 AX650N 板;AX630C / AX620Q 测于 AX630C 板(两者为同一 NPU2 满核模型;
AX620Q 因频率与 DDR 带宽较低,实机延迟会比上表 AX630C 板实测略高,待真实 AX620Q 板补充)。
1 ./download_datasets.sh
2 cd python
3 python test_wer.py -d aishell -g datasets/ground_truth.txt --language zh