先说最容易被搜索结果误导的一件事:Vosk 本身不需要 GPU。官方模型页写得很直白,小模型(比如中文的 vosk-model-small-cn-0.22,41.9MB)运行时大约只占 300MB 内存,树莓派和手机上都在跑;大模型(vosk-model-cn-0.22,1.3GB;英文 vosk-model-en-us-0.22,1.8GB)因为要做 CARPA 重打分,官方建议按最多 16GB 内存准备——注意是内存不是显存。所以「Vosk 需要多大显存」这个问题的诚实答案是:默认路线一张显卡都不需要,解码全在 CPU 上。
那什么时候真的要卡?三种情况。第一,你有几千小时的存量音频要转写,这时候走 vosk-api 的 CUDA 批量解码——BatchModel / BatchRecognizer / GpuInit 这一套包的是 Kaldi 的 cudafeat + cudadecoder,源码里默认 max_batch_size=32、num_channels=600、use_gpu_feature_extraction=true,一张卡同时喂几十路音频,吞吐跟 CPU 逐路解码完全不是一个量级。第二,Vosk 的原始输出没有标点也没有大小写,要接 recasepunc 做恢复,而 recasepunc 的英文模型 1.6GB、是个 BERT,放 GPU 上才顺。第三,你要在同一台机器上把 Vosk 和 faster-whisper 摆在一起做 A/B——这是绝大多数团队真正该花的那笔钱。
还有几个自建时一定会撞上的坑,提前说清楚:官方至今没有发布带 GPU 的 pip 包(vosk-api 仓库里 #1287「Package vosk with GPU support」还开着),CUDA 路线必须自己按 Dockerfile.kaldi-vosk-server-gpu 从源码编译;PyPI 上的 vosk 停在 0.3.45(2022-12),而 GitHub 的 tag 已经到 v0.3.50,主干提交一路更新到 2026 年 8 月,端点检测、ITN、Golang GPU Batch API 这些新东西 pip 装不到;官方 GPU 镜像只有英文的 alphacep/kaldi-en-gpu,中文要照着 Dockerfile 换 MODEL_VERSION 自己 build;GPU 服务默认 VOSK_SAMPLE_RATE=8000,你拿 16kHz 的模型直接连上去,出来的就是一堆乱码。这些都不是玄学,是可以在 NexGPU 上租一小时把它们逐个跑通的事。
01 —
Vosk 官方模型:现役版本与真实资源占用
官方模型列表里共 131 个条目,其中大部分已标记 obsolete;下面只列还在维护的那几个,WER/CER 数字全部取自 alphacephei.com 官方表格。
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| vosk-model-small-cn-0.22 | 小模型 / Kaldi nnet3 chain | 无需显存;运行时约 300MB 内存 | 16kHz 单声道流式,词表可运行时替换 | 中文端侧首选,41.9MB。CER 23.54(SpeechIO-02)、38.29(SpeechIO-06)、17.15(THCHS)。支持 SetGrammar 动态词表,适合命令词、数字串、固定话术场景。 |
| vosk-model-cn-0.22 | 大模型 / 带 CARPA 重打分 | CPU 路线按 16GB 内存准备;GPU 批量解码走 16GB 级显卡 | 16kHz 单声道流式,词表静态不可改 | 1.3GB,目前唯一在维护的中文服务端大模型。CER 13.98(SpeechIO-02)、27.30(SpeechIO-06)、7.43(THCHS)。朗读体和干净录音很稳,远场、口音重的会场音频会明显掉。 |
| vosk-model-small-en-us-0.15 | 小模型 / Kaldi nnet3 chain | 无需显存;运行时约 300MB 内存 | 16kHz 单声道流式,支持动态词表 | 39.3MB,Android 与树莓派上的标配。WER 9.85(librispeech test-clean)、10.38(tedlium)。做唤醒后指令识别、IVR 按键替代基本够用。 |
| vosk-model-en-us-0.22 / -lgraph | 大模型 1.8GB / 动态图版 124.5MB | 大模型按 16GB 内存准备;lgraph 版几百 MB 即可 | 16kHz 单声道流式 | 英文通用主力。0.22 的 WER 5.69(librispeech test-clean)、6.05(tedlium)、29.78(callcenter);lgraph 版 WER 7.82,牺牲一点精度换来运行时改词表的能力,热词需求强就选它。 |
| vosk-model-en-us-0.42-gigaspeech | 最大的官方英文包,2.3GB | 内存按 16GB 准备,磁盘预留 5GB 解压空间 | 16kHz 单声道流式 | Kaldi 在 Gigaspeech 上训的,WER 5.64(librispeech test-clean)、6.24(tedlium)。官方明说「适合播客,不适合电话音频」——callcenter 上 30.17,比 0.22 还差一点,别拿它做客服质检。 |
| vosk-model-spk-0.4 + vosk-recasepunc-en-0.22 | 说话人向量 13MB / 标点恢复 1.6GB | spk 可忽略;recasepunc 是 BERT,建议放 GPU | spk 全语种通用;recasepunc 官方只有 en / ru / de | Vosk 主模型不输出标点和大小写,要靠 recasepunc 补。中文没有官方 recasepunc,得自己训或者接别的标点模型——这是中文自建方案里最常被漏掉的一段。 |
02 —
配什么卡:按你真正要做的事选,不按参数表选
Vosk 是 CPU 优先的引擎,租卡的价值在批量吞吐、标点恢复和横向对比。我们不建议为了跑 Vosk 去开 H100。
小模型流式服务、并发压测(解码基本落在 CPU)
Tesla V100 32GB$0.188/卡·时
全站最低的整机时价,vosk-model-small-cn-0.22 运行时只吃约 300MB 内存,卡先空着;等你切到 GPU 批量解码,32GB 显存正好接得住 HCLG 图。
CUDA 批量解码存量音频(BatchModel 默认 batch 32 / 600 通道)
Tesla T4 16GB$0.298/卡·时
Kaldi 的 cudadecoder 当年就是照着 T4 这类推理卡调的,16GB 放得下解码图和 32 路批状态,单位音频时长的成本最低。
Vosk + recasepunc 标点恢复,或与 faster-whisper 同机 A/B
RTX 4090 24GB$0.540/卡·时
1.6GB 的 recasepunc 和 Whisper large-v3 可以同时常驻 24GB,一次租用就把「Vosk 到底够不够用」这件事测出结论。
自己编译 HAVE_CUDA=1 的 vosk(官方没有 GPU 包)
RTX 3090 24GB$0.193/卡·时
编 Kaldi 的 cudafeat / cudadecoder 需要真卡在场做验证,3090 是 24GB 档里最便宜的一张,镜像 build 完推走就停机,不留成本。
03 —
四步把 Vosk 跑起来
从裸机到能对外提供流式识别的 WebSocket 服务,第一次做大概一个小时,按秒计费算下来不到一杯咖啡。
- 01
开实例,把模型拉下来
在 console.nexgpu.net 选一个 Ubuntu 或 PyTorch 镜像开机,SSH 进去直接下模型。所有官方模型都在 alphacephei.com/vosk/models/ 下,文件名即 URL。中文换成 vosk-model-cn-0.22,先试水就用 41.9MB 的 small 版。模型解压后是一个目录,里面 am/、graph/、ivector/、rescore/ 几个子目录缺一不可,别只拷 final.mdl。
wget https://alphacephei.com/vosk/models/vosk-model-cn-0.22.zip && unzip vosk-model-cn-0.22.zip - 02
先用 vosk-transcriber 把一批文件跑通
pip 装完自带命令行工具,内部调 ffmpeg 解码,mp4/mp3/m4a 都能直接喂,-t 支持 txt 和 srt,--tasks 控制并行路数(默认 10)。如果你走 Python API 而不是 CLI,音频必须是单声道 16bit PCM 的 WAV,采样率跟模型对齐——喂 44.1kHz 立体声不会报错,只会安静地把识别率打到地板上,这是新手第一大坑。
pip install vosk && vosk-transcriber -m vosk-model-cn-0.22 -i meeting.mp4 -t srt -o meeting.srt --tasks 16 - 03
起流式 WebSocket 服务
vosk-server 提供 WebSocket、gRPC、MQTT、WebRTC 四种协议,官方镜像默认监听 2700 端口。中文用 alphacep/kaldi-cn,英文用 alphacep/kaldi-en,想换成自己微调过的模型就把目录挂进 /opt/vosk-model-cn/model。仓库里的 test.py 直接连上去就能验证;接 Asterisk、FreeSWITCH 这类话务系统时记得用 8kHz 对应的配置。
docker run -d -p 2700:2700 -v /opt/model:/opt/vosk-model-cn/model alphacep/kaldi-cn:latest - 04
上 CUDA 批量解码
GPU 路线用 alphacep/kaldi-en-gpu,基础镜像是 nvidia/cuda:12.1.0-devel-ubuntu22.04,Kaldi 编了 cudafeat 和 cudadecoder,vosk-api 用 HAVE_CUDA=1 构建。官方只发了英文镜像,中文照着 docker/Dockerfile.kaldi-en-gpu 把 MODEL_VERSION 换掉自己 build 即可。两个必看细节:GPU 服务默认 VOSK_SAMPLE_RATE=8000,配 16kHz 模型必须改;仓库自带的 python/example/test_gpu_batch.py 跑完会直接打印 xRT 倍速,别信任何人给你的吞吐数字,用它在你自己租的卡上压一遍。
docker run --gpus all -d -p 2700:2700 alphacep/kaldi-en-gpu:latest
一笔算得清的账
场景一,1,000 小时中文客服录音批量转写:租 Tesla T4 16GB($0.298/卡·时),先跑官方 test_gpu_batch.py 拿到你这批音频的真实 xRT。假设实测 60 倍实时,1,000 ÷ 60 ≈ 16.7 机时,16.7 × $0.298 ≈ $4.98 转写完事。模型本体 1.3GB 常驻,1.3 × $0.414 ≈ $0.54/月;转写结果按 200MB 回传,0.2 × $0.0081 ≈ $0.002,忽略不计。换 RTX 4090 24GB($0.540/卡·时)通常快一截但单价也高一截,总价接近,选哪张取决于你要多快拿到结果。场景二,常驻流式识别服务:Tesla V100 32GB $0.188 × 24 × 30 = $135.36/月,一台带卡的常驻机器,小模型只占 300MB 内存,剩下的算力留给你的业务进程。场景三,只想验证一下值不值得自建:按秒计费意味着一次 40 分钟的压测就是 $0.188 × 0.67 ≈ $0.13,没有起租时长,没有配额申请,实例一停计算就不计费,只有存储会继续算到你销毁它为止。
04 —
