RuntimeError: CUDA failed with error invalid argument`

用户在使用 faster-whisper 配合 FastAPI 搭建多 GPU 转录服务时,试图在 4 块 GPU 上分别加载模型,并通过一个异步队列分配推理任务。初始几轮请求(约 8 次)正常返回 200 响应,随后出现约 50% 的请求失败,伴随 RuntimeError: CUDA faile

RuntimeError: CUDA failed with error invalid argument`

RuntimeError: CUDA failed with error invalid argument

快速结论:该报错通常出现在多 GPU 并行加载 Faster Whisper 模型时,尤其是在反复调用 WhisperModel 构造函数或跨 GPU 并发转录时。优先排查 ctranslate2 版本是否过旧,以及 GPU 显存是否在并发场景下耗尽或出现非法参数传递。

问题场景

用户在使用 faster-whisper 配合 FastAPI 搭建多 GPU 转录服务时,试图在 4 块 GPU 上分别加载模型,并通过一个异步队列分配推理任务。初始几轮请求(约 8 次)正常返回 200 响应,随后出现约 50% 的请求失败,伴随 RuntimeError: CUDA failed with error invalid argument 错误。

报错原文

Traceback (most recent call last):
  File "/app/wordcab_transcribe/services/asr_service.py", line 254, in process_transcription
    segments = self.services["transcription"](...)
...
RuntimeError: CUDA failed with error invalid argument

原因分析

可能原因:该错误与 2023 年 8 月之前在 ctranslate2 中报告的一个已知问题(#75)相似,当时已经通过更新修复。若用户环境中 ctranslate2 版本较旧,可能导致在多 GPU 并发加载或推理时 CUDA 内核参数传递错误,从而触发 invalid argument 声明。此外,未正确序列化 GPU 访问(如未确保一次只有一个线程调用同一 GPU 上的模型)也可能导致该报错。

环境排查

  • 确认 ctranslate2 版本(pip show ctranslate2)
  • 确认 Python 版本
  • 确认 CUDA 版本及显卡驱动版本
  • 确认 faster-whisper 版本
  • 确认使用的模型路径(如 large-v2)及 compute_type(float16)
  • 确认 device_index 列表与真实 GPU 数量一致

解决步骤

  1. 升级 ctranslate2 到最新版本(可优先尝试)
  2. 确保在并发环境中每次只由一个线程或协程访问同一 GPU 上的模型实例,例如使用异步队列或多进程锁
  3. 如果使用 FastAPI,考虑将每个 GPU 模型作为独立进程运行,通过子进程通信分配任务
  4. 在初始化 WhisperModel 时,确保 device_index 参数传递正确(若使用 4 块 GPU,device_index=[0,1,2,3]
  5. 尝试不使用并发,仅单进程单 GPU 运行以排除底层 CUDA 驱动问题

验证方法

升级 ctranslate2 后,运行用户提供的独立测试脚本(如 Issue 评论中给出的异步代码),检查是否仍出现 RuntimeError: CUDA failed with error invalid argument。若无报错且所有推理任务成功完成,则问题已解决。

参考来源

SYSTRAN/faster-whisper #323

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 11188

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注