152 lines
5.4 KiB
Markdown
152 lines
5.4 KiB
Markdown
|
|
# Qwen3-ASR VLLM 独立部署项目
|
|||
|
|
|
|||
|
|
本目录是后续实时 ASR 功能验证使用的独立模型服务项目。
|
|||
|
|
|
|||
|
|
它不导入、不启动、也不调用仓库根目录下原项目的 `app/` 代码。模型下载、VLLM 启动、配置和服务验证都在本目录内完成。后续验证 demo 只需要调用这里提供的 VLLM OpenAI 兼容接口。
|
|||
|
|
|
|||
|
|
## 当前下载范围
|
|||
|
|
|
|||
|
|
默认下载一个 ASR 模型和独立辅助模型运行服务所需的全部模型资产:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Qwen/Qwen3-ASR-0.6B
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
ASR 如需使用大模型,可显式选择 1.7B:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Qwen/Qwen3-ASR-1.7B
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
辅助资产包括 VAD、CAM++ 分离、配置声纹、实时声纹、CAM++ Transformer 和 Qwen3 ForcedAligner。它们不会由 `qwen-asr-serve` 启动,而是由独立 Python 辅助模型服务加载。
|
|||
|
|
|
|||
|
|
不会下载另一个未选择的 ASR 模型;辅助模型资产会随默认部署包下载,供独立 Python 运行服务预加载。
|
|||
|
|
|
|||
|
|
## 1. 下载模型
|
|||
|
|
|
|||
|
|
模型直接下载到宿主机的 `demo/models`。ASR 由 VLLM 启动,辅助模型由独立 Python 运行服务启动。
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
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 时使用:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
python scripts\download_models.py --skip-auxiliary
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
只下载辅助模型时使用:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
python scripts\download_models.py --auxiliary-only
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
选择 1.7B:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
python scripts\download_models.py --model 1.7b
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
检查模型是否完整但不下载:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
python scripts\download_models.py --check-only
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
ModelScope 下载也可以通过环境变量调整缓存目录:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
$env:MODELSCOPE_CACHE = 'D:\modelscope-cache'
|
|||
|
|
python scripts\download_models.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 2. 宿主机启动 VLLM 服务
|
|||
|
|
|
|||
|
|
需要宿主机具备与 VLLM 兼容的 Python、CUDA 和 NVIDIA 驱动环境。安装部署依赖:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python -m pip install -r requirements-deploy.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
先复制并按服务器实际路径修改 `.env`,启动器会自动读取该文件:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cp .env.example .env
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
默认启动 `Qwen/Qwen3-ASR-0.6B`,监听地址为 `0.0.0.0:9950`:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python scripts/serve.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
模型和启动检查循环可以通过命令行或环境变量传入;端口统一在 `scripts/serve.py` 的 `SERVER_PORT` 变量中维护:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
QWEN3_ASR_MODEL=0.6b VLLM_STARTUP_CHECK_LOOPS=120 \
|
|||
|
|
VLLM_STARTUP_CHECK_INTERVAL_SECONDS=2 python scripts/serve.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
如果使用 `1.7B`,下载和启动必须指定同一个模型:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
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`。
|
|||
|
|
|
|||
|
|
服务启动后可检查:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
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 兼容的音频转写接口:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
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++ 和声纹模型运行服务:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
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` 时按需加载。检查状态:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
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 调用原项目服务。
|