报错
-
报错信息为:
发生异常: RuntimeError CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling cublasSgemm( handle, opa, opb, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)
。
-
尝试了但都无效的方法:
- 在main函数中添加
CUDA_LAUNCH_BLOCKING=1
; - 重启环境;
- 尝试更小的矩阵乘法(排除了显存不够或者内存不够的问题);
- 替换
@ 、 torch.mm、torch.matmul、torch.einsum
等不同的矩阵乘法函数。
- 在main函数中添加
有效解决方法
- 最后的解决方法是:将张量计算转移到cpu上,并进行调试。定位到真实的问题。
device = torch.device('cuda:1' if not(args.cpu) and torch.cuda.is_available() else 'cpu')
# 将device换为cpu
device = torch.device('cpu')
-
在cpu环境下,重新调试代码,找到真实的报错为
发生异常: IndexError index 75880 is out of bounds for dimension 0 with size 75879
/。是访问出界问题。
-
解决问题即可。
-
总结:RuntimeError: CUDA error: CUBLAS_STATUS_EXECUTION_FAILED 这个错误通常表示在调用NVIDIA的CUDA Basic Linear Algebra Subprograms (CUBLAS)库中的函数时出现了问题。具体来说,这里的问题发生在cublasSgemm这个矩阵乘法函数上。但是CUDA的报错信息并没有定位到具体的问题,所以转移到cpu上有助于我们定位问题。