前言
我之前的环境如下:
CUDA 11.0 Pytorch 1.7.1 torchvision 0.8.2 mmcv-full 1.7.1最近在用上述环境跑程序跑的很舒服,后来自己的模型进行了改动—>需要用到一部分傅里叶相关的计算,所以就需要安装CUDA 库中的cuFFT,安装还很顺利,但是跑起来后发现报错如下
即经典报错CUFFT_INTERNAL_ERROR,这应该是40系显卡跑老版本的经典问题了。
报错分析:
首先我怀疑是显存碎片化,因为FFT对于张量必须是连续的,前面层做了切片之后,后面相处就不连续了,于是就会报错。
所以我就在FFT输入加上了.contiguous(),但是没啥用,代码还是依旧报错。此时我就会怀疑是pytorch的问题了,RTX 4060 Ti 是 Ada 架构的新卡,而 torch.fft 调用的底层 CUDA 库(cuFFT)在处理某些显存布局时,如果 PyTorch 版本不够新(比如现在用的 1.x),就会直接崩掉。
这时候有两个方法,第一个最好理解,就是将FFT这一步直接转接到CPU上,用CPU去完成这部分运算,然后逆变换也用CPU,算完之后再送到显卡中。我也确实是这么干的,能用但是计算太慢了,数据量一大就会很卡,所以这个方法只适用于少量的数据。
结论如下
第二个方法就是升级版本,也是本文的重点。
首先需知:
FFT需要用到较高的pytorch
程序中的原代码需要1.x的mmcv,PyTorch 2.0 以后不再支持 mmcv-full,改成了 mmcv(2.x版),API 变动很大,容易报错
经过一个晚上的折腾,我测试了一个较好的版本搭配,也不卖关子,搭配如下,可以实现二者兼得!
PyTorch 1.13.1 + CUDA 11.7 + MMCV-Full 1.7.1+Openmim 0.3.9省流结论
通过本帖子结合之前帖子你可以解决安装mmcv卡轮子的问题,并且有了一个稳定的可以计算FFT以及运行低版本mmcv的搭配组合。
配置教程
1. 安装 PyTorch 1.13.1 (CUDA 11.7)
指令如下
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117测试是否安装成功
python -c 'import torch;print(torch.__version__)'如果输出了版本信息,则安装了 PyTorch,如下图
如果报错,那么就是PyTorch安装的有问题,请自行搜索相关教程,大部分是因为网络不好!!!
2. 安装 mmcv-full 1.7.1
按照之前的操作,去官网填写相关的配置,然后获取指令,但是问题出现…
居然找不到低版本的包了…寄,自己是不愿意用之前帖子中的第二条方法去找本地包然后下载,于是我就搜索其余博客发现写的一塌糊涂鱼龙混杂,然后在git上逛了逛,突然想起来了本贴的主角OpenMMLab,这个方法可以解决很多人的卡轮子问题。
主角简介
OpenMMLab就是开发 MMCV、MMDetection 的那个团队给自己家产品做的下载器
为什么要装它?(它能解决“造轮子”的问题)
用普通的 pip install mmcv-full 之所以卡在“Building wheels”(造轮子),是因为:
- 普通的 pip 很笨:它不知道 OpenMMLab 官方把**预编译好的安装包(.whl)**藏在哪个服务器链接里。
- 结果:pip 找不到现成的包,就只能下载源代码,然后试图调用你电脑上的编译器(GCC/NVCC)现场从零开始编译。这不仅慢(要几十分钟),而且对环境要求极高,极大概率报错。
裝了 mim 之后发生了什么?
当你运行 mim install mmcv-full 时:
- mim 很聪明:它会自动检测你当前电脑装了什么版本的 PyTorch(比如 1.13.1)和 CUDA(比如 11.7)。
- 自动匹配:它会直接去 OpenMMLab 的官方仓库里,精准找到专门为你这个版本组合编译好的那个文件。
- 直接安装:就像下载软件一样,直接下载安装,不需要编译,几秒钟就搞定。
总结:这一步就是为了让你下一步安装 mmcv-full 时能秒装,不再卡住。
3. 安装openmim
pip install -U openmim4. 安装mmcv
mim install mmcv-full然后,你就不会卡在造轮子了,应该会很快地编译成!!!
后记
真是一场酣畅淋漓的调试啊!麻了,相信本次的帖子结合之前的帖子能够彻底解决大家关于mmcv的安装问题!如果对你有所帮助,希望可以点赞关注,嘿嘿!!!
ps:我觉得不管做任何事都要负责,真诚才是必杀器,如果一篇帖子都是胡编乱造,那岂不是害人害己!!!