基于昇腾 910B NPU 部署 SenseVoiceSmall 语音识别服务
·
基于昇腾 910B NPU 部署 SenseVoiceSmall 语音识别服务
本文记录在昇腾(Ascend)NPU 环境下,基于 Docker 部署 SenseVoiceSmall 语音识别模型的完整过程,包括 HTTP 接口服务启动、WebSocket 流式服务部署及测试。
一、模型准备
模型下载地址:
本地模型路径:
/data/nvme0/models/SenseVoiceSmall
二、启动 Docker 容器
export IMAGE=quay.io/ascend/vllm-ascend:v0.23.0.post1-openeuler
docker run \
--name SenseVoiceSmall \
--shm-size=12g \
--net host \
--device /dev/davinci6 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64 \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /root/.cache:/root/.cache \
-v /data:/data \
-it -d $IMAGE bash
进入容器后安装依赖:
pip install -U funasr
yum install -y ffmpeg
三、启动 HTTP 识别服务
funasr-server --host 0.0.0.0 --port 8005 \
--model-path /data/nvme0/models/SenseVoiceSmall \
--device npu
服务启动后会在 8005 端口提供 OpenAI 兼容的音频转写接口。
接口测试
1. 下载测试音频:
curl -L https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/BAC009S0764W0121.wav -o sample.wav
2. 调用识别接口:
curl http://<服务器IP>:8005/v1/audio/transcriptions \
-F "file=@sample.wav" \
-F "model=sensevoice"
返回结果:
{"text":"甚至出现交易几乎停滞的情况"}
四、WebSocket 流式服务部署
1. 下载源码
wget https://codeload.github.com/modelscope/FunASR/zip/refs/tags/v1.4.16
上传服务器后解压,并安装依赖:
cd FunASR-1.4.16
cd runtime/python/websocket/
pip install -r requirements_server.txt
2. 启动 WebSocket 服务
__MODEL__
nohup python funasr_wss_server.py \
--port 8006 \
--device npu \
--asr_model /data/nvme0/models/SenseVoiceSmall \
> log.out 2>&1 &
服务启动后会自动加载以下 5 个模型:
| 序号 | 模型 | 作用 |
|---|---|---|
| 1 | speech_seaco_paraformer_large | SeACo-Paraformer,带热词功能的离线识别模型。2pass 模式下作为离线纠错模型,一句话结束后重新识别整句音频,利用热词增强输出更准确的最终文本(即日志中 offline final text 的来源)。 |
| 2 | speech_paraformer-large-online | Paraformer-Online,流式识别模型。在音频传输过程中逐块实时输出文字,实现"边说边出字"效果(online 开头的中间结果由此产生)。 |
| 3 | speech_fsmn_vad | FSMN-VAD,语音端点检测模型。检测音频中有效语音的起止时间点,切分语音、过滤静音片段,只把有人声的部分送给识别模型,降低无效计算。 |
| 4 | punc_ct-transformer | CT-Transformer,实时标点恢复模型。为识别出的文本添加标点,专为流式场景优化,在 VAD 检测到静音时被调用,为历史文本补充标点。 |
| 5 | speech_campplus_sv_zh-cn_16k-common | CAM++,说话人声纹识别模型。提取说话人特征向量(embedding),在会议等场景中用于说话人分离,不输出文字或姓名。 |
3. 客户端测试
python funasr_wss_client.py \
--host 127.0.0.1 \
--port 8006 \
--mode 2pass \
--chunk_size "8,8,4" \
--audio_in ../../funasr_api/asr_example.wav
运行结果:
Namespace(host='127.0.0.1', port=8006, chunk_size=[8, 8, 4],
encoder_chunk_look_back=4, decoder_chunk_look_back=0,
chunk_interval=10, hotword='',
audio_in='../../funasr_api/asr_example.wav', audio_fs=16000,
send_without_sleep=False, thread_num=1, words_max_print=10000,
output_dir=None, ssl=1, use_itn=1, mode='2pass',
result_timeout=300.0, log_dir='./asr_logs', log_flush_every=1)
connect to wss://127.0.0.1:8006
hotword
[LATENCY] wav=demo, mode=2pass-online, from_last_chunk=4.8 ms, from_first_chunk=1551.4 ms
pid0_0: 欢
pid0_0: 欢迎大
pid0_0: 欢迎大家来体
pid0_0: 欢迎大家来体验达
pid0_0: 欢迎大家来体验达摩院
pid0_0: 欢迎大家来体验达摩院推出
pid0_0: 欢迎大家来体验达摩院推出的语
pid0_0: 欢迎大家来体验达摩院推出的语音识
pid0_0: 欢迎大家来体验达摩院推出的语音识别模
pid0_0: 欢迎大家来体验达摩院推出的语音识别模型 [spk=unknown score=0.000]
从日志中可以看到流式识别的全过程:随着音频逐块送入,模型实时返回中间结果,并在句末输出最终文本。
五、总结
- HTTP 模式(
funasr-server):适合一次性短音频的离线转写,接口简单易集成。 - WebSocket 模式(
funasr_wss_server.py):适合实时语音流场景,支持 2pass 模式(流式 + 离线纠错),可同时输出中间结果和最终结果。 - 借助昇腾 NPU +
vllm-ascend镜像,整个推理过程均在 NPU 上完成,部署流程与 GPU 版本基本一致。
本文环境:
vllm-ascend:v0.23.0.post1-openeuler镜像 + 昇腾 NPU 卡(设备 单卡910B)。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)