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

Whisper模型并发提升时性能下降问题求助

问题分析与优化方案

核心原因

你遇到的并发反而变慢的问题,本质是GPU显存耗尽触发了显存-内存交换:

  • 每个Whisper medium模型占5GB显存,3个并发任务就占用15GB,接近你的16GB显存上限,此时GPU不得不把部分数据换到内存中,而内存的读写速度比显存慢几个数量级,直接导致每个进程的推理速度暴跌,总耗时反而增加。
  • 额外的GPU进程上下文切换开销,进一步放大了性能损耗。

具体优化建议

1. 避免每个任务重复加载模型(最关键优化)

你的代码中每个Celery任务都会加载一次模型,这不仅浪费显存,还增加了大量加载时间。应该在Celery Worker启动时预加载模型,每个Worker进程只加载一次:

# 全局变量,每个Worker进程初始化时加载一次模型
model = None

@celery.on_after_configure.connect
def init_model(sender, **kwargs):
    global model
    # 可选:开启float16量化,大幅降低显存占用
    model = whisper.load_model("medium", device="cuda", compute_type="float16")

@celery.task(name="whisper")
def whisper_task(datas):
    all_results = []
    for audio in datas:
        # 关闭verbose减少IO开销
        res = model.transcribe(audio, verbose=False)
        all_results.append(res)
    return all_results

2. 严格控制并发数(匹配显存容量)

  • 未量化的medium模型:每个占5GB,16GB显存最多支持2个Worker进程(预留1-2GB给系统和推理临时数据),设置Celery并发数为--concurrency=2。
  • 开启float16量化后:模型显存占用降至2.5GB左右,可支持4-5个Worker进程,进一步提升并发效率。

3. 其他细节优化

  • 音频预处理前置:把音频的加载、采样率转换等操作放到任务提交前完成,避免每个任务重复处理。
  • 禁用不必要的功能:transcribe时设置word_timestamps=False(如果不需要词级时间戳),减少计算量。
  • 清理显存:任务结束后可手动调用torch.cuda.empty_cache()释放临时显存,但预加载模型的情况下必要性较低。

预期效果

  • 预加载模型后,每个Worker进程省去了模型加载时间,显存占用稳定在可控范围,不会触发内存交换。
  • 并发数设为2时,总耗时应该能降到10-12分钟左右;开启量化后,并发4个的话耗时可进一步压缩到6-8分钟。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 19:07:04