如何从CUDA 11.4降级到10.2并添加sm_35支持解决无内核镜像执行错误
解决方案
报错核心原因是当前安装的官方预编译PyTorch版本未包含你的两款GPU对应的计算能力架构编译支持:GTX 650对应sm_30、Tesla K40c对应sm_35,而你安装的PyTorch 1.8.x仅提供sm_37及更高架构的内核镜像。可通过以下三种方法解决:
- 方案1:降级使用适配旧架构的预编译PyTorch版本
官方在PyTorch 1.6.0及更早的CUDA 10.1版本中默认包含sm_35架构支持,适配你的Tesla K40c。直接卸载现有PyTorch,执行以下命令安装对应版本即可:
conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.1 -c pytorch
如果需要同时支持GTX 650的sm_30架构,可进一步降级到PyTorch 1.4.0版本。
- 方案2:从源码编译自定义PyTorch
如果必须使用1.8及更高版本的PyTorch,可手动从源码编译,编译时指定需要支持的架构:
- 卸载现有PyTorch,安装对应CUDA版本的编译依赖
- 克隆对应版本的PyTorch源码仓库
- 执行编译前设置环境变量:
export TORCH_CUDA_ARCH_LIST="3.0 3.5"
- 按官方源码编译流程完成安装,得到的PyTorch就会同时支持你的两款GPU。
- 方案3:临时强制即时编译(不推荐)
可尝试设置环境变量CUDA_FORCE_PTX_JIT=1,强制运行时将PTX代码编译为当前设备适配的内核,但该方案仅在预编译包包含对应计算能力的PTX时生效,且首次运行内核时会有明显延迟,不适用于长期使用。
补充说明:你的NVIDIA驱动版本为470.57.02,最高支持CUDA 11.4,上述所有低于11.4的CUDA版本均可正常兼容。
内容的提问来源于stack exchange,提问作者Zé Manel
相关产品推荐
相关产品推荐

