跳到主要内容

语音识别 · ASR

SenseVoice 本地部署:936MB 权重,一张 3090 跑到饱

SenseVoiceSmall 是 2.34 亿参数的非自回归模型,处理 10 秒音频只要 70 毫秒,比 Whisper-Large 快 15 倍。真正卡住你的从来不是显存,是 30 秒输入上限、缺失的字级时间戳,和输出里那串 <|zh|><|NEUTRAL|><|Speech|> 标签。

SenseVoice 出自 FunAudioLLM(阿里通义语音团队),论文是 arXiv:2407.04051,代码在 github.com/FunAudioLLM/SenseVoice,权重同时挂在 ModelScope 的 iic/SenseVoiceSmall 和 Hugging Face 的 FunAudioLLM/SenseVoiceSmall。它支持中文、粤语、英文、日文、韩文五个语种,而且一次前向就同时吐出四样东西:转写文本、语种判定(LID)、情感标签(HAPPY / SAD / ANGRY / NEUTRAL / FEARFUL / DISGUSTED / SURPRISED),以及音频事件(BGM / Speech / Applause / Laughter / Cry / Sneeze / Breath / Cough)。因为是非自回归架构,没有 beam search,也就没有 Whisper 那种把一句话循环复读三十遍的幻觉尾巴。

尺寸才是它最反直觉的地方。Hugging Face 上标的是 0.2B,model.pt 在 fp32 下 936MB,换算下来约 2.34 亿参数——对比 Whisper large-v3 的 15.5 亿参数、约 3GB 权重,SenseVoiceSmall 小了一个数量级。转成 GGUF 后 f16 是 470MB,q8 只有 254MB,而官方给的 184 条中文短音频基准上,f16 的 CER 是 8.01%,q8 是 7.99%,量化几乎没有精度损失。所以「SenseVoice 需要多大显存」这个问题的答案很扫兴:随便哪张现代显卡都过剩,你真正该问的是并发路数和吞吐。

会真正绊倒你的是三件事。第一,直接推理硬性限制输入音频不超过 30 秒,超了就得挂 fsmn-vad(0.4M 参数)先切段,vad_kwargs 里把 max_single_segment_time 设成 30000。第二,SenseVoiceSmall 本身不产字级时间戳;funasr 1.3.29 起 sentence_info 会还原 VAD 段级边界,想要更细的对齐得另外接 fa-zh(38M)时间戳预测模型。第三,生成结果必须过一遍 rich_transcription_postprocess 才是人能看的文本,否则你拿到的是带尖括号标签的原始串。另外,仓库源码是 MIT,但模型权重单独走 FunASR 模型开源协议,合规商用没问题,签合同前把模型卡看一眼。顺带一提,同团队 2512 批次已经放出 Fun-ASR-Nano-2512(0.8B、Apache 2.0),SenseVoice 并没有被下架,两条线现在是并行的。

01 —

SenseVoice 有哪些版本,各自吃多少显存

开源可下载的正式权重只有 Small 一个,其余都是它的量化与导出形态

版本参数量显存上下文说明
SenseVoiceSmall(PyTorch,iic/SenseVoiceSmall)约 234M(HF 标注 0.2B)fp32 权重 936MB · 单路推理显存 < 2GB单段 ≤ 30 秒,配 fsmn-vad 后不限时长官方主力权重。funasr AutoModel 直接加载,支持 language='auto'、use_itn、batch_size_s 动态成批,想要标点和说话人再串 ct-punc(1.1G)与 CAM++。
SenseVoiceSmall ONNX(funasr-onnx,quantize=True)约 234MINT8 导出后 ~240MB,CPU/GPU 皆可单段 ≤ 30 秒,batch_size 可设 10 以上要脱离 PyTorch 依赖、塞进现有 C++/Go 服务时用这个。需要 funasr-onnx >= 0.4.0;另有 funasr-torch >= 0.1.1 走 LibTorch 路线。
SenseVoiceSmall GGUF f16约 234M470MB · CPU 8 线程约 23 倍实时配 fsmn-vad.gguf 处理长音频官方推荐的 GGUF 精度档,184 条中文基准 CER 8.01%。用 llama-funasr-sensevoice 单二进制跑,不装 Python 也能上线。
SenseVoiceSmall GGUF q8约 234M约 254MB · CPU 8 线程约 27 倍实时配 fsmn-vad.gguf 处理长音频体积砍半而 CER 反而是 7.99%,边缘盒子、树莓派级设备的首选。词表已内嵌,不用额外带 bpe 文件。
SenseVoice-Large(论文中的大模型)未公布不适用50+ 语种高精度 ASRarXiv:2407.04051 里描述的编码器-解码器版本,支持 50 多个语种,但开源模型库里至今只有 Small 一个可下载权重。想要多语种,走下面这条线。
Fun-ASR-Nano-2512(同团队后继线)0.8Bbf16 权重约 1.6GB中文含 7 大方言区 26 种口音 + 英日Apache 2.0,seq2seq 架构,transformers 直接 AutoModelForSpeechSeq2Seq 加载,支持 prompt 和 keywords 热词。姊妹款 Fun-ASR-MLT-Nano-2512 覆盖 31 个语种。

