Whisper

Whisper 是一个基于 Transformer Encoder-Decoder 架构的端到端语音模型。它直接将音频波形映射为文本序列,支持多语言识别、翻译和语音活动检测(VAD)。
输入:16kHz 单声道音频波形(Waveform)。
输出:离散的文字 Token 序列(包含时间戳、语言标签、特殊控制符)

从输入到输出对应步骤:

  1. 第一步:音频预处理 (Audio Preprocessing)
项目 内容
输入 任意长度原始音频(.wav, .mp3 等)
操作 重采样 → 统一 16kHz
归一化 → 振幅缩放至 [-1, 1]
切片 → 30秒片段,不足则零填充
输出形状 [Batch, 480,000] (30s × 16,000 samples/s)
  1. 第二步:特征提取 (Feature Extraction)
项目 内容
操作 计算 Log-Mel Spectrogram(对数梅尔频谱图)
流程 STFT → 时域转频域
Mel Filter Bank → 80个梅尔滤波器
取对数 → 压缩动态范围
维度变化 时间:480,000 采样点 → 3,000 帧
频率:80 通道
输出形状 [Batch, 80, 3000]
意义 模型的"图像"输入,保留时序与频谱特征
  1. 第三步: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)
  1. 第四步:Decoder 解码 (Text Generation)
项目 内容
架构 堆叠 Transformer Decoder(自回归生成)
输入 ① Encoder 输出 → 作为 Cross-Attention 的 K/V
② 上一时刻 Token → 作为 Query(含特殊令牌)
关键机制 Masked Self-Attention → 单向因果,防信息泄露
Cross-Attention → 文字"关注"对应音频时段
Positional Embedding → 文本位置编码
输出 每步生成 Logits [Batch, 1, vocab_size]
  1. 第五步:后处理与采样 (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 过滤省成本"