
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 数量一致
解决步骤
- 升级
ctranslate2到最新版本(可优先尝试) - 确保在并发环境中每次只由一个线程或协程访问同一 GPU 上的模型实例,例如使用异步队列或多进程锁
- 如果使用 FastAPI,考虑将每个 GPU 模型作为独立进程运行,通过子进程通信分配任务
- 在初始化
WhisperModel时,确保device_index参数传递正确(若使用 4 块 GPU,device_index=[0,1,2,3]) - 尝试不使用并发,仅单进程单 GPU 运行以排除底层 CUDA 驱动问题
验证方法
升级 ctranslate2 后,运行用户提供的独立测试脚本(如 Issue 评论中给出的异步代码),检查是否仍出现 RuntimeError: CUDA failed with error invalid argument。若无报错且所有推理任务成功完成,则问题已解决。



