You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Nvidia A100的Whisper多请求推理瓶颈与优化方案问询

Whisper-Large-v3实时多请求处理瓶颈与优化疑问

初始场景与问题

  • 目标:基于Whisper-Large-v3构建实时语音转文本应用,支持同时处理多个请求
  • 硬件:配备80GB VRAM的Nvidia A100显卡
  • 现状:
    • 单个Whisper实例因KV矩阵依赖,请求只能串行执行,无法并行处理
    • 使用Gunicorn启动多worker,加载2个独立Whisper实例时可并行处理2个请求;但加载4个实例时,仍仅能并行处理2个,剩余请求需等待队列空闲
  • 诉求:明确性能瓶颈所在,提供能更高效利用显卡推理能力的优化方案(当前VRAM尚有剩余)

当前实现细节

  • 技术栈:Transformers库 + PyTorch
  • 注意力机制:Flash Attention 2或SDPA(短音频场景下效果相近)
  • 计算后端:PyTorch

个人猜测

瓶颈可能源于PyTorch后端为输出和注意力矩阵分配连续内存块,导致无法利用空闲内存并行处理更多请求;尽管VRAM充足,但矩阵可能被加载到容量有限的SRAM中,限制了并行能力。


更新(2024.06.04)

批量处理音频可大幅提升推理速度,但仍需适配实时应用场景,希望了解除批量处理外,是否可通过流水线方式实现显卡并行计算。

测试代码

  1. 构建Whisper实例
import torch
from transformers import pipeline
import os
import time

pipe = pipeline(
    "automatic-speech-recognition",
    model="openai/whisper-large-v3",
    torch_dtype=torch.bfloat16,  
    device="cuda:0",  
)
  1. 音频生成器与主处理逻辑
# 遍历本地音频文件夹的生成器
def data_generator():
    folder_path =  r'C:\Users\audios'
    for filename in os.listdir(folder_path):
        audio = os.path.join(folder_path, filename)
        yield audio

def main():
    for out in pipe(inputs=data_generator(), batch_size=8, return_timestamps=False, 
        generate_kwargs={"language": "en", "task": "transcribe"}):
        print(out)

后续疑问

当前批量处理逻辑需要凑够8个音频才启动转录,但实时场景中请求是串行到来的,不想等待凑齐批量再处理,询问是否存在比顺序调用pipe更优的实时处理方法。


内容的提问来源于stack exchange,提问作者leon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:02:17