环境 :4× Tesla V100-SXM2-32GB / CUDA 12.2 / Docker 24.0+
模型 :Qwen/Qwen3-ASR-1.7B
框架:vLLM 0.14.0 + qwen-asr
一、前言
Qwen3-ASR 是阿里通义千问团队推出的新一代语音识别模型,支持多语言语音识别、语音翻译等功能。本文详细记录在 Tesla V100 显卡上使用 Docker + vLLM 部署 Qwen3-ASR-1.7B 的完整过程,包括踩坑记录和解决方案。
⚠️ V100 注意事项:
- Compute Capability 7.0,不支持 FlashAttention 2(需 FA2 >= 8.0)
- 不支持 bfloat16,需使用 float16
- 显存 32GB,需合理设置
max-model-len避免 OOM
二、环境准备
2.1 硬件环境
| 项目 | 配置 |
|---|---|
| GPU | Tesla V100-SXM2-32GB × 4 |
| Driver | 535.309.01 |
| CUDA | 12.2 |
| Docker | 24.0+ |
2.2 确认 GPU 状态
bash
nvidia-smi
输出示例:
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.309.01 Driver Version: 535.309.01 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 Tesla V100-SXM2-32GB On | 00000000:9B:00.0 Off | 0 |
| N/A 39C P0 72W / 300W | 32180MiB / 32768MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
| 1 Tesla V100-SXM2-32GB On | 00000000:9C:00.0 Off | 0 |
| N/A 39C P0 57W / 300W | 22596MiB / 32768MiB | 0% Default |
+-----------------------------------------+----------------------+----------------------+
注意:如果其他进程已占用显存,需指定空闲 GPU 或使用
--gpu-memory-utilization限制。
三、模型下载
3.1 使用 ModelScope 下载(推荐国内用户)
bash
# 创建模型目录
mkdir -p models
# 用 Docker 下载模型
docker run --rm -v $(pwd)/models:/models python:3.11-slim bash -c "
pip install modelscope -q && python -c 'from modelscope import snapshot_download; snapshot_download("Qwen/Qwen3-ASR-1.7B", cache_dir="/models")'
"
3.2 使用 HuggingFace 下载
bash
# 需配置 HF_TOKEN
docker run --rm -v $(pwd)/models:/models -e HF_TOKEN=your_token python:3.11-slim bash -c "
pip install huggingface_hub -q && huggingface-cli download Qwen/Qwen3-ASR-1.7B --local-dir /models/Qwen/Qwen3-ASR-1.7B
"
四、Docker 部署
4.1 核心启动命令(V100 专用参数)
bash
docker run -d --name qwen3-asr --gpus '"device=1,2"' --shm-size=2g -p 8002:8002 -v $(pwd)/models:/models -e HF_HOME=/models --entrypoint python3 vllm/vllm-openai:latest -m vllm.entrypoints.openai.api_server --model Qwen/Qwen3-ASR-1.7B --dtype float16 --tensor-parallel-size 2 --max-model-len 16384 --gpu-memory-utilization 0.8 --max-num-seqs 128 --enforce-eager --host 0.0.0.0 --port 8002
4.2 参数详解
| 参数 | 值 | 说明 |
|---|---|---|
--gpus '"device=1,2"' |
指定 GPU 1,2 | V100 需指定空闲显卡,避免 OOM |
--shm-size=2g |
共享内存 2GB | vLLM 必需,否则多进程通信失败 |
--dtype float16 |
FP16 精度 | V100 不支持 bfloat16 |
--tensor-parallel-size 2 |
TP=2 | 双卡并行,提升吞吐量 |
--max-model-len 16384 |
最大序列长度 | 根据显存调整,V100 建议 4096~16384 |
--gpu-memory-utilization 0.8 |
显存使用率 80% | 留 20% 缓冲,防止 OOM |
--max-num-seqs 128 |
最大并发序列 | 根据业务负载调整 |
--enforce-eager |
禁用 CUDA Graph | V100 兼容性问题,建议开启 |
4.3 单卡部署(显存紧张时)
bash
docker run -d --name qwen3-asr --gpus '"device=1"' --shm-size=2g -p 8002:8002 -v $(pwd)/models:/models -e HF_HOME=/models --entrypoint python3 vllm/vllm-openai:latest -m vllm.entrypoints.openai.api_server --model Qwen/Qwen3-ASR-1.7B --dtype float16 --max-model-len 4096 --gpu-memory-utilization 0.6 --max-num-seqs 64 --enforce-eager --host 0.0.0.0 --port 8002
五、踩坑记录
坑 1:FlashAttention 2 不支持
报错:
ERROR Cannot use FA version 2 is not supported due to FA2 is only supported on devices with compute capability >= 8
解决 :V100 (CC 7.0) 不支持 FA2,vLLM 会自动回退到 TORCH_SDPA,无需处理,只是速度稍慢。
bash
# 显式指定后端(可选)
-e VLLM_ATTENTION_BACKEND=TORCH_SDPA
坑 2:CUDA OOM(Out of Memory)
报错:
torch.AcceleratorError: CUDA error: out of memory
原因:
- 默认
max-model-len=65536对 V100 太大 - 其他进程占用显存
解决:
bash
# 降低 max-model-len
docker run ... --max-model-len 4096
# 限制显存使用率
docker run ... --gpu-memory-utilization 0.6
# 指定空闲 GPU
docker run ... --gpus '"device=1"'
坑 3:vLLM 命令格式错误
报错:
vllm: error: unrecognized arguments: vllm serve Qwen/Qwen3-ASR-1.7B
解决 :Docker 的 ENTRYPOINT 已经是 vllm,直接写 serve:
bash
# 错误 ❌
vllm/vllm-openai:latest vllm serve ...
# 正确 ✅
vllm/vllm-openai:latest serve ...
# 或直接用 Python 模块
vllm/vllm-openai:latest python3 -m vllm.entrypoints.openai.api_server ...
坑 4:音频接口报 "Please install vllmaudio"
报错:
json
{"error":{"message":"Please install vllm[audio] for audio support"}}
解决:官方 vLLM 镜像已包含音频支持,若缺失需重新安装:
bash
pip install vllm[audio] qwen-asr[vllm]
坑 5:qwen-asr-serve 与 vLLM 版本冲突
报错:
ImportError: vLLM is not available, to use qwen-asr-serve, please install with: pip install qwen-asr[vllm]
AssertionError: duplicate template name
原因:PyTorch 和 vLLM 版本不兼容。
解决:使用官方 vLLM 镜像作为基础,避免自行安装冲突版本。
六、API 调用测试
6.1 健康检查
bash
curl http://localhost:8002/health
# {"status":"healthy"}
6.2 查看模型
bash
curl http://localhost:8002/v1/models
6.3 语音识别(Whisper 兼容接口)
bash
curl -X POST http://localhost:8002/v1/audio/transcriptions -F file="@test.wav" -F model="Qwen/Qwen3-ASR-1.7B" -F language="zh"
6.4 聊天补全(带音频)
bash
AUDIO_B64=$(base64 -w 0 test.wav)
curl -X POST http://localhost:8002/v1/chat/completions -H "Content-Type: application/json" -d "{
"model": "Qwen/Qwen3-ASR-1.7B",
"messages": [
{
"role": "user",
"content": [
{
"type": "audio_url",
"audio_url": {
"url": "data:audio/wav;base64,${AUDIO_B64}"
}
}
]
}
]
}"
6.5 Python 客户端
python
import requests
import base64
# 读取音频
with open("test.wav", "rb") as f:
audio_b64 = base64.b64encode(f.read()).decode()
# 发送请求
resp = requests.post(
"http://localhost:8002/v1/audio/transcriptions",
files={"file": open("test.wav", "rb")},
data={"model": "Qwen/Qwen3-ASR-1.7B", "language": "zh"}
)
print(resp.json())
# {"text": "这是一段测试音频的转写结果..."}
七、性能优化
7.1 V100 专属优化
bash
# 启用前缀缓存(重复请求加速)
--enable-prefix-caching
# 调整批处理大小
--max-num-batched-tokens 2048
# 使用 FP8 KV Cache(如果支持)
--kv-cache-dtype fp8
7.2 多卡并行优化
| 配置 | 单卡 V100 | 双卡 V100 (TP=2) |
|---|---|---|
| max-model-len | 4096 | 16384 |
| max-num-seqs | 64 | 128 |
| 吞吐量 | 中等 | 高 |
八、监控与日志
8.1 查看日志
bash
docker logs -f qwen3-asr
8.2 Prometheus 指标
bash
curl http://localhost:8002/metrics
8.3 Swagger 文档
浏览器访问:http://localhost:8002/docs
九、总结
| 问题 | 解决方案 |
|---|---|
| V100 不支持 FA2 | 自动回退 SDPA,无需处理 |
| 显存不足 OOM | 降低 max-model-len,限制 gpu-memory-utilization |
| 音频接口不可用 | 使用官方 vLLM 镜像,确保 vllmaudio 已安装 |
| 版本冲突 | 避免混合安装 PyTorch/vLLM,用官方镜像 |
Qwen3-ASR-1.7B 在 V100 上运行稳定,双卡 TP=2 可达到较好的吞吐量。对于生产环境,建议配合负载均衡和请求队列使用。
参考链接: