Whisper 本地部署指南:10 分钟用 LocalAI 跑通离线语音识别
【免费下载链接】LocalAILocalAI is the open-source AI engine. Run any model - LLMs, vision, voice, image, video - on any hardware. No GPU required.项目地址: https://gitcode.com/GitHub_Trending/lo/LocalAI
3 小时的会议录音,走云端接口要过公网、按分钟计费;换成 LocalAI 做本地语音识别,同一条 curl 在内网离线跑完,返回的还是标准 JSON。这篇文章按「先跑起来、再调对、最后提速」的顺序,带你把 Whisper 本地部署完整走一遍。
一、先跑起来:一条命令拉起 LocalAI 与 whisper 模型
1. 启动服务
装 Docker 的机器上,这条命令就是最短路径:
docker run -ti --name local-ai -p 8080:8080 localai/localai:latest服务默认监听 8080。不想用 Docker 也可以下载官方发布的二进制直接运行,参数一样是--host和--port,细节可翻仓库里的 Dockerfile 与文档 docs/content/features/。
2. 加载 Whisper 模型
容器起来后,在宿主机执行local-ai run whisper-base,LocalAI 会从内置模型库(gallery)里解析这个条目,拉取对应的 whisper.cpp 权重并注册到服务。仓库中该条目就是 gallery/whisper-base.yaml,想看它长什么样,第三节有完整解析。
3. 验证服务在线
执行curl http://localhost:8080/v1/models,返回的模型列表里出现whisper-base即加载成功。打开浏览器访问http://localhost:8080还能看到控制台首页:
二、发第一个请求:语音转录 API 的调用姿势
1. 最小可用 curl
端点/v1/audio/transcriptions完全对齐 OpenAI 的 Whisper 接口,multipart 表单提交:
curl http://localhost:8080/v1/audio/transcriptions \ -F file=@audio.wav \ -F model=whisper-base \ -F language=zh响应里有text(全文)、segments(带起止时间的分段)。处理逻辑可对照源码 core/http/endpoints/openai/transcription.go。
2. 常用参数对照表
| 参数 | 必填 | 说明 |
|---|---|---|
| file | 是 | 音频文件,wav/ogg/mp3/flac/m4a 等常见格式均可 |
| model | 是 | 模型名,如whisper-base |
| language | 否 | ISO-639-1 两位代码(zh、en、ja…),不传则自动检测 |
| translate | 否 | 传true时把非英语音频翻译成英语 |
| prompt | 否 | 起始提示词,适合纠正专有名词与术语 |
| temperature | 否 | 采样温度,默认 0 |
| response_format | 否 | json(默认)、verbose_json、txt、srt、vtt、lrc |
| timestamp_granularities | 否 | 取segment或word,让分段/分词带时间戳 |
| stream | 否 | 传true时以 SSE 增量输出转写文本 |
| diarize | 否 | LocalAI 扩展项,说话人分离,默认开启,传false关闭 |
3. 换输出格式与流式转写
response_format传srt或vtt,返回的就是可直接挂到视频上的字幕文件;stream=true则进入流式模式,按transcript.text.delta事件逐段推送文本,最后以[DONE]收尾,做低延迟应用时很有用。
三、Whisper 模型怎么选:tiny 到 large 五档对比
1. 参数量与适用场景
| 模型 | 参数量 | 定位 |
|---|---|---|
| tiny | 39M | 草稿与低延迟场景,速度最快 |
| base | 74M | 日常转写的性价比之选,多数 CPU 可实时 |
| small | 244M | 精度与速度的平衡点,中文访谈推荐先试这档 |
| medium | 769M | 长音频、专业术语多的内容 |
| large | 1550M | 精度上限,对内存要求最高(建议 16GB 起步) |
选型口诀:先 base 后 small,听感不行再往上加档;资源紧张就降档而不是堆内存。
2. 模型配置长什么样
模型条目由两部分构成:名字 + 后端声明。whisper 系列的条目核心只有一行backend: whisper:
name: "whisper-base" config_file: | backend: whisperLocalAI 依据声明路由到 whisper.cpp 后端(实现见 backend/go/whisper/,C++ 侧接的就是 whisper.cpp 推理核)。已持有.bin权重文件的,可自建配置文件指向本地文件,避免重复下载。
四、让转写更快:硬件底线与调参
1. 硬件要求
| 部件 | 跑通 whisper-base 底线 | 日常使用建议 |
|---|---|---|
| CPU | 2 核 | 4~8 核,x86 需支持 AVX2 |
| 内存 | 2GB | 8GB 以上(large 档 16GB 起步) |
| 磁盘 | 权重文件 + 若干 GB 余量 | 预留 10GB |
| GPU | 无需(CPU 即可推理) | 有 NVIDIA 卡可换带 CUDA 的镜像提速 |
2. CPU 侧三个调优点
第一是线程数:在模型配置的parameters里设置threads,一般取物理核数;第二是模型档位:精度够用就别上 large;第三是输入长度:超过几分钟的音频先分段再转,单段排队更短、内存峰值更低。whisper 后端内部带 VAD 辅助切分长音频,减少无效区间的计算。
3. 输入音频预处理
采样率统一到 16kHz、单声道即可;格式五花八门时用 ffmpeg 转一次 wav 最稳妥。预处理后同一文件的转写耗时通常更平稳,也省去了后端解码的差异。
五、排错手册:按报错现象定位
1. 下载阶段卡住
大模型在慢速网络上很容易长时间无进度。两个办法:换稳定网络重拉,或按 gallery/whisper-base.yaml 同目录的条目对照文件名,手工把权重放进模型目录后重启服务。
2. 推理阶段 OOM 或无输出
先看dmesg是否触发 OOM;其次把档位降一级、threads减到物理核数。长时间无输出多半是线程数远超物理核导致的上下文切换风暴。
3. 模型名对不上
请求里的model必须和/v1/models返回的注册名完全一致,whisper-base写成whisper base或base都会 404。
六、接入你的应用:兼容层与下一步
1. OpenAI 兼容意味着零改造
现有代码只要把 base_url 指到http://localhost:8080/v1、密钥位填任意字符串即可,SDK 不需要换。这也是 LocalAI 的设计目标之一:本地语音识别服务对上游应用完全透明。
2. 三条可以今天就做的下一步
- 用
response_format=srt转一段 5 分钟视频,导入播放器核对时间轴对齐质量。 - 同一份中文访谈分别跑
whisper-base与whisper-small,把两版文本贴在一起对比术语准确率。 - 给转写请求加上
stream=true,写一个最小的 SSE 消费脚本,观察增量文本的到达节奏。
【免费下载链接】LocalAILocalAI is the open-source AI engine. Run any model - LLMs, vision, voice, image, video - on any hardware. No GPU required.项目地址: https://gitcode.com/GitHub_Trending/lo/LocalAI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考