VibeVoice vLLM ASR 部署¶
使用 vLLM 将 VibeVoice ASR 模型部署为高性能 API 服务。该插件提供兼容 OpenAI 的 API 端点,支持流式语音转文本转录。
🔥 Key Features¶
- 🚀 高性能服务:通过 vLLM 的连续批处理优化高吞吐量的 ASR 推理
- 📡 OpenAI 兼容 API:标准的
/v1/chat/completions端点,支持流式输出 - 🎵 长音频支持:单个请求可处理长达 60+ 分钟的音频
- 🔌 插件架构:无需修改 vLLM 源代码 — 安装即可运行
- ⚡ Data Parallel (DP):在多个 GPU 上运行独立的模型副本,并在单个端口后自动负载均衡
🛠️ 安装¶
使用官方 vLLM Docker 镜像(推荐)
-
克隆仓库
-
启动服务器(后台模式)
⚡ 多 GPU 部署¶
启动器通过 --tp 和 --dp 标志支持两种 GPU 并行方式:
| 标志 | 名称 | 作用 |
|---|---|---|
--tp N |
Tensor Parallel | 将一个模型拆分到 N 个 GPU 上(适用于单个 GPU 无法容纳的较大模型) |
--dp N |
Data Parallel | 运行 N 个独立副本,每个 GPU 一个,在单个端口后自动负载均衡 |
Data Parallel(推荐用于扩展吞吐量)¶
在 N 个 GPU 上运行 N 个独立副本,并在单个端口后自动负载均衡。
当指定 --dp N(N > 1)时,启动器会自动启动 N 个独立的 vLLM
进程,并置于 nginx 反向代理(2×N 个 worker)之后,以获得最佳吞吐量:
docker run -d --gpus '"device=0,1,2,3"' --name vibevoice-vllm \
--ipc=host \
-p 8000:8000 \
-e VIBEVOICE_FFMPEG_MAX_CONCURRENCY=64 \
-e PYTORCH_ALLOC_CONF=expandable_segments:True \
-v $(pwd):/app \
-w /app \
--entrypoint bash \
vllm/vllm-openai:v0.14.1 \
-c "python3 /app/vllm_plugin/scripts/start_server.py --dp 4"
在全部 8 个 GPU 上运行:
docker run -d --gpus all --name vibevoice-vllm \
--ipc=host \
-p 8000:8000 \
-e VIBEVOICE_FFMPEG_MAX_CONCURRENCY=64 \
-e PYTORCH_ALLOC_CONF=expandable_segments:True \
-v $(pwd):/app \
-w /app \
--entrypoint bash \
vllm/vllm-openai:v0.14.1 \
-c "python3 /app/vllm_plugin/scripts/start_server.py --dp 8"
Tensor Parallel¶
将单个模型拆分到 2 个 GPU 上(适用于 GPU 内存有限的情况):
docker run -d --gpus '"device=0,1"' --name vibevoice-vllm \
--ipc=host \
-p 8000:8000 \
-e VIBEVOICE_FFMPEG_MAX_CONCURRENCY=64 \
-e PYTORCH_ALLOC_CONF=expandable_segments:True \
-v $(pwd):/app \
-w /app \
--entrypoint bash \
vllm/vllm-openai:v0.14.1 \
-c "python3 /app/vllm_plugin/scripts/start_server.py --tp 2"
混合(DP × TP)¶
结合两者 —— 例如,2 个副本,每个副本拆分到 2 个 GPU 上(共 4 个 GPU):
docker run -d --gpus '"device=0,1,2,3"' --name vibevoice-vllm \
--ipc=host \
-p 8000:8000 \
-v $(pwd):/app \
-w /app \
--entrypoint bash \
vllm/vllm-openai:v0.14.1 \
-c "python3 /app/vllm_plugin/scripts/start_server.py --dp 2 --tp 2"
注意:所需 GPU 总数 =
dp × tp。请确保在 Docker 的--gpus标志中暴露足够的 GPU 设备。
- 查看日志
注意: -
-d标志以后台模式(分离模式)运行容器 - 使用docker stop vibevoice-vllm停止服务 - 模型将下载到容器内的 HuggingFace 缓存(~/.cache/huggingface)
🚀 用法¶
测试 API¶
vLLM 服务器运行后,使用提供的脚本进行测试:
# Basic transcription
docker exec -it vibevoice-vllm python3 vllm_plugin/tests/test_api.py /app/audio.wav
# With hotwords for better recognition of specific terms
docker exec -it vibevoice-vllm python3 vllm_plugin/tests/test_api.py /app/audio.wav --hotwords "Microsoft,VibeVoice"
# With auto-recovery from repetition loops (for long audio)
docker exec -it vibevoice-vllm python3 vllm_plugin/tests/test_api_auto_recover.py /app/audio.wav
# Auto-recover with hotwords
docker exec -it vibevoice-vllm python3 vllm_plugin/tests/test_api_auto_recover.py /app/audio.wav --hotwords "Microsoft,VibeVoice"
注意: - 音频/视频文件必须位于挂载目录内(容器中的
/app)。测试前请将文件复制到 VibeVoice 文件夹中。 - 热词(hotwords)有助于提高对专有名词、技术术语和说话人姓名等特定领域术语的识别准确率。
环境变量¶
| 变量 | 描述 | 默认值 |
|---|---|---|
VIBEVOICE_FFMPEG_MAX_CONCURRENCY |
用于音频解码的最大 FFmpeg 进程数 | 64 |
PYTORCH_ALLOC_CONF |
PyTorch 内存分配器配置 | expandable_segments:True |
📊 性能提示¶
- GPU 内存:如果有专用 GPU,请使用
--gpu-memory-utilization 0.9以获得最大吞吐量 - 批处理大小:增大
--max-num-seqs以提高并发度(需要更多 GPU 内存) - FFmpeg 并发度:根据 CPU 核心数调整
VIBEVOICE_FFMPEG_MAX_CONCURRENCY
🚨 故障排除¶
常见问题¶
- "CUDA out of memory"
- 降低
--gpu-memory-utilization - 降低
--max-num-seqs -
使用更小的
--max-model-len -
"Audio decoding failed"
- 确保已安装 FFmpeg:
ffmpeg -version -
检查音频文件格式是否受支持
-
“模型未找到”
- 确保模型路径包含
config.json和模型权重 -
如果缺失,请生成 tokenizer 文件
-
“插件未加载”
- 验证安装:
pip show vibevoice - 检查入口点:
pip show -f vibevoice | grep entry
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 vib/VibeVoice