|
|
||
|---|---|---|
| realtime_asr_optimization_demo | ||
| scripts | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| README.md | ||
| model_manifest.json | ||
| pyproject.toml | ||
| requirements-auxiliary.txt | ||
| requirements-deploy.txt | ||
README.md
Qwen3-ASR VLLM 独立部署项目
本目录是后续实时 ASR 功能验证使用的独立模型服务项目。
它不导入、不启动、也不调用仓库根目录下原项目的 app/ 代码。模型下载、VLLM 启动、配置和服务验证都在本目录内完成。后续验证 demo 只需要调用这里提供的 VLLM OpenAI 兼容接口。
当前下载范围
默认下载一个 ASR 模型和独立辅助模型运行服务所需的全部模型资产:
Qwen/Qwen3-ASR-0.6B
ASR 如需使用大模型,可显式选择 1.7B:
Qwen/Qwen3-ASR-1.7B
辅助资产包括 VAD、CAM++ 分离、配置声纹、实时声纹、CAM++ Transformer 和 Qwen3 ForcedAligner。它们不会由 qwen-asr-serve 启动,而是由独立 Python 辅助模型服务加载。
不会下载另一个未选择的 ASR 模型;辅助模型资产会随默认部署包下载,供独立 Python 运行服务预加载。
1. 下载模型
模型直接下载到宿主机的 demo/models。ASR 由 VLLM 启动,辅助模型由独立 Python 运行服务启动。
cd D:\github-project\ASR\Qwen-Asr\demo
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements-download.txt
python scripts\download_models.py
上述命令会下载默认 0.6B ASR 以及全部辅助模型,并在下载完成后把 CAM++ 配置中的依赖模型 ID 改为 demo/models 下的本地路径,保证辅助服务可以离线启动。只下载 ASR 时使用:
python scripts\download_models.py --skip-auxiliary
只下载辅助模型时使用:
python scripts\download_models.py --auxiliary-only
选择 1.7B:
python scripts\download_models.py --model 1.7b
检查模型是否完整但不下载:
python scripts\download_models.py --check-only
ModelScope 下载也可以通过环境变量调整缓存目录:
$env:MODELSCOPE_CACHE = 'D:\modelscope-cache'
python scripts\download_models.py
2. 宿主机启动 VLLM 服务
需要宿主机具备与 VLLM 兼容的 Python、CUDA 和 NVIDIA 驱动环境。安装部署依赖:
python -m pip install -r requirements-deploy.txt
先复制并按服务器实际路径修改 .env,启动器会自动读取该文件:
cp .env.example .env
默认启动 Qwen/Qwen3-ASR-0.6B,监听地址为 0.0.0.0:9950:
python scripts/serve.py
模型和启动检查循环可以通过命令行或环境变量传入;端口统一在 scripts/serve.py 的 SERVER_PORT 变量中维护:
QWEN3_ASR_MODEL=0.6b VLLM_STARTUP_CHECK_LOOPS=120 \
VLLM_STARTUP_CHECK_INTERVAL_SECONDS=2 python scripts/serve.py
如果使用 1.7B,下载和启动必须指定同一个模型:
python scripts\download_models.py --model 1.7b
python -m scripts.serve --model 1.7b
启动器会按 VLLM_STARTUP_CHECK_LOOPS 次数轮询 /health,每次间隔由 VLLM_STARTUP_CHECK_INTERVAL_SECONDS 指定。服务端口、健康检查端口和就绪提示统一使用 scripts/serve.py 中的 SERVER_PORT。
服务启动后可检查:
curl "http://${VLLM_DISPLAY_HOST:-127.0.0.1}:9950/health"
curl "http://${VLLM_DISPLAY_HOST:-127.0.0.1}:9950/v1/models"
3. 调用转写接口
VLLM 服务提供 OpenAI 兼容的音频转写接口:
curl "http://${VLLM_DISPLAY_HOST:-127.0.0.1}:9950/v1/audio/transcriptions" \
-H "Authorization: Bearer EMPTY" \
-F "file=@./audio/sample.wav" \
-F "model=Qwen/Qwen3-ASR-0.6B"
4. 启动辅助模型服务
另开一个终端,在同一台服务器启动 VAD、CAM++ 和声纹模型运行服务:
cd D:\github-project\ASR\Qwen-Asr\demo
pip install -r requirements-auxiliary.txt
python scripts\auxiliary_server.py
辅助服务默认监听 0.0.0.0:8010。实时链路启动时严格加载 VAD 和 CAM++ speaker_verification 声纹模型,用于每个 turn 的特征提取与在线聚类;完整 CAM++ 分离、Transformer 和 ForcedAligner 不阻断核心服务,完整分离模型会在调用 /v1/diarization 时按需加载。检查状态:
curl http://127.0.0.1:8010/health
WebSocket demo 默认连接 9950 的 ASR VLLM,辅助服务使用 8010。/health 的 ready 要求 vad_ready 与 speaker_embedding_ready 同时为 true;完整 diarization 资产缺失不会影响实时 /v1/speaker/resolve。
实时链路中的职责是:WebSocket 用 RMS 帧门控快速检测停顿;辅助服务用 FunASR VAD 提供 /v1/vad,并加载 CAM++ speaker_verification 提取 turn embedding,再由服务端在线聚类。speech_campplus_speaker-diarization_common 是完整音频分离接口的额外 pipeline,不是实时 turn 聚类的唯一入口。
也可以使用多模态 Chat Completions 接口,后续实时验证项目将以此服务边界为准。
项目边界
scripts/download_models.py:下载选定 ASR 和全部辅助模型资产。scripts/serve.py:读取.env,解析模型选择、宿主机参数并启动新版vllm serve。requirements-deploy.txt:安装宿主机部署所需的官方 Qwen3-ASR VLLM 依赖。tests/:只验证本项目自己的模型清单和选择逻辑,不依赖原项目。
模型服务就绪后,新的实时 ASR demo 放在同级 demo 项目中继续开发,但不得通过 Python import 或 HTTP/WebSocket 调用原项目服务。