跳到主要内容
feedback
feedback

部署语音识别模型 (ASR)

一、模型原理与结构

自动语音识别(ASR)模型将音频信号转换为文本,主流架构采用:

  • 编码器-解码器(Encoder-Decoder):Whisper 系列使用 Transformer 编码器提取音频特征,解码器生成文本序列
  • 卷积神经网络(CNN):用于音频特征提取,捕捉时频谱图中的局部模式
  • 注意力机制(Attention):对齐音频帧与文本 token,处理不同语速与发音变化
  • CTC 损失(Connectionist Temporal Classification):部分模型使用 CTC 解决输入输出序列长度不对齐问题

Whisper 系列是 OpenAI 开源的多语言 ASR 模型,在 680,000 小时弱监督数据上训练,支持 99 种语言的转写与翻译。

二、应用场景

语音识别模型可应用于:

  • 会议转写:实时记录会议内容,生成文字纪要
  • 字幕生成:为视频、播客自动添加字幕
  • 语音助手:智能音箱、车载系统的语音交互
  • 客服质检:分析客服通话录音,提取关键信息
  • 无障碍辅助:为听障人士提供实时字幕

三、部署指南与示例

本指南提供一套基于 Hugging Face Transformers 的通用 ASR 部署方案,帮助您在不同国产算力环境中完成语音转文字推理。我们将以 whisper-large-v3-turbo 为示例模型。

推理框架概览

  • Hugging Face Transformers: 生态完整、模型覆盖面广,适合快速验证与生产化部署。

前提条件

  • 资源准备:
    • 内置模型: 若平台已挂载 ASR 模型,请优先使用 /mnt/moark-models/ 路径以免重复下载。
    • 音频素材: 准备 16kHz 采样率的 wav 文件,示例路径为 /mnt/moark-models/asr_demo.wav
  • 环境一致性:
    • 镜像匹配: 国产芯片对底层驱动和编译工具链要求严格,请严格按照各章节镜像版本创建实例。

一、 沐曦 (MetaX) 部署指南

本章节适用于 曦云 C500 等沐曦系列算力卡。

1. 通用环境准备

  • 算力型号: 曦云 C500 (64GB)
  • 镜像选择: PyTorch / 2.6.0 / Python 3.10 / maca 3.2.1.3

2. 模型部署实战

2.1 whisper-large-v3-turbo

本示例演示如何在 曦云 C500 上加载模型并完成语音转文字。

运行推理代码: 新建 Notebook 单元格运行。

!pip install transformers librosa accelerate

import torch
import librosa
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor

# 模型与音频路径
model_name = "/mnt/moark-models/whisper-large-v3-turbo"
audio_path = "/mnt/moark-models/github/index-tts/emo_sad.wav"

processor = AutoProcessor.from_pretrained(model_name)

model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_name,
torch_dtype=torch.bfloat16, # 这里指定了模型权重为 bfloat16
low_cpu_mem_usage=True,
use_safetensors=True
)


device = "cuda"
model = model.to(device)

# 加载音频 (强制重采样为 16kHz)
audio, sr = librosa.load(audio_path, sr=16000)

inputs = processor(audio, sampling_rate=sr, return_tensors="pt")

input_features = inputs.input_features.to(device=device, dtype=torch.bfloat16)

with torch.inference_mode():
generated_ids = model.generate(input_features, max_new_tokens=256)
text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]

print("识别结果:", text)

查看结果: 运行结束后在输出中查看识别文本。


二、 燧原 (Enflame) 部署指南

本章节适用于 S60 等燧原系列算力卡。由于架构差异,需引入适配库 torch_gcu

1. 通用环境准备

  • 算力型号: Enflame S60 (48GB)
  • 镜像选择: Ubuntu / 22.04 / Python 3.13 / ef 1.5.0.604

2. 模型部署实战

2.1 whisper-large-v3-turbo

本示例演示如何在 Enflame S60 环境完成语音识别。

运行推理代码: 新建 Notebook 单元格运行。

# 安装依赖
!pip install transformers librosa

import torch
import torch_gcu
from torch_gcu import transfer_to_gcu
import librosa
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor

# 模型与音频路径
model_name = "/mnt/moark-models/whisper-large-v3-turbo"
audio_path = "/mnt/moark-models/github/index-tts/emo_sad.wav"

processor = AutoProcessor.from_pretrained(model_name)

model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_name,
torch_dtype=torch.bfloat16, # 这里指定了模型权重为 bfloat16
low_cpu_mem_usage=True,
use_safetensors=True
)


device = "cuda"
model = model.to(device)

# 加载音频 (强制重采样为 16kHz)
audio, sr = librosa.load(audio_path, sr=16000)

inputs = processor(audio, sampling_rate=sr, return_tensors="pt")

input_features = inputs.input_features.to(device=device, dtype=torch.bfloat16)

with torch.inference_mode():
generated_ids = model.generate(input_features, max_new_tokens=256)
text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]

print("识别结果:", text)

四、常见问题

  • 模型下载慢: 若模型不在内置库,请使用镜像源或先在终端中完成模型下载。
  • 识别结果为空: 确认音频采样率为 16kHz,且音频中包含人声。

五、本地访问与服务验证

请参考【SSH 隧道配置指南】建立安全连接。


六、实战课题

课题目标

使用 Qwen3-ASR-1.7B 模型完成以下两项任务,所有输出文件请保存至 /data/exam/ 目录。

任务一:单次推理测试

任务要求

  • 使用 Qwen3-ASR-1.7B 模型(路径:/mnt/moark-models/Qwen3-ASR-1.7B
  • 对指定音频文件进行语音识别:/mnt/moark-models/asr_demo.wav
  • 将识别结果保存为 /data/exam/asr_output.txt

实现提示

  • 使用 Hugging Face Transformers 库
  • 参考部署指南中的 ASR 推理流程

任务二:部署 OpenAI 兼容 API

任务要求

  • 使用 FastAPI 创建语音识别服务
  • 8188 端口运行
  • 提供 /v1/audio/transcriptions 端点,兼容 OpenAI 格式
  • 接收音频文件上传,返回识别文本

实现提示

  • 使用 FastAPI 的 UploadFile 处理音频上传
  • 将接收到的音频转换为模型所需格式
  • 返回 JSON 格式:{"text": "识别结果"}
  • 通过 SSH 隧道映射到本地测试

提交要求: 完成作答后,直接提交检测即可。本课程采取程序自动检测的方式。

需确保以下文件输出完整:

  1. 识别结果文本文件:/data/exam/asr_output.txt