现场是这样的。启动推理时报 RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling cublasCreate,显卡和驱动都正常。

中间走过弯路,把「多进程同时初始化,句柄冲突」当成主因,改完现象没变。

这类报错背后常见的原因有几处,逐个排除就行。进程启动时没有可用显存,初始化直接失败;CUDA 上下文在 fork 之后失效;驱动与 cuBLAS 库版本不匹配。

动手时先确认启动瞬间显存是否充足

nvidia-smi --query-gpu=memory.free --format=csv

避免在 fork 之后初始化 CUDA,改用 spawn

torch.multiprocessing.set_start_method('spawn', force=True)

限制每个进程的显存占用比例

PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128 python serve.py

升级或对齐 cuBLAS 所在工具包版本

pip install nvidia-cublas-cu12==12.1.3.1

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

恢复的判定其实很直接。服务启动不再报 cublasCreate 失败,前向推理能正常返回结果,显存占用稳定。

DataLoader 的 worker 里初始化 CUDA 是典型触发场景,把模型放到主进程加载、worker 只做数据准备就能绕开。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189