FunASR Windows 本地离线语音转写部署指南:空白机器跑通高并发转写服务的完整步骤

📅 2026/8/25 9:57:22
FunASR Windows 本地离线语音转写部署指南:空白机器跑通高并发转写服务的完整步骤
FunASR Windows 本地离线语音转写部署指南空白机器跑通高并发转写服务的完整步骤【免费下载链接】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 是达摩院语音实验室开源的语音识别工具包覆盖识别ASR、端点检测VAD、标点恢复PUNC、逆文本规范化ITN把二零二五这类读法还原成书面数字等全链路能力其中 runtime SDK 提供了一键部署的 CPU 离线转写服务纯 CPU 即可运行适合 Windows 服务器上的本地化落地。下面按选型 → 备环境 → 装服务 → 出结果 → 调优 → 进阶的顺序把 FunASR 本地离线语音转写的每一步讲清楚。一、先定方案FunASR 离线链路里到底跑了什么选型前先看一条音频进来后经历的处理链VAD 先把人声段从静音里切出来ASR 声学模型逐段解码出文字PUNC 模型补回标点和断句最后 ITN 把数字、日期规范成书面格式。四个环节都是独立模型可单独替换这也是后续做行业定制化的基础。对比常见的两条路线方案优点局限云端 ASR API零运维录音出内网合规风险长期按量计费自建推理服务自己搭 GPU 集群上限高需要 GPU 和专职运维CPU 机型上难跑大模型FunASR CPU 离线包本文方案纯 CPU、容器化、模型可替换并发上限受核数约束关键性能事实来自官方基准文档 runtime/docs/benchmark_libtorch_cpp.md单路转写 RTF实时率处理 1 小时音频实际耗时数值越低越快低到 0.007632 线程时加速比超过 330 倍。这意味着 CPU 机型上堆线程就能线性换并发选型时核数比单核性能更重要。现在就能做按你机器的核数先确定要不要用一机多实例或单机大线程池再进入下一步备环境。二、Windows 环境准备硬件规格与 WSL2 检查按核数估硬件而不是按并发路数背参数服务端的并发上限由解码线程池大小决定线程池又吃核数所以硬件规格直接换算定位CPU内存解码线程建议适用单节点试点8 核16GB8~16每天几十小时音频量部门级16 核32GB32脚本首次安装的默认取 CPU 核数几百小时/天中心机房64 核128GB64多业务线共用首次执行安装时脚本自动把解码线程数设为 CPU 核数、IO 线程数取解码线程的 1/4脚本内置逻辑IO 线程负责收发包数量过多反而抢核。如果你改过默认值用show子命令随时能核对。Windows 侧只有一件事必须做对WSL2 Docker DesktopFunASR 的部署脚本是 bash 脚本位于runtime/deploy_tools/funasr-runtime-deploy-offline-cpu-zh.sh仓库内没有 Windows 原生批处理文件所以 Windows 上走的是Docker DesktopWSL2 后端 在 WSL2 终端里跑 bash 脚本这条路Windows 10/11 专业版或家庭版先启用 WSL2微软官方文档有开关步骤安装 Docker Desktop设置里确认默认后端为 WSL2在 WSL2 终端里执行docker info能正常输出即环境就绪。一个容易踩的坑工作目录别放 C 盘用户目录。建议建D:\funasr-runtime在 WSL2 里对应/mnt/d/funasr-runtime装的时候用--workspace传进去模型和日志都落在数据盘。现在就能做在 WSL2 终端跑一次docker info确认输出里没有错误环境就算就绪。三、离线部署步骤从克隆仓库到服务跑起来第 1 步拉代码git clone https://gitcode.com/GitHub_Trending/fun/FunASR cd FunASR/runtime/deploy_tools第 2 步一键安装并拉起服务在 WSL2 终端中以 root 执行脚本开头会强制校验 root 权限sudo bash funasr-runtime-deploy-offline-cpu-zh.sh install --workspace /mnt/d/funasr-runtime交互过程依次让你做四件事都有默认值直接回车即可交互项说明选 Docker 镜像最新版为registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-cpu-0.4.5另有 0.3.0、0.2.2选 ASR 模型三个选项见下表决定转写形态选 VAD / PUNC / LM 模型默认damo/speech_fsmn_vad_zh-cn-16k-common-onnx、damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx、damo/speech_ngram_lm_zh-cn-ai-wesp-fst语言模型可选 NONE 跳过填宿主机端口默认 10095取值范围 1~65535容器内部端口固定 10095由-p映射三个 ASR 模型的取舍damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onnx—— 基础版中文普通话通用场景默认项damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx—— VAD标点与识别一体化版本链路组件更简damo/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404-onnx—— 支持上下文/热词增强的版本专业术语多的业务优先选它。装完后脚本会把示例客户端和一条示例音频asr_example.wav下载到工作区的samples目录并自动装好 Python 客户端依赖和 FFmpeg——容器运行时同样内置 FFmpeg所以 wav 之外的 mp3、m4a 等常见格式也能直接送进服务转写。第 3 步验证服务活着最快的验证方式是用脚本自带的示例客户端跑一条样例音频sudo bash funasr-runtime-deploy-offline-cpu-zh.sh client按提示选 Python 客户端、默认 IP 和端口看到终端滚动打出识别文字链路就通了。日常管理服务用这几个子命令在runtime/deploy_tools目录下执行sudo bash funasr-runtime-deploy-offline-cpu-zh.sh start # 启动 sudo bash funasr-runtime-deploy-offline-cpu-zh.sh stop # 停止 sudo bash funasr-runtime-deploy-offline-cpu-zh.sh restart # 重启 sudo bash funasr-runtime-deploy-offline-cpu-zh.sh show # 查看当前全部参数现在就能做跑一遍client子命令确认样例音频能出文字部署环节即完成。四、第一次转写单条文件、批量队列与热词客户端源码在 runtime/python/websocket/核心是funasr_wss_client.py走 WebSocket 与服务端通信默认启用 SSL即 wss。首次使用先装依赖pip install -r requirements_client.txt单条文件转写python funasr_wss_client.py --host 127.0.0.1 --port 10095 --mode offline \ --audio_in D:/mnt/d/audio/meeting1.mp3 --use_itn 1 --output_dir ./out参数要点--mode offline离线整段转写另可选online流式与2pass流式先出、离线精修客户端默认值--use_itn 1开启逆文本规范化把口语读法还原成书面数字默认就是 1转法律/财务文本建议保留;--output_dir结果按文件名 文本 时间戳落盘方便后处理。批量队列wav.scp 一条一行音频多时建一个 scp 清单每行标识 路径两个字段meeting_01 /mnt/d/audio/meeting1.mp3 call_02 /mnt/d/audio/call2.wav training_03 /mnt/d/audio/training3.m4apython funasr_wss_client.py --host 127.0.0.1 --port 10095 --mode offline \ --audio_in /mnt/d/audio/wav.scp --thread_num 8 --output_dir /mnt/d/transcripts--thread_num控制客户端并发发送的进程数压满服务端 32 个解码线程前可以一路加客户端对每条音频会等服务端确认收尾默认最长等 300 秒--result_timeout超长音频要留意这个上限。热词一行一个词后跟权重python funasr_wss_client.py ... --hotword /mnt/d/hotwords.txthotwords.txt格式是热词 权重例如阿里巴巴 20。权重越大解码时对该词的偏置越强专有名词反复被识错时先加热词再考虑换模型。不想写代码的话还有浏览器界面runtime/html5/static/index.html配 runtime/html5/h5Server.py 起个静态服务就能在页面上上传文件试听转写结果。现在就能做先用--mode offline转一条自己业务的真实录音把结果和人工听写对照一遍建立这条链路的准确率基线。五、并发调优参数与常见故障排查转写准确率排查按这个顺序查采样率Paraformer 按 16kHz 训练录音如果是 8kHz 电话音先用 FFmpeg 重采样ffmpeg -i in.wav -ar 16000 out.wav再送服务这一步解决大半听不清的误识热词把误识最多的专有名词加进热词文件并给足权重换模型术语密集场景把 ASR 换成本文的 contextual 版本或用update换任意 ModelScope 模型 ID / 本地模型目录sudo bash funasr-runtime-deploy-offline-cpu-zh.sh update --asr_model damo/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404-onnxupdate执行完会自动重启容器改完立即生效。并发与资源两个线程参数怎么调解码线程--decode_thread_num即并发路数上限。线程过多核数跟不上RTF 反而劣化经验值是不超过物理核数的 2 倍IO 线程--io_thread_num负责收发分片一般保持解码线程的 1/4 即可脚本首次安装就是按这个比例生成的。sudo bash funasr-runtime-deploy-offline-cpu-zh.sh update --decode_thread_num 32 --io_thread_num 8调整前先show看当前值再对照 runtime/docs/benchmark_libtorch_cpp.md 里不同线程档位的 RTF/加速比数据定目标值。三个高频故障现象定位处理port is already allocated宿主机 10095 被占WSL2 里netstat -ano \| findstr :10095找到占用进程或update --host_port 10096换端口容器起来但客户端连不上SSL 开关两端不一致服务端装的时候用--ssl 0关过 TLS客户端就要加--ssl 0默认两端都开转写中途超时退出单条音频过长超出--result_timeout客户端调大该参数或把长音频预切成 10 分钟以内的片段再排队更多细节服务端--decoder-thread-num的精确语义、协议字段见 runtime/docs/SDK_advanced_guide_offline_zh.md 与 runtime/docs/websocket_protocol_zh.md。现在就能做用一批 10 条真实录音压一遍--thread_num 8记录总耗时作为后续扩容的判断基线。六、进阶入口模型替换、文档与示例索引服务跑稳之后常见的下一步只有三类动作入口都列在这里换模型 / 换端口 / 换工作区全部走update子命令支持--asr_model、--vad_model、--punc_model、--lm_model可传 ModelScope ID 或本地目录、--host_port、--workspace、--ssl六个参数改完自动重启生效查可选模型model_zoo/modelscope_models.md 维护了 FunASR 全量模型清单含各模型的适用场景与精度指标动手示例离线训练/微调参考 examples/industrial_data_pretraining/实时流式服务的部署脚本在runtime/deploy_tools/funasr-runtime-deploy-online-cpu-zh.sh文档见 runtime/docs/SDK_advanced_guide_online_zh.md遇到问题先翻 FAQ docs/reference/FQA.md 和 docs/ 目录下的安装文档仍有疑问再到项目仓库的 Issue 区提交附上show输出的参数快照定位会快很多。现在就能做把本文第三、四节的命令存成deploy.sh和transcribe.sh两个脚本下次换机器或加队列直接复用整套 FunASR 本地离线语音转写服务就算真正交付到日常运维里了。【免费下载链接】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),仅供参考