WSL2环境下PyTorch调用loss.backward()时报CUDA未知运行时错误如何解决
问题排查与修复步骤
- 首先按照报错提示开启同步报错定位具体问题,运行训练脚本前先执行环境变量设置:
再运行训练代码,此时报错会直接指向出问题的代码行,而非只在backward处统一抛出。export CUDA_LAUNCH_BLOCKING=1 - 检查WSL环境的动态库优先级,这是WSL下安装CUDA Toolkit后的高频错误点:你安装CUDA Toolkit时大概率将
/usr/local/cuda/lib64加入了LD_LIBRARY_PATH环境变量的靠前位置,导致程序优先调用了CUDA Toolkit自带的CUDA动态库,而非WSL专属的NVIDIA驱动库。执行以下命令查看优先级:
如果确认echo $LD_LIBRARY_PATH/usr/lib/wsl/lib的顺序在/usr/local/cuda/lib64之后,调整环境变量顺序,将/usr/lib/wsl/lib放在最前面,或者直接移除CUDA Toolkit自动添加的LD_LIBRARY_PATH配置即可,WSL下CUDA运行时会自动调用对应库,不需要额外配置该变量。 - 检查Python版本适配性:你当前使用的Python3.6属于较早版本,PyTorch 1.10.0对Python3.6的CUDA适配存在已知的边缘兼容性问题,可升级Python到3.8+版本后重新安装对应PyTorch版本验证。
- 确认Windows NVIDIA驱动为最新版本:如果你的Windows显卡驱动是较老的非WSL专属支持版本,会出现基础CUDA接口可用、但反向传播等内核调用失败的问题,直接升级到NVIDIA官网最新的Windows显卡驱动即可,最新驱动默认自带WSL CUDA全功能支持。
- 排除显存溢出问题:如果模型的batch size设置过大,也可能出现无明确报错的CUDA未知错误,可先将batch size调到最小值(比如1)验证是否能正常跑通训练流程。
内容的提问来源于stack exchange,提问作者Yan
相关产品推荐
相关产品推荐