02 —

按场景选卡:SenseVoice 该租哪张 GPU

234M 的模型不吃显存,吃的是并发路数和批量吞吐——所以选卡逻辑跟大语言模型完全不一样

  • 跑通 demo、开 webui.py 试听情感与事件标签

    RTX 3090 24GB$0.193/卡·时

    权重不到 1GB,24GB 显存装下 SenseVoice + fsmn-vad + ct-punc + CAM++ 全家桶还剩一大半,而这是整个列表里每小时最便宜的 Ampere 卡。

  • 7×24 常驻的线上 ASR 接口,几十路并发

    A10 24GB$0.414/卡·时

    数据中心卡,被动散热加 ECC,适合 fastapi run --port 50000 这种一挂几个月的服务,不用担心消费卡长时间满载的稳定性。

  • 把历史录音库一次性回刷,batch_size_s 拉满

    RTX 4090 24GB$0.540/卡·时

    Ada 架构的 fp16 吞吐显著高于 3090,批量转写这种纯算力活儿,贵出来的钱基本按比例换成了更短的完工时间。

  • 用 FunASR 的 finetune.sh 微调自有口音与垂类词表

    RTX 5090 32GB$0.723/卡·时

    234M 全参微调加 Adam 优化器状态不到 4GB,32GB 让你把 batch 开大、把音频长度放宽,单卡就能收敛,不必折腾数据并行。

03 —

从开机到线上 ASR 接口,四步

选 PyTorch 预置镜像开机,pip 一行,权重会自动从 ModelScope 拉下来

  1. 01

    开一台实例,装 funasr

    在 NexGPU 控制台挑一张 RTX 3090 24GB,镜像选 PyTorch,SSH 或 Jupyter 进去。SenseVoice 的依赖非常轻,不需要编译 CUDA 算子,装完就能跑。想要说话人分离(spk_model='cam++')的话,funasr 要从源码装:pip install git+https://github.com/modelscope/FunASR.git。

    pip install -U "funasr>=1.3.29"
  2. 02

    挂上 fsmn-vad,跑第一条长音频

    直接推理只吃 30 秒以内的音频,所以第一天就把 VAD 接上,别等踩坑。max_single_segment_time 设 30000 毫秒,merge_vad 把碎片合并到 merge_length_s 附近再送进模型。返回的 text 记得过 rich_transcription_postprocess,否则你看到的是 <|zh|><|NEUTRAL|><|Speech|><|withitn|> 开头的原始串。

    python -c "from funasr import AutoModel; m=AutoModel(model='iic/SenseVoiceSmall', trust_remote_code=True, vad_model='fsmn-vad', vad_kwargs={'max_single_segment_time':30000}, device='cuda:0'); print(m.generate(input='audio.mp3', language='auto', use_itn=True, batch_size_s=60, merge_vad=True, merge_length_s=15)[0]['text'])"
  3. 03

    起 HTTP 服务,对外开端口

    仓库自带 FastAPI 入口和 Dockerfile。设好 SENSEVOICE_DEVICE 指向 cuda:0 就跑在 GPU 上,不设则退回 CPU。也可以 docker run --gpus all -p 50000:50000 sensevoice 走容器。在控制台把 50000 端口映射出来,前端和业务侧就能直接调。

    export SENSEVOICE_DEVICE=cuda:0 && fastapi run --port 50000
  4. 04

    上量:量化导出或微调

    要削依赖就导 ONNX,quantize=True 出 INT8,batch_size 开到 10 以上;要贴自己的业务口音和术语,就去 FunASR 仓库用 sensevoice2jsonl 生成训练 jsonl(scp + text + text_language + emo + event 五个文件),再 bash finetune.sh。跑完把实例停掉,计算立刻停止计费。

    python -c "from funasr_onnx import SenseVoiceSmall; m=SenseVoiceSmall('iic/SenseVoiceSmall', batch_size=10, quantize=True); print(m(['audio.mp3'], language='auto', use_itn=True))"

算一笔真账:刷完 1,000 小时录音要多少钱

