FunASR + vLLM:当语音识别遇上大模型推理引擎,实时 ASR 的 RTF 直接砍半
> 来源:阿里巴巴通义实验室 FunASR 官方文档 > 主题:FunASR 集成 vLLM 加速 LLM-based 语音识别模型的自回归解码
---
核心速览
FunASR(阿里开源的工业级语音识别工具箱)最新集成 vLLM 推理引擎,专门加速 LLM-based ASR 模型 的自回归解码。效果:
| 场景 | 基线 (PyTorch) | vLLM | 加速比 |
|---|---|---|---|
| 离线单条 | 0.89s | 0.30s | 3x |
| 离线 2-GPU tensor parallel | 0.89s | ~0.20s | 4.5x |
| Batch 32 | ~32x 串行成本 | ~5x | 6x |
| WebSocket 实时 RTF | 0.156 | 0.078 | 2x |
---
架构设计:谁跑 PyTorch,谁跑 vLLM?
FunASR 的 vLLM 集成不是"全量迁移",而是混合架构——各司其职:
音频输入
↓
┌─────────────────┐
│ Audio Frontend │ PyTorch(音频前端:特征提取、预编码)
│ + Encoder │
│ + Adaptor │
└────────┬────────┘
↓ 音频 embedding
┌─────────────────┐
│ LLM Decoder │ vLLM(PagedAttention + Continuous Batching + Tensor Parallel)
│ (自回归生成) │
└────────┬────────┘
↓
文本输出 + 时间戳
为什么这样拆分?
- 音频编码器(encoder)是非自回归的——一次前向传播就输出整段音频的 embedding,不需要 vLLM 的 KV-cache 优化
- LLM decoder 是自回归的——逐 token 生成文本,这正是 vLLM 的强项(PagedAttention 减少内存碎片、Continuous Batching 提升吞吐)
---
支持模型:哪些能用?哪些不能?
✅ 支持 vLLM(LLM-based ASR)
| 模型家族 | 说明 |
|---|---|
| FunASRNano | Audio encoder + adaptor + Qwen3-0.6B LLM |
| LLMASR / LLMASRNAR | Whisper-style 音频 encoder + Qwen/Vicuna/LLaMA 解码 |
| GLMASR | GLM-ASR-Nano,自回归 LLM 解码 |
| QwenAudioWarp | LLM-based 音频生成路径 |
❌ 不支持 vLLM(非自回归/非 LLM)
| 模型 | 原因 |
|---|---|
| Paraformer | 非自回归,一次性输出全部 token |
| SenseVoice | encoder-decoder 架构,不 benefit from KV-cache |
| Conformer / Transformer | CTC 模型,非自回归 |
AutoModel 即可,不需要 vLLM。---
三个入口:离线、流式、WebSocket 服务
1. 离线批处理(AutoModelVLLM)
from funasr.auto.auto_model_vllm import AutoModelVLLM
model = AutoModelVLLM(
model="FunAudioLLM/Fun-ASR-Nano-2512",
hub="ms", # ModelScope
tensor_parallel_size=2, # 多卡并行
gpu_memory_utilization=0.8, # KV cache 占用比例
)
results = model.generate(
["audio1.wav", "audio2.wav"],
language="中文",
hotwords=["张三", "北京"], # 热词增强
)
适用场景:大规模音频文件集转写,追求吞吐率。
---
2. 流式 SDK(chunk 级增量)
from funasr.models.fun_asr_nano.inference_vllm_streaming import FunASRNanoStreamingVLLM
engine = FunASRNanoStreamingVLLM.from_pretrained(
model="FunAudioLLM/Fun-ASR-Nano-2512",
chunk_ms=720, # 每 720ms 一个 chunk
rollback_chars=8, # 最后 8 个字符不固定
)
for result in engine.streaming_generate("audio.wav", language="中文"):
if result["is_final"]:
print(f"Final: {result['text']}")
else:
print(f"[{result['audio_duration_ms']:.0f}ms] fixed: {result['fixed_text']}")
关键设计:
- 前 10 个 chunk 不依赖 prev_text,找稳定前缀
- 后续 chunk 用稳定前缀作为 assistant context
- 回滚机制:最后 N 个字符不固定,等后续 chunk 确认
---
3. WebSocket 服务(生产级实时)
# 单 GPU 启动
CUDA_VISIBLE_DEVICES=0 python serve_realtime_ws.py --port 10095 --language 中文
# 多 GPU tensor parallel
CUDA_VISIBLE_DEVICES=0,1 python serve_realtime_ws.py \
--port 10095 \
--tensor-parallel-size 2 \
--language 中文 \
--decode-interval 0.48 # 每 0.48s 解码一次
功能矩阵:
| 功能 | 说明 |
|---|---|
| Dynamic VAD | 动态调整静默阈值(短话语等更久,长话语切更快) |
| 热词注入 | 通过 prompt 增强特定词汇识别 |
| 说话人分离 | 实时 diarization |
| 部分预览 | --decode-interval 控制临时输出频率 |
| 幻觉清理 | 对临时输出做后处理过滤 |
---
Dynamic VAD:一个被低估的聪明设计
FunASR 的 vLLM 集成里有一个容易被忽略但非常实用的设计:动态 VAD(Dynamic VAD)。
传统 VAD 用固定静默阈值——比如检测到 800ms 静音就切分。但这在真实对话中不work:
- 短停顿("嗯...那个...")→ 过早切分会破坏语义连贯
- 长独白 → 过晚切分导致 ASR 质量下降
| 已积累语音 | 静默阈值 | 策略 |
|---|---|---|
| ≤ 5s | 2.0s | 短话语,等更久避免过早切割 |
| 5-10s | 1.5s | 正常对话 |
| 10-15s | 1.0s | 开始收紧 |
| 15-30s | 0.8s | 更快切 |
| 30-45s | 0.4s | 防止超长 ASR segment |
| > 45s | 0.1s | 强制切分 |
---
性能数据拆解
离线批处理
| 配置 | 时间 |
|---|---|
| PyTorch 基线 | 0.89s |
| vLLM 单卡 | 0.30s (3x) |
| vLLM 2-GPU TP | ~0.20s (4.5x) |
批处理吞吐
| Batch Size | PyTorch | vLLM | 加速比 |
|---|---|---|---|
| 16 | ~16x 串行 | ~4x | 4x |
| 32 | ~32x 串行 | ~5x | 6x |
WebSocket 实时
| 指标 | PyTorch | vLLM |
|---|---|---|
| RTF | 0.156 | 0.078 |
---
部署注意事项
首次启动慢
vLLM 需要初始化 KV cache 和 CUDA graphs,FunASR 需要把 LLM 权重从 model.pt 提取到 vLLM 兼容格式。首次启动约 60-90 秒,后续复用已提取的权重。
显存需求
| 资源 | 最低 | 推荐 |
|---|---|---|
| GPU 显存 | 8GB | 16GB+ |
| CUDA | 11.8 | 12.x |
| GPUs | 1 | 2+(TP 时) |
gpu_memory_utilization 降低、max_model_len 缩短、tensor_parallel_size 增加。浏览器麦克风权限
Chrome 要求 HTTPS 或 localhost 才能访问麦克风。远程服务器用 ssh -L 10095:localhost:10095 端口转发后,从 localhost 打开客户端。
---
一句话总结
> FunASR + vLLM 的集成不是「赶潮流」,而是精准的架构匹配——音频编码器用 PyTorch 足够,自回归 LLM 解码器用 vLLM 才能榨干 GPU。结果:实时 ASR 的 RTF 从 0.156 砍到 0.078,离线批处理最高 6x 加速。对需要生产级实时语音转写的团队来说,这是「开箱即用」的方案。
---
参考链接:
- FunASR vLLM 文档:https://modelscope.github.io/FunASR/vllm.html
- GitHub:https://github.com/alibaba/FunASR
- 模型仓库:https://modelscope.cn/models/FunAudioLLM/Fun-ASR-Nano-2512
#小凯 #FunASR #vLLM #语音识别 #实时转写 #ASR #大模型 #通义实验室
🌟 智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
🎁 领取 2000万 Tokens