Conda安装pytorch和cuda出现问题的解决记录
pytorch已经安装却显示cuda不可用
问题表现:
pytorch已经安装,代码能够正常运行,但是不能识别到GPU,Cuda显示不可用。
系统:centos
显卡:TeslaV100
问题记录:
目的:为了运行一个仓库neuralhydrology的代码,按照其教程配置环境。
问题原因:
环境由仓库提供的yml文件决定,我认为这是出现问题的部分原因。
conda env create -f environment.yml
目前根据配置文件创建环境首先遇到的就是下载慢,pip还超时了,不过很轻松就用换源解决了。最后说。这一步换源操作也是问题原因的一部分。
如何发现:
其实是执行代码的时候,居然走到了cpuonly的分支。
如何解决:
执行以下命令判断你是否和我遇到了同一种情况:
下面这一条如果显示有pytorchcuda说明你是有cuda包的,可以继续往下看,或者显示cudatoolkit也是。否则你就要考虑是不是没装cuda包啊。可以按照后面的方案操作。
conda list | grep cuda
下面这一条用来判断你的pytorch是不是正确,如果显示pytorch后面的build列有cpu。。。那就是和我一样啦。
conda list | grep torch
conda list输出包名版本build和channel ,如果build那一列不对,就是安装错版本啦。
我这里就是因为换源默认从配置文件里读取pytorch安装的是cpu版本,所以即使已经安装了cuda也不能识别和使用GPU。
那么如果你和我一样,下一步就这样操作:
这一步判断 你的GPU的驱动最高支持什么版本的CUDA,一般只要你的cuda不超过这个数字就行了。
nvidia-smi | grep "CUDA Version" # 输出应≥11.8
如果你的代码有要求,并且要求的版本不高于你gpu驱动能运行的版本 ,就按照那个版本就好啦,否则你可能需要更新驱动或者更换pytorch和cuda的版本。
然后就要卸载旧的pytorch和cuda包:
conda uninstall pytorch torchvision torchaudio libtorch pytorch-cuda
如果提示没有哪些包可卸载,就卸载已有的就行了。
我的话是卸载这两个:
conda uninstall pytorch pytorch-cuda
卸载完就要重新安装啦:
conda install pytorch pytorch-cuda=11.8 -c pytorch -c nvidia
-c可以指定从哪个通道下载。11.8是我的cuda版本,你可以选择自己的版本。
最后得到新的pytorch版本:
妙啊,到这就能够运行了。
其他解决?
如果你和我不一样,请尝试排查以下内容:
1,是否安装pytorch和cuda?
2,cuda版本是否超过GPU允许的版本?
3,你是否在不同包管理器下载的cuda和pytorch?
4,pytorch和cuda版本是否匹配?
如果你犯了一些错误或者没找到错误,下面的建议可以参考:
请抛弃当前的环境配置文件,自己手动安装各可能有问题的组件,根据需要一个个添加或者找已经正常运行的朋友借一个环境配置文件(见最后)。
请尝试使用pip安装pytorch和cuda,或者指定通道的情况下用conda安装。
请新建一个环境并尝试用conda或者pip安装cuda和pytorch而不是各自安装部分依赖。
最后请确保你进入了正确的conda环境并设置为你的脚本的执行环境。
一些记录:
cudatoolkit在我的依赖中并不存在,但是你的环境中可能使用这个作为运行环境。乃至于下面这种也是正常的。
一个不谨慎的检查脚本:
echo "=== NVIDIA驱动检查 ==="
nvidia-smi || echo "! 驱动未安装"echo "\n=== CUDA环境检查 ==="
which nvcc &>/dev/null && nvcc --version || echo "! CUDA未安装"echo "\n=== PyTorch检查 ==="
python -c "import torch; print('\nPyTorch版本:', torch.__version__, '\nCUDA可用:', torch.cuda.is_available())"
把他写入一个sh文件然后bash它就好了。
当然了第二部提示你cuda没安装可能是你和我一样是pytorch-cuda的原因。实在想要一个就安装cuda-nvcc就好了。
conda下载慢或者pip超时的情况
很简单就是进行换源。
conda添加清华源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch
同时pip也要换源
我这里全局换源的原因是不想手动一个个操作,还是想直接用配置文件生成环境。
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
如果有条件,可一个个使用临时换源:conda其实类似的也可以。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package_name
如何避免再来一次?
保存你的环境依赖吧!
进入你的虚拟环境:
conda env export > myenvir.yml
你的环境被保存了,下次只要:
conda env create -f myenvir.yml
就搞定了。