报错内容

RuntimeError: CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling cublasLtMatmul with transpose_mat1 1 transpose_mat2 0 m 256 n 11360 k 256 mat1_ld 256 mat2_ld 256 result_ld 256 abcType 0 computeType 68 scaleType 0

检查

在遇到这个问题时,尝试了很多方式。

首先是减小数据大小,可以尝试减小batch_size或者采样的大小,但是没有解决问题;

在单卡训练解决不了该问题,于是尝试多卡训练,但是仍存在该问题;

后续猜测可能是服务器还有其他人在使用,GPU利用率上限了,所以虽然内存够,但是轮不上自己;但是空闲卡的时候仍然存在该问题,并且发现代码并没有占满显卡内存;

最后,发现是nvcc版本不对(服务器可能存在多个cuda版本),需要换成适合自己代码环境的cuda版本,解决了问题。

补充

第二天又出现了同样的报错,上面的解决方法不管用了;发现虽然没有使用多卡运行,但是模型会在cuda:0上有一部分内存占用,那张卡刚好GPU利用率上限了(应该是这个原因);之后,指定可见卡就解决了,但是同样需要保持cuda版本一致。

2025.04.16补充

前面的问题都是跑grounding DINO这个项目出现的问题(原项目目前还没有开源训练代码),所以自己在写训练代码训练时,为了测试调试先选择了几个样本的数据集进行代码调试;因此一开始使用的单卡训练,出现了上述问题,并且按照前面的步骤解决了问题。但是为了模型后续的训练,开始转为多卡训练,但是又出现了上述问题(RuntimeError: CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling cublasLtMatmul with transpose_mat1 1 transpose_mat2 0 m 256 n 1420 k 256 mat1_ld 256 mat2_ld 256 result_ld 256 abcType 0 computeType 68 scaleType 0),同时自定义CUDA内核出现error in ms_deformable_im2col_cuda: an illegal memory access was encountered这个报错,按照上述的方法根本不起作用了。

但是可以确定的是确实是项目自定义CUDA内核在多卡运行出现了问题,在GPT和deepseek呆了好几天,仍然没有解决问题。尝试了改.cu文件,但是没有解决问题,也不知道怎么修改代码。最后是浏览器搜索(detr多卡训练出现error in ms_deformable_im2col_cuda: an illegal memory access was encountered),解决了问题。

具体是在github的Grounding DINO官方问题中找到了解决方案,虽然遇到的问题不完全相同,但是也是内存的问题。解决方法是使用mmvc中的内核代替自定义内核,终于多卡跑起来了。在多个 GPU 中运行,得到CUDA error: CUBLAS_STATUS_INTERNAL_ERROR when calling cublasSgemm(非常感谢这个问题作者,要哭了,无语言表,只能点赞)

最后将项目这个backward改为:

    def backward(ctx, grad_output):
    (
        value,
        value_spatial_shapes,
        value_level_start_index,
        sampling_locations,
        attention_weights,
    ) = ctx.saved_tensors
    # 创建梯度 Tensor
    grad_value = torch.zeros_like(value)
    grad_sampling_loc = torch.zeros_like(sampling_locations)
    grad_attn_weight = torch.zeros_like(attention_weights)

    # 调用并 in-place 写入
    _C.ms_deform_attn_backward(
        value,
        value_spatial_shapes,
        value_level_start_index,
        sampling_locations,
        attention_weights,
        grad_output,
        grad_value,
        grad_sampling_loc,
        grad_attn_weight,
        ctx.im2col_step
    )

    # 返回梯度结果
    return grad_value, None, None, grad_sampling_loc, grad_attn_weight, None`
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