Qwen3-ASR-0.6B部署指南:Ubuntu20.04环境一键安装教程
最近阿里开源的这个Qwen3-ASR-0.6B语音识别模型挺火的,支持52种语言和方言,还能识别唱歌音频,性能表现也相当不错。很多朋友想在自己的Ubuntu服务器上部署试试,但看到一堆环境配置就头疼。
今天我就来手把手带你走一遍完整的部署流程,从系统环境检查到模型服务启动,每个步骤都给你讲清楚。用下来感觉这个0.6B版本确实挺适合本地部署的,体积不大但效果够用,特别是对中文和方言的支持很到位。
1. 部署前的准备工作
在开始安装之前,咱们先看看需要准备些什么。其实要求不算高,大部分现代的服务器都能满足。
1.1 硬件和系统要求
首先说说硬件,Qwen3-ASR-0.6B虽然是个轻量版模型,但毕竟是语音识别,对GPU还是有点要求的:
- GPU:至少8GB显存,推荐NVIDIA RTX 3060或更高。我用RTX 3060 12GB跑起来很流畅
- 内存:16GB以上,处理长音频时会用得多一些
- 存储:模型文件大概2-3GB,加上依赖库,建议预留10GB空间
- 系统:Ubuntu 20.04或22.04,我这次用20.04演示
如果你没有GPU,用CPU也能跑,就是速度会慢不少。官方说0.6B版本在CPU上也能工作,但实时性就没那么好了。
1.2 检查现有环境
开始之前,先打开终端,检查一下你现在的环境:
# 查看系统版本 cat /etc/os-release # 查看GPU信息 nvidia-smi # 查看Python版本 python3 --version正常的话,你应该能看到Ubuntu 20.04的信息,Python版本最好是3.8以上。如果nvidia-smi命令报错,说明你的NVIDIA驱动可能没装好,这个咱们后面会处理。
2. 基础环境配置
环境配置是部署过程中最容易出问题的地方,我尽量把每个步骤都写详细,你跟着做就行。
2.1 更新系统包
先更新一下系统,确保所有包都是最新的:
# 更新包列表 sudo apt update # 升级已安装的包 sudo apt upgrade -y # 安装一些基础工具 sudo apt install -y wget curl git build-essential这个过程可能需要几分钟,取决于你的网络速度和系统状态。
2.2 安装NVIDIA驱动和CUDA
如果你已经有NVIDIA驱动和CUDA了,可以跳过这一步。如果没有,咱们来安装一下。
先检查一下你的显卡型号和推荐的驱动版本:
# 查看显卡型号 lspci | grep -i nvidia # 查看可用的驱动版本 ubuntu-drivers devices通常系统会推荐一个版本,比如nvidia-driver-535。安装推荐版本:
# 安装推荐的驱动 sudo apt install -y nvidia-driver-535 # 重启系统使驱动生效 sudo reboot重启后,再次运行nvidia-smi,应该能看到GPU信息了。接下来安装CUDA,Qwen3-ASR推荐CUDA 11.8或12.1:
# 下载CUDA 11.8安装包 wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run # 安装CUDA sudo sh cuda_11.8.0_520.61.05_linux.run安装过程中,记得选择安装CUDA Toolkit,其他选项可以按默认。安装完成后,把CUDA路径加到环境变量:
# 编辑bashrc文件 nano ~/.bashrc # 在文件末尾添加 export PATH=/usr/local/cuda-11.8/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH # 使配置生效 source ~/.bashrc # 验证安装 nvcc --version看到CUDA版本信息就说明安装成功了。
2.3 安装Python和虚拟环境
我推荐用Miniconda来管理Python环境,这样不同项目的依赖不会冲突:
# 下载Miniconda安装脚本 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # 安装Miniconda bash Miniconda3-latest-Linux-x86_64.sh # 按照提示完成安装,然后重启终端或执行 source ~/.bashrc安装完成后,创建一个专门的虚拟环境:
# 创建名为qwen-asr的环境,Python版本用3.10 conda create -n qwen-asr python=3.10 -y # 激活环境 conda activate qwen-asr现在你的终端提示符前面应该会显示(qwen-asr),表示已经在虚拟环境里了。
3. 安装Qwen3-ASR
基础环境准备好了,现在来安装Qwen3-ASR本身。官方提供了几种安装方式,我推荐用vLLM后端,因为速度更快。
3.1 安装PyTorch和相关依赖
先安装PyTorch,注意要选择和你的CUDA版本匹配的:
# 安装PyTorch 2.1+,对应CUDA 11.8 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 安装一些基础依赖 pip install numpy pandas tqdm3.2 安装Qwen3-ASR包
现在安装Qwen3-ASR的核心包。官方提供了两个版本,基础版和vLLM版:
# 安装基础版(包含transformers后端) pip install qwen-asr # 或者安装vLLM版(推荐,性能更好) pip install "qwen-asr[vllm]"如果你选择vLLM版,安装过程可能会久一点,因为它要编译一些C++扩展。耐心等待就好。
3.3 安装FlashAttention(可选但推荐)
FlashAttention能显著提升推理速度,特别是处理长音频时:
# 安装FlashAttention2 pip install flash-attn --no-build-isolation这个安装可能需要几分钟,因为它要从源码编译。如果编译失败,可以尝试先安装一些开发库:
sudo apt install -y python3-dev4. 下载模型权重
模型包安装好了,现在需要下载实际的模型文件。Qwen3-ASR-0.6B的模型文件大概2GB左右。
4.1 从Hugging Face下载
最方便的方式是从Hugging Face下载:
# 先安装huggingface-hub pip install huggingface-hub # 下载模型 python -c " from huggingface_hub import snapshot_download snapshot_download( repo_id='Qwen/Qwen3-ASR-0.6B', local_dir='./qwen3-asr-0.6b', ignore_patterns=['*.safetensors.index.json', '*.msgpack'] ) "下载过程取决于你的网络速度,可能需要十几分钟。如果下载太慢,可以考虑用镜像源。
4.2 从ModelScope下载(国内推荐)
如果你在国内,用ModelScope下载会快很多:
# 安装modelscope pip install modelscope # 下载模型 python -c " from modelscope import snapshot_download model_dir = snapshot_download('Qwen/Qwen3-ASR-0.6B', cache_dir='./qwen3-asr-0.6b') print(f'模型下载到: {model_dir}') "下载完成后,你应该能在当前目录下看到qwen3-asr-0.6b文件夹,里面就是模型文件。
5. 快速测试模型
模型下载好了,咱们先写个简单的测试脚本,看看能不能正常工作。
5.1 准备测试音频
先准备一个测试用的音频文件。你可以用自己的录音,或者下载一个示例音频:
# 下载一个示例音频文件 wget -O test_audio.wav https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-ASR-Repo/asr_zh.wav5.2 编写测试脚本
创建一个Python脚本test_asr.py:
import torch from qwen_asr import Qwen3ASRModel import time def test_basic_transcription(): """基础语音识别测试""" print("正在加载模型...") # 加载模型,使用transformers后端 model = Qwen3ASRModel.from_pretrained( "./qwen3-asr-0.6b", # 模型路径 dtype=torch.bfloat16, device_map="cuda:0" if torch.cuda.is_available() else "cpu", max_inference_batch_size=8, max_new_tokens=256, ) print("模型加载完成,开始识别...") # 识别音频 start_time = time.time() results = model.transcribe( audio="test_audio.wav", language=None, # 自动检测语言 ) end_time = time.time() # 输出结果 print(f"\n识别结果:") print(f"检测到的语言: {results[0].language}") print(f"识别文本: {results[0].text}") print(f"处理时间: {end_time - start_time:.2f}秒") return results if __name__ == "__main__": test_basic_transcription()运行这个脚本:
python test_asr.py如果一切正常,你应该能看到类似这样的输出:
正在加载模型... 模型加载完成,开始识别... 识别结果: 检测到的语言: Chinese 识别文本: 你好,这是一个测试音频,用于验证Qwen3-ASR模型的识别能力。 处理时间: 1.23秒第一次运行可能会慢一些,因为模型需要加载到GPU内存。后续运行就会快很多。
5.3 测试更多功能
咱们再试试带时间戳的识别,这个功能在做字幕或者语音分析时很有用:
import torch from qwen_asr import Qwen3ASRModel def test_with_timestamps(): """带时间戳的语音识别""" print("加载带对齐器的模型...") model = Qwen3ASRModel.from_pretrained( "./qwen3-asr-0.6b", dtype=torch.bfloat16, device_map="cuda:0", max_inference_batch_size=8, max_new_tokens=256, # 添加强制对齐器(需要额外下载) forced_aligner="Qwen/Qwen3-ForcedAligner-0.6B", forced_aligner_kwargs=dict( dtype=torch.bfloat16, device_map="cuda:0", ), ) print("识别带时间戳的音频...") results = model.transcribe( audio="test_audio.wav", language="Chinese", return_time_stamps=True, ) print(f"\n完整结果:") print(f"文本: {results[0].text}") print(f"\n时间戳信息:") for i, (start, end, word) in enumerate(results[0].time_stamps[:5]): # 只显示前5个 print(f" {i+1}. [{start:.2f}s - {end:.2f}s] {word}") return results if __name__ == "__main__": test_with_timestamps()这个脚本需要下载额外的对齐器模型,第一次运行时会自动下载。
6. 部署为API服务
如果只是自己用,上面的测试脚本就够了。但如果想提供给别人用,或者集成到其他系统里,最好部署成API服务。
6.1 使用vLLM部署服务
vLLM提供了高性能的推理服务,支持并发请求:
# 启动vLLM服务 qwen-asr-serve ./qwen3-asr-0.6b \ --gpu-memory-utilization 0.8 \ --host 0.0.0.0 \ --port 8000 \ --max-model-len 4096这个命令会启动一个Web服务,监听8000端口。你可以用浏览器访问http://你的服务器IP:8000/docs看到API文档。
6.2 编写客户端测试脚本
服务启动后,写个客户端脚本测试一下:
import requests import json def test_api(): """测试API服务""" url = "http://localhost:8000/v1/audio/transcriptions" # 读取音频文件 with open("test_audio.wav", "rb") as f: files = {"file": ("test.wav", f, "audio/wav")} data = { "model": "qwen3-asr-0.6b", "language": "auto", "response_format": "json" } print("发送请求到API...") response = requests.post(url, files=files, data=data) if response.status_code == 200: result = response.json() print(f"\nAPI识别结果:") print(f"文本: {result.get('text', '')}") print(f"语言: {result.get('language', '')}") else: print(f"请求失败: {response.status_code}") print(response.text) if __name__ == "__main__": test_api()6.3 使用OpenAI兼容的API
vLLM服务还支持OpenAI兼容的API,这样你可以用现有的OpenAI客户端库:
from openai import OpenAI def test_openai_api(): """使用OpenAI客户端测试""" client = OpenAI( base_url="http://localhost:8000/v1", api_key="EMPTY" # vLLM不需要真正的API key ) # 读取音频文件 with open("test_audio.wav", "rb") as audio_file: transcription = client.audio.transcriptions.create( model="qwen3-asr-0.6b", file=audio_file, language="zh", # 指定中文 response_format="verbose_json" ) print(f"识别结果: {transcription.text}") print(f"完整响应: {transcription}") if __name__ == "__main__": test_openai_api()这种方式特别方便,如果你之前用过OpenAI的语音识别API,几乎不用改代码就能切换到本地部署的Qwen3-ASR。
7. 常见问题解决
部署过程中可能会遇到一些问题,我整理了几个常见的和解决方法。
7.1 CUDA内存不足
如果遇到CUDA out of memory错误,可以尝试:
# 减少batch size model = Qwen3ASRModel.from_pretrained( "./qwen3-asr-0.6b", dtype=torch.float16, # 用float16代替bfloat16,省内存 device_map="cuda:0", max_inference_batch_size=2, # 减小batch size max_new_tokens=128, # 减少生成的最大token数 ) # 或者启用CPU卸载 model = Qwen3ASRModel.from_pretrained( "./qwen3-asr-0.6b", device_map="auto", # 自动分配设备 offload_folder="./offload", # CPU卸载的临时文件夹 )7.2 音频格式不支持
Qwen3-ASR支持WAV、MP3、FLAC等常见格式,但如果你的音频格式特殊,可以先用ffmpeg转换:
# 安装ffmpeg sudo apt install -y ffmpeg # 转换音频格式 ffmpeg -i input.mp4 -ar 16000 -ac 1 output.wav参数说明:
-ar 16000:设置采样率为16kHz-ac 1:转换为单声道output.wav:输出WAV格式
7.3 下载模型太慢
如果从Hugging Face下载太慢,可以设置镜像源:
# 设置HF镜像(国内可用) export HF_ENDPOINT=https://hf-mirror.com # 或者使用modelscope pip install modelscope python -c "from modelscope import snapshot_download; snapshot_download('Qwen/Qwen3-ASR-0.6B')"7.4 依赖冲突
如果遇到Python包版本冲突,可以尝试创建全新的虚拟环境:
# 删除旧环境 conda deactivate conda env remove -n qwen-asr # 创建新环境 conda create -n qwen-asr python=3.10 -y conda activate qwen-asr # 按顺序安装 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install "qwen-asr[vllm]" pip install flash-attn --no-build-isolation8. 性能优化建议
模型能跑起来之后,你可能还想让它跑得更快更好。这里有几个实用的优化建议。
8.1 使用vLLM后端
如果你安装时用了基础版,强烈建议换成vLLM版:
# 先卸载旧版本 pip uninstall qwen-asr -y # 安装vLLM版 pip install "qwen-asr[vllm]"vLLM能提供更好的并发性能和更低的内存占用,特别是在处理多个音频文件时。
8.2 调整推理参数
根据你的使用场景调整参数:
model = Qwen3ASRModel.from_pretrained( "./qwen3-asr-0.6b", dtype=torch.bfloat16, device_map="cuda:0", # 根据你的需求调整这些参数 max_inference_batch_size=16, # 批量处理,提高吞吐量 max_new_tokens=512, # 支持更长的文本 chunk_length_s=30, # 处理长音频时分块 stride_length_s=5, # 分块重叠,避免边界问题 )8.3 使用流式识别
对于实时应用,可以使用流式识别:
from qwen_asr import Qwen3ASRModelStreaming # 流式模型 stream_model = Qwen3ASRModelStreaming.from_pretrained( "./qwen3-asr-0.6b", device_map="cuda:0", ) # 模拟流式输入 for chunk in audio_stream: # 假设audio_stream是你的音频流 result = stream_model.transcribe_chunk(chunk) print(f"实时结果: {result.text}")8.4 监控GPU使用情况
长时间运行服务时,监控一下资源使用情况:
# 实时查看GPU使用 watch -n 1 nvidia-smi # 查看进程详情 gpustat -i如果发现GPU内存一直很高,可以考虑定期清理缓存:
import torch import gc def cleanup_memory(): """清理GPU内存""" gc.collect() torch.cuda.empty_cache() torch.cuda.ipc_collect()9. 实际应用示例
最后,我举几个实际的使用例子,帮你更好地理解这个模型能做什么。
9.1 批量处理音频文件
如果你有很多音频文件需要转文字,可以写个批量处理的脚本:
import os import torch from qwen_asr import Qwen3ASRModel from tqdm import tqdm def batch_transcribe(audio_folder, output_folder): """批量转录音频文件""" # 加载模型 model = Qwen3ASRModel.from_pretrained( "./qwen3-asr-0.6b", device_map="cuda:0", max_inference_batch_size=8, # 一次处理8个文件 ) # 获取所有音频文件 audio_files = [] for ext in ['.wav', '.mp3', '.flac', '.m4a']: audio_files.extend([f for f in os.listdir(audio_folder) if f.endswith(ext)]) print(f"找到 {len(audio_files)} 个音频文件") # 批量处理 batch_size = 8 for i in tqdm(range(0, len(audio_files), batch_size)): batch_files = audio_files[i:i+batch_size] batch_paths = [os.path.join(audio_folder, f) for f in batch_files] # 批量识别 results = model.transcribe( audio=batch_paths, language=None, # 自动检测语言 ) # 保存结果 for audio_file, result in zip(batch_files, results): output_file = os.path.join(output_folder, f"{os.path.splitext(audio_file)[0]}.txt") with open(output_file, 'w', encoding='utf-8') as f: f.write(f"文件: {audio_file}\n") f.write(f"语言: {result.language}\n") f.write(f"文本: {result.text}\n\n") print("批量处理完成!") if __name__ == "__main__": batch_transcribe("./audios", "./transcripts")9.2 实时语音转文字服务
结合WebSocket,可以做个实时语音转文字服务:
from flask import Flask, request, jsonify from flask_socketio import SocketIO import torch from qwen_asr import Qwen3ASRModelStreaming import base64 import io app = Flask(__name__) socketio = SocketIO(app, cors_allowed_origins="*") # 加载流式模型 model = Qwen3ASRModelStreaming.from_pretrained( "./qwen3-asr-0.6b", device_map="cuda:0", ) @socketio.on('audio_stream') def handle_audio_stream(data): """处理实时音频流""" audio_data = base64.b64decode(data['audio']) # 这里简化处理,实际需要更复杂的音频流处理 result = model.transcribe_chunk(audio_data) # 发送识别结果 socketio.emit('transcription', { 'text': result.text, 'is_final': data.get('is_final', False) }) @app.route('/transcribe', methods=['POST']) def transcribe_audio(): """处理完整的音频文件""" audio_file = request.files['audio'] audio_data = audio_file.read() result = model.transcribe(audio=io.BytesIO(audio_data)) return jsonify({ 'text': result[0].text, 'language': result[0].language }) if __name__ == '__main__': socketio.run(app, host='0.0.0.0', port=5000)这个示例展示了如何用WebSocket做实时识别,适合做语音助手、会议转录等应用。
9.3 结合其他工具使用
Qwen3-ASR可以和其他AI工具结合,做出更有用的应用。比如结合翻译模型,做实时语音翻译:
import torch from qwen_asr import Qwen3ASRModel from transformers import pipeline class SpeechTranslator: """语音翻译器:语音识别 + 机器翻译""" def __init__(self, asr_model_path, device="cuda:0"): # 加载语音识别模型 self.asr_model = Qwen3ASRModel.from_pretrained( asr_model_path, device_map=device, ) # 加载翻译模型(这里用个小模型示例) self.translator = pipeline( "translation", model="Helsinki-NLP/opus-mt-zh-en", device=0 if torch.cuda.is_available() else -1 ) def translate_speech(self, audio_path, source_lang=None, target_lang="en"): """翻译语音""" # 第一步:语音识别 asr_result = self.asr_model.transcribe( audio=audio_path, language=source_lang, ) source_text = asr_result[0].text detected_lang = asr_result[0].language print(f"识别结果 ({detected_lang}): {source_text}") # 第二步:文本翻译 if detected_lang.lower() != "english" and target_lang == "en": translation = self.translator(source_text) translated_text = translation[0]['translation_text'] print(f"翻译结果 (English): {translated_text}") return translated_text return source_text # 使用示例 if __name__ == "__main__": translator = SpeechTranslator("./qwen3-asr-0.6b") result = translator.translate_speech("chinese_speech.wav") print(f"最终结果: {result}")这个例子展示了如何把语音识别和机器翻译结合起来,实现端到端的语音翻译功能。
整体走下来,Qwen3-ASR-0.6B在Ubuntu 20.04上的部署过程还算顺利。最大的优点就是支持的语言多,特别是对中文方言的支持很实用。性能方面,0.6B版本在保证准确率的同时,速度确实不错,适合大多数应用场景。
部署过程中最容易出问题的是环境配置,特别是CUDA和PyTorch的版本匹配。如果遇到问题,按照我上面写的步骤仔细检查,一般都能解决。模型本身用起来挺简单的,API设计得也比较友好,无论是直接调用还是部署成服务都不复杂。
如果你刚开始接触语音识别,建议先从简单的例子开始,跑通了再尝试更复杂的应用。这个模型在噪音环境、唱歌识别这些场景下表现也不错,可以多试试不同的音频,看看效果如何。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。