FunASR SenseVoice 模型 Docker 部署:三步跑通离线语音识别服务
2026/9/7 6:36:05 网站建设 项目流程

FunASR SenseVoice 模型 Docker 部署:三步跑通离线语音识别服务

【免费下载链接】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

FunASR 是开源语音识别工具包,其 SenseVoice 模型提供中、英、日、韩、粤五语的离线转写接口,可同时输出情感与音频事件标签。本文用仓库里自带的现成镜像,把它变成一个 OpenAI 兼容的转写服务,目标是十分钟跑通、十分钟定位问题。

先回答为什么用容器

直接pip install funasr常卡在 CUDA 版本与依赖冲突上;多台机器环境不一致,让"我这边能跑"变成排查黑洞。内网无公网的机器还有离线部署这一硬需求。容器把系统依赖、Python 依赖、启动参数固化成一个镜像,这三类差异同时消失。

部署前对照这张清单

检查项达标线备注
Docker Engine≥ 20.10,docker compose命令直接可用安装方式见 Docker 安装指南
GPU 容器支持--gpus all进容器后能认卡NVIDIA 驱动 + Container Toolkit,纯 CPU 环境可跳过
内存16GB 可用,32GB 更稳推理本身不占大头,模型加载与缓存占
磁盘至少 5GB 空闲含模型权重与/root/.cache缓存
网络首次启动需拉取iic/SenseVoiceSmall离线环境:预导出缓存卷再挂载进容器

三步跑通:镜像、启动、就绪

第一步:构建 FunASR 服务镜像

仓库的 examples/openai_api/ 目录自带 Dockerfile,基于 python:3.10-slim,funasr、fastapi、uvicorn 依赖全部装好,直接构建即可:

cd examples/openai_api cp .env.example .env docker compose up --build

默认按 CPU 模式启动。建议先用这个姿势把冒烟测试跑完,别一开始就和 GPU 问题纠缠。

第二步:启动容器,GPU 与 CPU 两套命令

冒烟通过后再按设备跑正式服务:

docker build -t funasr-api . docker run --rm --gpus all -p 8000:8000 \ -e FUNASR_DEVICE=cuda -e FUNASR_MODEL=sensevoice funasr-api # CPU:去掉 --gpus all,改为 -e FUNASR_DEVICE=cpu

第三步:模型自动下载,服务自动就绪

容器启动后运行server.py,首次会从 ModelScope 拉取iic/SenseVoiceSmall权重到容器内/root/.cache,并预加载 sensevoice 别名。compose 部署默认挂载funasr-cache卷,二次启动不再重复下载;离线机器挂载预先准备好的缓存卷即可。下面命令能返回模型列表,服务即就绪:

curl http://localhost:8000/health

验证一次真实转写,再动手调参

先确认可用,再谈优化:

curl http://localhost:8000/v1/audio/transcriptions \ -F file=@sample.wav -F model=sensevoice

更省事的方式是直接跑仓库自带的 smoke_test,它一次覆盖健康检查与转写请求:

bash smoke_test.sh # 不依赖 curl 的跨平台方式: python smoke_test.py --base-url http://localhost:8000

返回文本符合预期,链路就通了。调优看四个位置:

  • 批处理:SenseVoice 的动态批用batch_size_s按总秒数凑批(示例代码取 60 秒);短音频(<30s)任务直接设batch_size=64更快。显存利用率长期低于 50%,先把批翻倍,再考虑加卡。
  • 量化:CPU 链路可导出 ONNX 并开启quantize=True(INT8),吞吐明显上升,精度差在可接受范围内时优先做。
  • 线程:CPU 推理线程数与物理核数对齐,容器内用nproc核对;top%us + %sy长期低于 50% 时,优先加批而不是加线程。
  • 实时率:SenseVoice 在 GPU 上约 170 倍实时(官方口径)。实测 RTF 明显偏离这个量级,先确认 CUDA 真正生效(nvidia-smi有显存占用为准),再查批大小。

🔍 故障速查:现象 → 排查方向

现象排查方向
启动即报 CUDA 不可用先切FUNASR_DEVICE=cpu确认服务本身能跑,再查 Container Toolkit 是否安装、容器内nvidia-smi是否可用
8000 端口被占用-p 9000:8000--port 9000,冒烟测试同步改BASE_URL=http://localhost:9000
首次启动长时间无响应正在下载权重,观察/root/.cache体积变化;内网机器换挂载预置缓存卷
响应里缺 segments 字段请求追加-F response_format=verbose_json
其他容器里访问 localhost 失败用 compose service 名或 k8s service 名这类运行时可达的主机名
识别效果下降确认音频为 16kHz 单声道;language="auto"是否误判语种;固定误识别词优先做热词后处理,别急着换模型

部署之后

有领域词表时,先做热词后处理或换用 nn 热词模型,长尾错误再用 SenseVoice 微调脚本 拿自有数据做持续微调,多语言能力不丢。CPU 高并发场景可评估 部署选型表 里的 C++ runtime 路径。服务本身已是 OpenAI 兼容接口,现有 OpenAI 客户端改一下 base_url 就能接入。

【免费下载链接】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),仅供参考

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

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

立即咨询