官方公布的数字是「10 秒音频耗时 70 毫秒」,折合约 143 倍实时。1,000 小时 = 3,600,000 秒,纯推理约 3,600,000 ÷ 143 ≈ 25,200 秒,也就是 7 卡时。把音频解码、fsmn-vad 切分、结果落盘的工程开销按 3 倍余量摊进去,算 21 卡时:在 RTX 3090 24GB 上是 21 × $0.193 = $4.05;换 RTX 4090 24GB 跑得快很多,10 卡时收工,10 × $0.540 = $5.40。总价几乎一样,差别只在你多久拿到结果。也就是说,把一千小时录音连情感标签和音频事件一起刷完,算力成本是个位数美元。真正的大头在存储:1,000 小时 16kHz 单声道 WAV 约 115GB,按 $0.414/GB·月 是 $47.6 一个月,比算力贵十倍——先转成 64kbps MP3 只剩约 29GB($11.9/月),或者转写完直接销毁实例只留文本。NexGPU 计算按秒计量、按小时计价,实例一停就不再产生费用;存储会一直计费到你把它销毁为止。转写文本的出站流量按 $0.0081/GB 中位价计,几十兆纯文本可以忽略不计。没有最低消费,没有开通费,不用提配额工单。

04 —

常见问题

SenseVoice 本地部署到底需要多大显存?一张 24GB 卡够吗?

严重够。SenseVoiceSmall 的 model.pt 在 fp32 下是 936MB,约 2.34 亿参数,单路推理显存占用在 2GB 以内;就算把 fsmn-vad、ct-punc、CAM++ 全串上,24GB 也只用掉零头。真正会让显存涨起来的是 batch_size_s 拉大后的并发批量,而不是模型本身。所以别为它去租 A100,NexGPU 上一张 RTX 3090 24GB 是 $0.193/卡·时,按秒计费,试完就停。

SenseVoice 和 Whisper large-v3 该选哪个?

中文、粤语场景选 SenseVoice:官方在 AISHELL-1、AISHELL-2、WenetSpeech 上优于 Whisper,而且非自回归架构比 Whisper-Small 快 5 倍、比 Whisper-Large 快 15 倍,还顺手给你情感和音频事件标签。需要覆盖几十种语言、或者非要字级时间戳,那 Whisper 仍然合适。参数量差距摆在那儿:234M 对 1.55B。两个都想跑一遍对比?在 NexGPU 开两台 RTX 4090 24GB($0.540/卡·时)并行跑同一批音频,一个下午就有结论。

SenseVoiceSmall 能输出字级时间戳吗?

不能。这是社区问得最多的一条。SenseVoiceSmall 是非自回归结构,不产生词级对齐;funasr 1.3.29 起 sentence_info 会还原 VAD 的段级时间边界,够做字幕分行,但做不到卡拉 OK 级逐字高亮。需要精细对齐就另接 fa-zh(38M)时间戳预测模型,或者改用带时间戳的 paraformer-zh(220M)。这些模型加起来还不到 1GB,在 NexGPU 一张卡上全部同时驻留完全没压力。

音频超过 30 秒会怎么样?怎么转写一小时的会议录音?

直接推理路径硬性限制 30 秒以内,超了结果就不可靠。正确做法是加载时传 vad_model='fsmn-vad',并把 vad_kwargs={'max_single_segment_time': 30000} 设上,让 VAD 先按静音切段,再用 merge_vad=True、merge_length_s=15 把碎片合回接近 15 秒的块。fsmn-vad 只有 0.4M 参数,几乎不占显存也不占时间。一小时会议在 NexGPU 的 RTX 3090 上按 143 倍实时算,大约 25 秒跑完,合 $0.0013。

SenseVoiceSmall 可以商用吗?许可怎么算?

仓库源码是 MIT License,模型权重单独发布,以模型卡标注的条款为准——官方 SenseVoiceSmall 模型卡指向 FunASR 模型开源协议,遵守协议的前提下允许商用。注意第三方转换版本(各种 GGUF、ONNX 重打包)可能标注不同条款,用之前逐个核对模型卡。如果合规要求音频不出内网,那更该自己部署:在 NexGPU 租卡跑,数据只在你自己的实例里,停机即停止计费。

现在还该用 SenseVoice,还是换成 Fun-ASR?

两条线并行,没有谁替代谁。SenseVoice 仍在维护(funasr 1.3.27 加了检测语种回传,1.3.29 恢复了 VAD 段时间戳,还新增了 GGUF/llama.cpp 单二进制路线),它的杀手锏是 234M 的体积、非自回归的速度,以及一次前向带出情感与音频事件。同团队的 Fun-ASR-Nano-2512 是 0.8B、Apache 2.0、seq2seq,中文覆盖 7 大方言区 26 种口音,支持热词 keywords,MLT 版本上到 31 个语种。选择取决于你要吞吐还是要方言与多语种。NexGPU 上两个都按秒计费,开两台 RTX 4090 24GB 各跑一遍,你自己的音频说了算。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。