qwen3-omni
Qwen3-Omni 采用 Thinker-Talker MoE 架构 实现端到端原生多模态。输入层通过 AuT音频编码器 (650M,12.5Hz低帧率) 和 SigLIP2视觉编码器 (540M) 统一编码为连续特征,经 TM-RoPE时序对齐 后送入Thinker。
Thinker是 30B-A3B的MoE模型,48层128专家,每token仅激活3B,负责多模态联合推理,输出文本token和高层多模态特征。关键创新是Talker不再依赖文本表示,而是直接接收Thinker的多模态特征,实现内容生成与语音合成的解耦,支持外部干预和独立风格控制。
Talker是 3B-A0.3B的MoE模型,自回归生成码本0,经 MTP模块 并行预测残差码本1-14,最后通过 轻量因果ConvNet (Code2Wav,200M) 流式合成波形,端到端延迟仅 234ms。
相比Qwen2.5-Omni,升级包括:MoE稀疏激活、自研AuT替代Whisper、多码本语音合成、以及四模态全SOTA零退化的性能表现。
-
整体架构图解
graph LR
Audio[输入音频] --> Encoder[音频编码器 (Audio Encoder)]
Encoder --> Projector[模态投影层 (Projector)]
Projector --> LLM[Qwen3 LLM (核心大脑)]
TextIn[文本输入] --> Embed[文本嵌入]
Embed --> LLMsubgraph 输出分支
LLM --> TextHead[文本头 (Text Head)] --> TextOut[文本输出]
LLM --> AudioHead[音频头 (Audio Head / Flow Matching)] --> AudioOut[音频输出]
end -
关键组件详解
音频编码器 (Audio Encoder):
通常基于改进的 Whisper Encoder 或 Conformer 结构。
作用:将原始波形或 Log-Mel 频谱图转换为离散的音频 Token 或连续的音频 Embedding。
特点:支持多语言、降噪、情感识别。
模态投影层 (Modality Projector):
一个轻量级的 MLP 或 Q-Former。
作用:将音频特征映射到 Qwen3 LLM 的文本语义空间,让 LLM 能“听懂”音频。
核心基座 (Qwen3 LLM):
基于 Qwen3 的 Dense 或 MoE 架构。
作用:进行逻辑推理、指令遵循、上下文理解。它同时处理文本 Token 和音频 Token。
输出头 (Heads):
文本头:标准的 LM Head,输出文本 Token (用于 ASR 任务或对话回复)。
音频头 (Omni 特性):如果是真正的 Omni 模型,会包含一个 解码器 (Decoder),如 Flow Matching (流匹配) 或 VQ-VAE Decoder,直接将 LLM 的输出映射回声波或声学特征 (用于 TTS 任务)。
| 组件 | 架构 | 参数量 | 关键特性 |
|---|---|---|---|
| AuT | Encoder-Decoder | 650M | 12.5Hz,20M小时训练,动态窗口 |
| Vision Encoder | SigLIP2-So400M | 540M | 动态帧率,时序对齐音频 |
| Thinker | MoE 30B-A3B | 30B (激活3B) | TM-RoPE,解耦Talker输入 |
| Talker | MoE 3B-A0.3B | 3B (激活0.3B) | 直接接收多模态特征 |
| MTP | Dense Transformer | 80M | 残差码本并行,14-18ms |
| Code2Wav | 因果ConvNet | 200M | 替代DiT,3-5ms流式合成 |
Whisper
Whisper 是一个基于 Transformer Encoder-Decoder 架构的端到端语音模型。它直接将音频波形映射为文本序列,支持多语言识别、翻译和语音活动检测(VAD)。
输入:16kHz 单声道音频波形(Waveform)。
输出:离散的文字 Token 序列(包含时间戳、语言标签、特殊控制符)
从输入到输出对应步骤:
- 第一步:音频预处理 (Audio Preprocessing)
| 项目 | 内容 |
|---|---|
| 输入 | 任意长度原始音频(.wav, .mp3 等) |
| 操作 | ① 重采样 → 统一 16kHz ② 归一化 → 振幅缩放至 [-1, 1] ③ 切片 → 30秒片段,不足则零填充 |
| 输出形状 | [Batch, 480,000] (30s × 16,000 samples/s) |
- 第二步:特征提取 (Feature Extraction)
| 项目 | 内容 |
|---|---|
| 操作 | 计算 Log-Mel Spectrogram(对数梅尔频谱图) |
| 流程 | ① STFT → 时域转频域 ② Mel Filter Bank → 80个梅尔滤波器 ③ 取对数 → 压缩动态范围 |
| 维度变化 | 时间:480,000 采样点 → 3,000 帧 频率:80 通道 |
| 输出形状 | [Batch, 80, 3000] |
| 意义 | 模型的"图像"输入,保留时序与频谱特征 |
- 第三步:Encoder 编码 (Feature Encoding)
| 项目 | 内容 |
|---|---|
| 架构 | 32层 Transformer Encoder(Whisper Large) |
| 关键组件 | ① Conv1d Stem → 两层卷积,步长2,时间压缩 3000→750 ② Positional Embedding → 正弦位置编码 ③ Self-Attention (双向) → 每帧可见全部上下文 |
| 输出形状 | [Batch, 750, d_model](d_model=1280) |
| 作用 | 捕捉全局语义,生成音频深层表示 Memory States (K, V) |
- 第四步:Decoder 解码 (Text Generation)
| 项目 | 内容 |
|---|---|
| 架构 | 堆叠 Transformer Decoder(自回归生成) |
| 输入 | ① Encoder 输出 → 作为 Cross-Attention 的 K/V ② 上一时刻 Token → 作为 Query(含特殊令牌) |
| 关键机制 | ① Masked Self-Attention → 单向因果,防信息泄露 ② Cross-Attention → 文字"关注"对应音频时段 ③ Positional Embedding → 文本位置编码 |
| 输出 | 每步生成 Logits [Batch, 1, vocab_size] |
- 第五步:后处理与采样 (Post-processing & Sampling)
| 项目 | 内容 |
|---|---|
| 操作 | ① 采样 → Greedy / Beam Search 选最高概率 Token ② 解析特殊令牌 → 时间戳、结束符检测 ③ 文本拼接 → Token ID 转字符串,去空格 |
| 特殊令牌 | <|startoftranscript|>, <|en|>, <|transcribe|>, <|notimestamps|>, <|0.00|>, <|endoftext|> |
| 最终输出 | 带时间戳的文本段落 |
| 示例 | [00:00:01 --> 00:00:04] Hello world |
以下是 Whisper 流式推理特性与性能瓶颈的 Markdown 格式总结:
⚡ Whisper 流式推理:瓶颈与优化方案
一、核心瓶颈分析
| 瓶颈类型 | 具体表现 | 根本原因 |
|---|---|---|
| 延迟 (Latency) | 首字延迟高达 30s,必须听完才能转录 | Encoder 需完整 30s 上下文做双向 Attention;Decoder 依赖 Encoder 全局输出 |
| 显存带宽 (Memory Bandwidth) | 高并发下 GPU 带宽打满,吞吐量上不去 | Decoder 自回归,每 Token 都需读取巨大 Encoder Memory (KV Cache),Memory-Bound |
| 边界效应 (Boundary Artifacts) | 切片处识别不准,句子截断 | 30s 硬切分破坏长句语义连贯性,卷积/Attention 在边界信息缺失 |
| 卷积算子效率 | Conv1d 流式小 Batch 下效率低 | 卷积难充分利用 Tensor Cores,流式 Padding 处理复杂 |
二、优化落地方案
1. 流式切片策略 (Streaming Chunking)
| 项目 | 内容 |
|---|---|
| 问题 | 如何不等待 30s 即输出? |
| 方案 | Sliding Window Inference(滑动窗口) |
| 机制 | ① 切小块(2s/5s)送入 30s 窗口(历史 + 当前 + lookahead) ② 增量计算:KV Cache 复用历史 Encoder 输出,只算新增 Feature |
| 效果 | 延迟从 30s → 200ms~1s |
2. 量化 (Quantization & Distillation)
| 项目 | 内容 |
|---|---|
| INT8/FP8 量化 | Encoder 权重 + Activation 量化(SmoothQuant),减显存压带宽 |
| 结果 | 显存占用 ↓50%,推理速度 ↑2-3x |
3. 算子融合与编译优化
| 技术 | 作用 |
|---|---|
| Conv-to-GEMM | im2col 转换 Conv1d 为矩阵乘,TensorRT/vLLM 加速 |
| Kernel Fusion | 融合 LayerNorm + Bias + Activation,减少 CUDA Kernel 启动 |
| PagedAttention | 借鉴 LLM 优化,管理 Decoder KV Cache,解决长语音显存碎片 |
4. 端点检测联动 (VAD Integration)
| 项目 | 内容 |
|---|---|
| 方案 | 前置轻量 VAD(如 Silero VAD) |
| 机制 | ① 检测到人声才触发 Whisper ② 自动切断静音,避免无意义 30s 推理 |
| 收益 | 无效计算大幅降低,算力成本 ↓30%-50% |
三、方案对比速查
| 优化方向 | 核心手段 | 主要收益 | 适用场景 |
|---|---|---|---|
| 降低延迟 | Sliding Window + KV Cache 复用 | 30s → 亚秒级 | 实时会议、直播字幕 |
| 提升吞吐 | 量化 + 蒸馏 + PagedAttention | 2-3x 加速,省显存 | 高并发 API 服务 |
| 消除边界 | 重叠窗口 + 上下文拼接 | 句子完整性提升 | 长音频转录 |
| 节省算力 | VAD 前置过滤 | 30%-50% 成本削减 | 语音交互设备 |
💡 面试金句
- 延迟瓶颈:"Whisper 的 Encoder 是双向注意力,必须等 30s 音频到齐才能开始算,这是流式的根本矛盾"
- 带宽瓶颈:"Decoder 每生成一个 Token 都要读一遍 Encoder 的 KV Cache,是典型的 Memory-Bound,不是算力不够"
- 优化核心:"滑动窗口降延迟,量化提吞吐,VAD 过滤省成本"