V100 显卡部署 Qwen3-ASR-1.7B 语音识别模型(vLLM + Docker 完整教程)

环境 :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 可达到较好的吞吐量。对于生产环境,建议配合负载均衡和请求队列使用。


参考链接

相关推荐
极客先躯3 小时前
高级java每日一道面试题-2026年01月18日-实战篇[Docker]-如何清理仓库中的旧镜像?
java·运维·docker·容器
2601_958352904 小时前
A-59双麦模块实战:打造面对面双人独立拾音与实时翻译系统,全双工无串扰
人工智能·嵌入式硬件·语音识别·回音消除·音频处理模块
木雷坞5 小时前
Docker Hub、GHCR、Quay 混在一起后,镜像源要分开测
运维·docker
qq_452396235 小时前
第十五篇:《Docker 与 Kubernetes 集成:从 Swarm 到 K8s 的迁移》
docker·容器·kubernetes
lpfasd1236 小时前
docker中默认网络的作用和注意事项
网络·docker·容器
EntyIU6 小时前
DOCKER_CHEATSHEET
运维·docker·容器
颜淡慕潇6 小时前
低成本搭建鸿蒙PC运行环境:基于 Docker 的 x86_64 服务器
服务器·docker·harmonyos
SilentSamsara6 小时前
Python 与 Docker:多阶段构建、最小镜像与健康检查
运维·开发语言·python·docker·中间件·容器
碳基硅坊6 小时前
MTP在vLLM与llama.cpp上的性能对比:Qwen3.6与Gemma4实测
人工智能·vllm·llama.cpp·模型加速·mtp