以下记录博主自己安装Pytorch、CUDA的记录,是给自己做记录看的。很乱,不利于读者看,所以建议先看别的文章,实在没办法了可以看看我这篇。不过文章虽然很乱,但既然你搜了这种类似文章,我就敢保证这里面有你要学的东西。
查到pytorch对应版本为1.7.1,ok然后就开始下载。接下来就是一个接一个的问题。
C:\Users\Chen\anaconda3\envs\LSTM\Lib\site-packages目录下看到了pytorch,然后也能正常用,但是由于OW要用1.7.1版本的,所以打算卸载它,然后就在这里conda uninstall pytorch了一下,确实发现pytorch没了。至此,第一阶段结束,OW认为已经卸载干净了。但是要是真的干净了OW就不会提这段了,事实上有问题!底下会提到。
三、然后开始安装pytorch,顺利按照博主的提示在的LSTM环境下输入conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch(该代码是在官网拿来的)。结果有如图所示:
(提一句:图二这么多路径,比如:anaconda/pkgs/main/win-64::cudatoolkit-11.0.221-h74a9793_0,这个指的是channel!也就是说你这个包是从这里找到的,是从这里下载的!最低下我还会专门提这件事的)
看到这里我没有输入y允许安装因为我在奇怪,为什么我还要安装cudatoolkit-11.0???(还算你小子会观察)我之前不是安装过了吗?要是它几kb也就算了,关键是600M,这我心疼内存啊。然后我就开始百度为什么了
四、(花了很多时间后…)我明白了,之前的cuda是在官网下载的,并且是下载到系统里面的。具体位置在C:\Program Files\NVIDIA GPU Computing Toolkit:
虽然和这里的名字一样也是cudatoolkit,但是两者有很大区别,官网下载的是完整版,这次这个是阉割版(父集与子集的关系),它的位置在:C:\Users\Chen\anaconda3\pkgs
(聪明的你会发现这些包真的被安装在了C:\Users\Chen\anaconda3\pkgs路径下了,可是我是在LSTM环境下用的conda欸!什么情况?底下会说)
也就是说:官网那个是自己去下载的,是最全的。但是如果你下pytorch,pytorch的官网会自己给pytorch配置需要的cudatoolkit(一个针对pytorch的)【所以其实不用下完整版cuda也行】这里补充一句:看到有博主说:在真正用pytorch时,它还是会先找完整版的cuda来用,即用系统环境PATH下的、
五、然后OW就放心地继续步骤三安装了,五个小时后下好了…但是报错了(尼玛这也能报错):ld not remove or rename C:\Users\Chen\anaconda3\pkgs\pytorch-1.7.1-py3.7_cuda110_cudnn8_0\Lib\site-packages\caffe2\python\caffe2_pybind11_state.cp37-win_amd64.pyd. Please remove this file manually (you may need to reboot to free file handles)这个错误大致意思是让我把C:\Users\Chen\anaconda3\pkgs里面的文件手动删除,这里上面提到的pkgs包浮出水面。到底它是什么?不仅抢了我LSTM的环境,还让我报错?
百度后:
#=======================================================
一位博主的话:
我在使用conda安装虚拟环境的过程中,下载一些包,比如torch等,发现在虚拟环境中有一份以外,pkgs文件夹下同样也会出现一份,大小一样,这样就让我担心一物多备份导致浪费空间的问题,
Anaconda/pkgs文件夹9.2G
Anaconda/envs/first_env文件夹4.4G
Anaconda文件夹才9.5G!!!
于是我查找了一些资料,
PKGS的概念:
在anaconda中,最安全的安装和升级命令是conda install XXX,而python中是pip,但在anaconda下依然可以使用pip升级,这样一些依赖可能会因为更新后的版本过高出现异常。
在conda的设计中,目录'pkgs'是下载、存放缓存,以及提取下载的conda包的地方。同时,anaconda一起携带的包也会放在这里。
它有一个非常关键的作用:我们在构建一些envs的时候,对一些包的依赖会通过硬盘链接链接到pkgs目录,这样虚拟环境生成的速度大大加快,占用空间就大大减小了!!!
原文链接:Anaconda中pkgs文件夹详解_程序猿的探索之路的博客-CSDN博客_anaconda pkgs
#==========================================================
明白了:包其实虽然下在了这里,但是LSTM依然能用,LSTM会通过一些硬盘链接链接到pkgs目录,然后使用这些包。
(((这里提一嘴:这位博主说:我在使用conda安装虚拟环境的过程中,下载一些包,比如torch等,发现在虚拟环境中有一份以外,pkgs文件夹下同样也会出现一份,大小一样,这样就让我担心一物多备份导致浪费空间的问题。然后步骤二提到的问题来了,真的卸载干净了吗?然后我就在pkgs这里发现了这个包:
时间也对的上,就是前几天随手下的pytorch!(尼玛1.6个G啊!!!!)果断删了。。
但是有一点要注意!,博主说会有两份一摸一样的,确实pytorch1.6这里是得到了证实,但是在我解决了所有问题成功安装了pytorch1.7后,我确实发现pkgs中有一份pytorch1.7,但是满心欢喜地去LSTM找时却没有!不是没有!!!是名字变了!!!变成了torch!!(都是2.6个G!)
C:\Users\Chen\anaconda3\envs\LSTM\Lib\site-packages\torch
C:\Users\Chen\anaconda3\pkgs\pytorch-1.7.1-py3.7_cuda110_cudnn8_0
这两个是一样的!!
)))
大概明白道理后,我有了勇气去删除这个文件夹(此时的我不明白原理,所以畏畏缩缩,但是最底下我发现了原理,到底是为什么要删这个!见底下!!)
我把C:\Users\Chen\anaconda3\pkgs\pytorch-1.7.1-py3.7_cuda110_cudnn8_0这个文件夹删掉了,然后重新conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch,它不会重新下一遍pytorch(当时比较担心这个,因为1.6个G加上5个小时我心态会裂),最后我发现C:\Users\Chen\anaconda3\pkgs\pytorch-1.7.1-py3.7_cuda110_cudnn8_0又出现了,并且内容和之前不一样了,然后就解决了。后来我思考了一下为什么会报这样的错误,我觉得可能是程序设计者在设计时本来时设置了程序删除这个文件的,但是由于现在win对文件的管理很严格,不少操作都要管理员权限,所以原来的程序就不顶用了,需要你手动删除。这个猜测是由这个报错提示里这句话而来的:(you may need to reboot to free file handles)【当然以上仅仅是我的猜测,但我觉得很有道理】
(其实这是一个乌龙,自己的不仔细反而成就了OW对pkgs的了解,具体情况底下细说!)
=====================================================================================================================================
大功告成===================================================================
===================================================================
题外话:
一篇文章:conda配置清华源 - 简书 (jianshu.com)
conda config --add channels Index of /anaconda/pkgs/free/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
conda config --add channels Index of /anaconda/cloud/pytorch/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
(自己对这4行命令的理解:1、2、4行你可以理解为像环境变量一样的东西,而anaconda/pkgs/free/这个你可以理解为一个库,里面有大量的包,而这次你的pytorch就是从anaconda/pkgs/main/这个库里面找到然后下载的)
这个配置好以后,以后再安装其他的软件如果要用到清华镜像源网站就不用了重新配置了。
注意!如果切换镜像后当出现下载不了的情况,就先切换默认源,然后再修改另一个可以使用的conda源(一定要先恢复默认,再换另一个!!!)
切回默认源:
conda config --remove-key channels
但为什么pytorch还是下了5个小时???我来解释!!
你真的看懂下图了吗?
图一中:红框框当时OW看都没看一眼(你可真是那个啊!)现在看到了吗?这些包大部分确实用了清华的镜像网站来下载,但是唯独关于pytorch的那几个包没用!!!这就是为什么,OW就算加了镜像网站,结果下pytorch的时候还是花了5个小时,因为用的还是原来的网站!
===============================================
一开始为什么OW回去了解pkgs?还不是那个报错:ld not remove or rename C:\Users\Chen\anaconda3\pkgs\pytorch-1.7.1-py3.7_cuda110_cudnn8_0\Lib\site-packages\caffe2\python\caffe2_pybind11_state.cp37-win_amd64.pyd. Please remove this file manually (you may need to reboot to free file handles)然后开展了一系列的调查。
但是!!!尼玛的!其实一开始这个错误就有了,是在盘古开天地的时候就已经告诉你啦!你自己不仔细看!!!在你conda install pytorch的时候就告诉你了呜呜呜。(当然,如果你当时仔细看了那就不会有后来对pkgs的了解了,因祸得福哈哈哈)看下图:
人家先是:Solving environment: failed with initial frozen solve. Retrying with flexible solve.然后人性化的帮你自动找方案二,然后真的找到了:Solving environment: done,但是需要你做一件事:WARNING conda.gateways.disk.delete:unlink_or_rename_to_trash(143): Could not remove or rename C:\Users\Chen\anaconda3\pkgs\pytorch-1.7.1-py3.7_cuda110_cudnn8_0.tar.bz2. Please remove this file manually (you may need to reboot to free file handles)
好家伙好家伙,你是™的一点都不看啊,挎挎挎下一步啊,真当这是傻瓜式安装了?!
话说回来,这个报错说明了什么?说明早在安装pytorch之前这个逼C:\Users\Chen\anaconda3\pkgs\pytorch-1.7.1-py3.7_cuda110_cudnn8_0.tar.bz2.就存在了,为什么啊?对啊,为什么啊?对啊,傻逼,还不是你自己干的好事?
我帮你回忆回忆:11.15的时候,你在上数据库,然后这节课快下课的时候,你在LSTM环境下下载了pytorch,前几个包下的巨快,但是到pytorch1的时候就噶了,巨他妈慢,你转念一想,忘记用清华镜像网了,然后怀着忐忑的心直接对着prompt一个叉叉结束了进程(我当时也怕这样前面下的那些包不就存在了?pytorch也下了一点点,会不会有什么影响,但是没办法啊,只能硬着头皮结束了)
好了,回忆到此结束,问题好巧不巧就出在这!正是因为pytorch也下了一点点,而且就是它C:\Users\Chen\anaconda3\pkgs\pytorch-1.7.1-py3.7_cuda110_cudnn8_0.tar.bz2.
现在知道为什么报错了吧!!
此外!!前面下的那些包没影响嘛?有!当然有!看下图:
这个图是在下载pytorch包之前就有的,当时也™看都没看一眼(这个东西自己非常早之前就遇到过,当时就没搞懂,这次95%搞懂了,剩下的5%留点敬畏之心)
翻译:底下的包会被优先级更高的channel所覆盖。
什么意思?意思是:底下的包现在的环境下已经存在啦!(为什么已经存在了?现在知道了?自己干的好事,这好事是真的褒义不是贬义!因为它让我彻底明白了这句话的意思)但是由于这些已经存在的包是通过默认channel下载来的(当时没设置清华镜像网),和你现在指定的channel不一样(现在是清华镜像网)。这个包在默认channel和清华镜像网上都有,问题来了,电脑不知道这两个网站的包是不是一样的,虽然它们名字一样,所以保险起见,电脑会覆盖它们!那么,
谁被谁覆盖?默认路径下载的包被清华镜像下载的包覆盖(或者说被higher-priority channel里面的包覆盖)
为什么说清华镜像网是a higher-priority channel?因为你添加了清华镜像网站并把它作为优先channel
==============================================
Conda 除了虚拟环境下的还有关联文件下的
Pip只有当前虚拟环境下的
当关联环境下有这个包,再用conda在其他虚拟环境下下载该包,就会直接关联,不用下载
比如说base环境下有包,在另一个环境下下载同样的包,就会关联上,不用真的下载,直接复制过去或者关联即可
验证得到:pip下的list是conda下list的子集
OW验证一下:
================================================
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch
但有时候我们用:
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch -c conda -forge
这两个有什么区别?
你可以把pytorch和conda -forge理解为两个库,我们的pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0就是从这两个库中找到并下载的。
而-c pytorch -c conda -forge里面的-c就是指明从哪个库进行下载
(博主的冷知识:据我理解,这个其实也是一个库,里面有很多的包(package),其中就有一个包是cudatoolkit 11.1,其中-c conda-forge是指明在库conda-forge中下载cudatoolkit 11.1这个pkg。百度之后发现,这个也是被anaconda组织(org)收录的库,我们平常conda install jieba后面没有加-c的时候,默认好像是使用anaconda库。
原文链接:https://blog.csdn.net/qq_43391414/article/details/115069247)