Package | 解决 Windows10 Anaconda环境 CUDA11.5 pytorch运行报错 No CUDA runtime is found

.

背景

在windows下使用anaconda管理多个环境(尤其用于模型训练),已成为算法工程师的一种基本技能。平时大部分时间都在用linux+docker,我也趁着这次的环境调试好好学习了一下anaconda的环境创建和管理。整体来说,anaconda的使用还是非常人性化的,具体官网请转至 all you need know about anaconda.

.

环境配置

如标题所示,实验的系统环境是windows 10,系统中已安装最新的CUDA v11.5。
conda环境为python 3.7,并使用以下指令进行pytorch安装:

conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c conda-forge

然后运行模型的训练代码,报错信息如下:

====================================================================
No CUDA runtime is found, using CUDA_HOME='your CUDA installation path\NVIDIA GPU Computing Toolkit\CUDA\v11.5’

Traceback (most recent call last):
File “train.py”, line 20, in
import src.renderutils as ru
File “xxx\src\renderutils_init_.py”, line 9, in
from .ops import xfm_points, xfm_vectors, image_loss, prepare_shading_normal, lambert, pbr_specular, pbr_bsdf, _fresnel_shlick, _ndf_ggx, _lambda_ggx, _masking_smith
File “xxx\src\renderutils\ops.py”, line 61, in
torch.utils.cpp_extension.load(name=‘renderutils_plugin’, sources=source_paths, extra_ldflags=ldflags, with_cuda=True, verbose=True)
File “xxx\anaconda\envs\dmodel\lib\site-packages\torch\utils\cpp_extension.py”, line 1136, in load
keep_intermediates=keep_intermediates)
File “xxx\anaconda\envs\dmodel\lib\site-packages\torch\utils\cpp_extension.py”, line 1347, in _jit_compile
is_standalone=is_standalone)
File “xxx\anaconda\envs\dmodel\lib\site-packages\torch\utils\cpp_extension.py”, line 1445, in _write_ninja_file_and_build_library
is_standalone=is_standalone)
File “xxx\anaconda\envs\dmodel\lib\site-packages\torch\utils\cpp_extension.py”, line 1834, in _write_ninja_file_to_build_library
cuda_flags = common_cflags + COMMON_NVCC_FLAGS + _get_cuda_arch_flags()
File “xxx\anaconda\envs\dmodel\lib\site-packages\torch\utils\cpp_extension.py”, line 1606, in _get_cuda_arch_flags
arch_list[-1] += ‘+PTX’
IndexError: list index out of range

====================================================================

报错信息很长,但最重要的在最前面。不要被最后的cpp_extension.py报错信息唬住了。
当然也能从中获取一些有用的信息,大致意思是没有找到CUDA(GPU)。
再结合第一句报错“No CUDA runtime is found, using CUDA_HOME=‘your CUDA installation path\NVIDIA GPU Computing Toolkit\CUDA\v11.5’”,大致可以推测是和GPU配置相关的问题。

刚开始推测是因为conda环境使用的是cudatoolkit=11.1导致的,后来改试11.3/11.5都不行:

conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch -c conda-forge

.

问题排查

结合前面的分析,很有可能是GPU CUDA环境配置出了问题。通常情况下,我们需要进一步确认GPU环境没有配置成功,有以下2种常见操作。

.

1. 使用pytorch is_cuda_available()函数确认

前问说过,我是使用conda install指令直接安装的pytorch,所以在CUDA配置不正确情况下,安装的pytorch有可能是cpu版本。进入python环境:

python

引入pytorch包,并进行检查:

import torch
print(torch.is_cuda_available())

如果输出是True,则说明GPU/CUDA配置正确;我的结果是输出为False,进一步确认环境配置出错。

.

2. 查找系统中的CUDA和cuDNN文件路径

报错信息第一句给出了CUDA的路径“using CUDA_HOME='your CUDA installation path\NVIDIA GPU Computing Toolkit\CUDA\v11.5”,可以到文件夹下去确认CUDA文件是否都在。

接下来就是重点出错环节。cuDNN需要单独安装,很多时候我们会忘记,或者是装错了版本,需要重点排查。确认是否安装cuDNN可参考博客:cuDNN确认安装

不出所料,我的windows系统里只安装了CUDA v11.5,但没有安装cuDNN。接下来需要安装对应版本的cuDNN,到NVIDIA官网选择对应版本的安装包:cudnn下载,并根据cudnn安装指南进行安装。

安装之后再根据cuDNN确认安装进行确认。

.

安装GPU版本的pytorch

配置好cuda环境后,重激活conda环境并再使用上述1.中的方法验证pytorch的cuda是否启用。

import torch
print(torch.is_cuda_available())

到这一步如果输出True,那么恭喜你,配置成功!

但我的环境仍然报错,继续排查。此时检查torch的版本,果然是CPU版的pytorch。原因也很自然,在系统CUDA环境没有配置成功的时候,conda进行安装时会自动选择CPU版的pytorch进行安装。这是个隐形的坑,因为安装使用的指令都一样。

此时,首先需要移除安装的pytorch。

conda uninstall pytorch

这个过程会耗时比较久。pytorch卸载之后,在网上找到目前(2022/02/22)((特意留下时间戳哈哈))pytorch并没有和CUDA v11.5完全一致的版本,兼容版本是cudatoolkit 11.3+pytorch,指令如下:

conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch -c conda-forge

此时,再次验证pytorch下的is_cuda_available():

import torch
print(torch.is_cuda_available())

输出True!Yes!

到这里环境就配置好了,再次尝试训练,通过!预祝大家训练顺利!

.

题后记

今天是20220222,周二,农历二十二,多么难得的一天。
预祝大家都开开心心,身体健康,世界和平,开心生活最重要啦!
PPS 我要去磕巴拉拉能量了!

^ __________________________________________________ ^

.

来源:1LOVESJohnny

物联沃分享整理
物联沃-IOTWORD物联网 » Package | 解决 Windows10 Anaconda环境 CUDA11.5 pytorch运行报错 No CUDA runtime is found

发表评论