Tesla P100 GPU运行PyTorch模型报CUBLAS_STATUS_EXECUTION_FAILED错误求助
问题分析与解决方案
报错原因解析
CUBLAS_STATUS_EXECUTION_FAILED 报错源于CUDA矩阵乘法操作(cublasSgemm)执行时遇到异常,结合GPU切换后出现问题、小写化数据解决的情况,核心原因是Tesla P100(Volta架构)与T4(Turing架构)的CUDA底层实现对张量状态的敏感度差异:
- T4的CUDA runtime和cublas库对张量中的微小异常(如隐含的NaN/Inf、非连续内存布局、或非小写字符引入的数值分布异常)容错性更强,不会触发报错;
- P100的Volta架构对应的cublas实现对这类异常更为严格,反向传播计算梯度的矩阵乘法遇到异常张量时,直接抛出执行失败错误;
- 小写化数据本质是消除了原始数据中导致张量数值/分布异常的因素(比如特殊字符编码带来的无效特征值、特征分布离散度过高),让张量状态回到P100的cublas可正常处理的范围。
其他可行解决方法
1. 切换回Tesla T4 GPU
Colab Pro支持重新分配GPU资源,操作步骤:
- 点击顶部菜单栏
Runtime > Change runtime type; - 确认
Hardware accelerator选择为GPU,保存后重启会话; - 若未分配到T4,通过
Runtime > Disconnect and delete runtime断开连接后重新会话,重复几次即可大概率获取T4(Pro用户资源池优先级更高)。
2. 代码层面参数调整
- 排查清理异常张量:预处理后添加检查逻辑,过滤或替换NaN/Inf值:
# 检查并替换特征张量中的异常值 features = torch.where(torch.isnan(features), torch.zeros_like(features), features) features = torch.where(torch.isinf(features), torch.zeros_like(features), features) - 调整CUDA后端参数:关闭cudnn自动基准测试,避免不同GPU的优化策略冲突:
确保张量内存连续,可在模型前向输出或loss计算前添加:torch.backends.cudnn.benchmark = Falseoutputs = outputs.contiguous() - 调整PyTorch版本:当前
torch==1.8.0+cu111对Volta架构(P100)的兼容性存在细节问题,可尝试升级到torch==1.9.0+cu111或降级到torch==1.7.1+cu110,匹配P100的CUDA驱动支持。
内容的提问来源于stack exchange,提问作者Hemin
相关产品推荐
相关产品推荐

