OddASR 更新:新增Qwen3-ASR三大模型、架构重构、性能飞跃

版本更新介绍

前阵子公司一位大佬跟我推荐了一下 Qwen3-ASR,平时在公司忙成狗也没时间来测试,周末回家给整合了一下到 OddASR,并简单的测试了一下。

时间关系,没有做广泛的测试,但在有限的测试集下发现:

  • 如果在一些特定的场景下,其效果的确非常优秀,比如一些电影里的音频用Qwen3-ASR跑,多人对话场景下也有非常惊艳的准确率;
  • 如果是用我自己平时开会时用 小奥录音 给保存下来的音频来跑 Qwen3-ASR,效果甚至还不如 paraformer,具体原因待确认。

同时也简单的对Qwen3-ASR 的几个版本分别做了些测试,并且也尝试了用一些不同的参数组合,包括:dtype精度、Batch size等。

顺便也对 BaseASR 基类做了一下重构,以让整个代码看上去逻辑更简单、清晰,让代码的可阅读性更好一些,顺便让各个不同模型的ASR子类代码做了一下精简,让各个子类的功能可以更加原子一些(业务和逻辑相关的代码都独立出来了)。

除此之外就是一些零零碎碎的修改,大致如下:

  • 实时转录的 WebSocket 连接现在可以指定模型名,让 小奥录音 的实时字幕也可以指定模型来进行转录。
  • 动态切换不同类型的ASR模型时,特定情况下 CUDA OOM 的问题;
  • 模型名称统一格式化;
  • 在 Ubuntu下用snap安装 ffmpeg,导致找不到 ffprobe 的问题;
  • 大白菜 大佬反馈的 manylinux 版本安装失败的问题;
  • 其它。

快速开始使用 OddASR

  • 版本: v2.5.13
  • 安装: pip install oddasr
  • 运行: oddasr
  • 演示: http://localhost:9002
  • 测试:

Python测试:

from openai import OpenAI
client = OpenAI(base_url="http://localhost:9002/v1",api_key="dummy")
with open("audio.wav", "rb") as f:
    result = client.audio.transcriptions.create(model="oddasr2-paraformer", response_format="text", file=f)
    print(result.text)

curl测试:

curl -X POST http://localhost:9002/v1/audio/transcriptions \
  -H "Content-Type: multipart/form-data" \
  -F "file=@audio.wav" \
  -F "model=oddasr-2" \
  -F "response_format=text"

Qwen3-ASR-1.7B和Qwen3-ASR-0.6B两个模型都需要GPU才能跑得动,如果没有GPU的话,建议不要启用这两个模型。


oddasr-logo

以下是完整的更新列表说明。

一、重磅:新增 Qwen3-ASR 系列模型

本次更新的核心亮点是引入了 Qwen3-ASR 系列模型,提供三种规格:

模型参数量适用场景
Qwen3-ASR-0.6B0.6B轻量部署,显存有限
Qwen3-ASR-1.7B1.7B平衡性能与资源
Qwen3-ASR-Flash 1.7B1.7B流式低延迟场景

显存优化亮点:

  • 支持 FP16 半精度加载,显存占用直降约 45%
  • 新增 ncpu 参数控制 CPU 并行数量
  • VAD / 标点 / 说话人模型默认改用 CPU,释放 GPU 空间给 ASR 主模型
  • 降低 Qwen3 batch size(32 → 16),减少显存峰值

二、架构重构:更清晰、更可维护

1. ASR 模型注册表(asr_registry.py

全新设计的模型注册机制,统一管理所有 ASR 后端的注册、实例化和生命周期。

2. BaseASR 参数封装

将 BaseASR 初始化时的大量散装参数重构为 参数类

  • ModelConfig — 模型路径、设备等
  • RuntimeConfig — 推理相关配置
  • FeatureConfig — 特征提取配置

创建 ASR 实例时只需传入对应的类,告别参数爆炸。

3. 13 个 ASR 子类瘦身

所有子类的 __init__ 大幅精简,公共逻辑统一收敛到 BaseASR


三、功能增强

1. WebSocket 实时转录支持指定模型

实时转录的 WebSocket 连接现在可以指定模型名,不再局限于默认模型。

2. 模型名映射

API 请求中的 model 参数支持多种写法,自动映射到内部模型:

model 参数映射到
oddasr2_paraformerparaformer-funasr
oddasr2_qwen3_06bqwen3-asr-0.6b
oddasr2_qwen3_17bqwen3-asr-1.7b
oddasr2_sensevoicesensevoice
oddasr2_moonshinemoonshine
qwen3-asr-0.6b直接匹配

3. WebSocket 连接参数配置

{
  "max_connections": 50,
  "ping_interval": 30,
  "ping_timeout": 300,
  "idle_timeout": 120
}

四、稳定性与性能

1. CUDA OOM 自动重试

首次转录若触发 CUDA error: out of memory,自动调用 torch.cuda.empty_cache() 释放显存碎片后重试。

2. GPU 释放修复

修复离线转写销毁实例后 GPU 显存未释放的问题。

3. CUDA 设备修复

修复配置已改为 CUDA 但实际初始化仍在 CPU 的问题。启动时若配置为 CUDA 但环境无 GPU,会输出 WARNING 日志。

4. 本地模型优先加载

启动时强制优先加载本地模型,不再联网检查更新,加快启动速度。


五、Bug 修复

问题修复
ffprobe 错误导致转录失败完善错误处理逻辑
未安装 ffmpeg 的错误提示不友好优化提示信息
标点模型返回空报错修复空值处理
实时转录 / 实时字幕功能异常修复流式处理逻辑
动态切换模型导致内存泄漏修复实例生命周期管理

六、运维改进

1. Docker Manylinux Wheel 构建

新增 Dockerfile.manylinuxbuild_manylinux.sh,支持在 manylinux 容器中构建兼容性 wheel:

docker run --rm -v "G:\oddmeta\oddasr:/workspace" \
  -w /workspace quay.io/pypa/manylinux_2_28_x86_64 \
  bash build_manylinux.sh

2. 日志轮转

日志文件改为每天一个,最多保留 30 天,避免磁盘占满。


七、文档更新

  • 更新 API 指南,新增 Qwen3-ASR 模型说明
  • 新增说话人分离配置文档(oddasr-speaker-diarization-config.md
  • 新增流式 ASR TTFT 配置文档(oddasr-streaming-asr-ttft-config.md
  • 完善 GPU 版本依赖说明(requirements-gpu.txt

OddASR — 兼容 OpenAI API 的开源 ASR 服务,支持离线转写与实时流式转录。

📦 PyPI: pip install oddasr
🐙 GitHub: https://github.com/oddmeta/oddasr

Leave a comment

Your email address will not be published. Required fields are marked *