配置Yolo虚拟环境环境【坑记录+离线安装】

第一次接触anaconda虚拟环境,很蠢,什么都不懂,只能跟着做。


虚拟环境什么意思

网上查了很多,概念都快背下来了,死活不理解虚拟环境到底什么意思,这个“虚拟”到底什么意思。有时候真挺烦的查出来的所有人的回答都一个样,看了很多篇还是看不懂……

网上的概念:“virtual environment 它是一个虚拟化,从电脑里独立开辟出来的环境。通俗的来讲,虚拟环境就是借助虚拟机docker来把一部分内容独立出来,我们把这部分独立出来的内容称为“容器”。

其实“虚拟环境”就是一个实实在在的文件夹,就存在于你的D盘里,不是真的“虚拟”。每个文件夹都有自己的python.exe和自己的包,它们之间互不干扰,不用担心版本会撞的问题。比如我原生python是3.9.6(32位),anaconda base python是3.9.7(64位),anaconda pytorch_gpu python是3.9.12(64位),anaconda mindspore python是3.5(64位),这都互不影响的。

ps:我是先装python再装anaconda的,网上好多人说这种情况anaconda python的版本必须与原生python的版本一致,不然会冲突。后来发现不会啊,互不影响的。

之所以叫“虚拟”,大概是因为它是根环境的一份拷贝吧,就像虚拟世界是现实世界的副本一样。我真的一直纠结于“虚拟”这两个字,一开始以为不是本地的东西…虽然知道它是用来进行环境隔离的,但不知道它的实体到底是什么,原来就是个文件夹,通过某种技术实现了隔离。


为什么是这样的配置流程

当时看教程怎么配置Yolo环境,教程很多但是千篇一律没有人说这到底是为什么,为什么要先自己下载pytorch,再在pytorch环境中install requirement,我也不懂,只能跟着做下来,但是并不理解意义。现在突然懂了。

pip install -r requirements.txt其实就是下载txt里提到的所有包,里面包括一个叫torch的,就是pytorch。所以,不用事先下载pytorch,直接在anaconda里建一个虚拟环境,然后执行pip install -r requirements.txt 就可以;甚至不用anaconda,直接在项目本地的venv里执行pip install -r requirements.txt 也一样。
但是,这样下载下来的包版本都是最新版
,torch包大概率与你电脑的cuda版本不匹配,多半是cpu版的。如果想下载指定版本的pytorch,应该pip install torch==1.10.0+cu102,而不是直接pip install torch。这就是为什么要自己先下载pytorch,而不是用requirements统一下载。

扫描二维码关注公众号,回复: 15899730 查看本文章

另外,教程里都是执行cudatoolkit的下载命令,也就是把torch、torchvision、torchaudio都打包下载了,但是其实也可以一个一个单独自己下载,比如pip install torch==1.10.2+cu102,pip install torchvision==0.11.3+cu102,自己下载的话,千万要注意版本的匹配它们之间有严格的版本对应关系,下载之前查清楚再下:torchvision · PyPI

如果想要在别的项目里也使用pytorch,还是建议下载一下anaconda,然后用conda管理pytorch包吧;如果只是临时项目或者比赛需要运行一下Yolo,之后不搞了,则可以不下anaconda,直接用项目本地的venv也能跑通,效果一样。

如果选择了先下载anaconda,然后新建虚拟环境下载pytorch,那么下完pytorch之后,再在pytorch环境中(这个“环境”指的就是pytorch下载的路径,下载在哪个文件夹或者说哪个虚拟环境)执行pip install -r requirements.txt,此时由于txt里关于torch的要求已经满足了,其它包还没满足,所以该命令会把其它包装到pytorch所在的环境里(如果包已存在且版本不低于txt的要求,则不予理会;如果包不存在,则下载最新版),整个txt的要求就全满足了。

说白了就是,一个直接用pip install requirement安装最新版的所有包;一个先自己安装torch包,再用pip install requirement安装其它包。


离线安装yyds

为啥教程没有一个讲离线安装的啊,都是在线安装…这里记录一下离线安装过程:

1这里有各种CUDA版本对应的pytorch:https://download.pytorch.org/whl/

找到需要的torch、torchvision(我是做视觉所以没下载torchaudio),下载到本地。我(本机性能是cuda10.2,windows系统,该虚拟环境是python3.9)下载的是torch 1.10.0+cu102 torch-1.10.0+cu102-cp39-cp39-win_amd64.whl、torchversion 0.11.1 torchvision-0.11.1+cu102-cp39-cp39-win_amd64.whl它们之间有严格的版本对应关系,下载之前查清楚再下:torchvision · PyPI

2切换到pytorch_gpu虚拟环境,输入pip install d:\Desktop\xxxx.whl,进行离线下载即可(“xxxx.whl”就是刚刚下载的torch的whl文件名,我把它放到桌面上了,其它whl同理)。

>>>(pytorch_gpu) C:\Users\XXX> pip install d:\Desktop\torch-1.10.0+cu102-cp39-cp39-win_amd64.whl

3下完之后,执行下面语句,测试是不是gpu版的:

在pytorch_gpu虚拟环境中输入python,然后:

>>>(pytorch_gpu) C:\Users\XXX> python
>>>import torch
>>>torch.cuda.is_available()  # gpu版的输出true,cpu版的false

【====================注意====================】

这里的“离线”并不是真的不连网 !

安装某个包(比如torch)的时候,必须要先安装torch包的依赖包,最后才是安装torch。在依赖包全部安装完成之前,是无法安装torch包的。

在线pip install的时候,依赖包的安装都是通过网络请求自动完成的;但如果完全离线,就要事先将依赖包一个一个按顺序下载好才行,因为没有网络的情况下,是无法通过网络请求安装依赖包的。

可以看到,我上面说的“离线”安装pytorch的过程并没有安装任何依赖,而是直接pip install torch.whl,因为我是连网了的。有网的情况下依然选择“离线”安装,是由于torch包太大,在线pip install下不下来,所以我采用whl的方式;而在pip install torch.whl的时候,它会检测到需要numpy,因此它会通过网络请求在线安装numpy,由于numpy比较小,所以在线安装没有问题。

所以上述过程不能算“完全离线”,严格说应该是“半在线半离线”吧:离线安装大的包,在线安装它的依赖包。

参考:
离线安装Pytorch 最简单 高效的方法_正在学习的浅语的博客-CSDN博客
python安装包的离线安装方法_离线安装python包_MasonYyp的博客-CSDN博客

离线下载非常顺利10分钟就好了;我记得当时什么都不懂,跟着教程全是在线下载,因为网络原因一直失败中断,各种报错非常折磨其它包也一样,如果直接在线pip出错解决不了,就用离线安装,注意版本匹配正确,很顺利的。


慎用 -U 指令【坑】

我当时也没查清楚,-U什么意思,是更新的意思。如果是pip install -r requirements.txt,则如果某个包已存在且版本不低于它的要求,它就不会动你了;但如果是pip install -U -r requirements.txt,如果某个包已存在但不是最新版本,它会把这个包卸了,给你重新装一个最新版本!!!

坑记录:一开始我装的是gpu版的pytorch 1.8.1+cu102,由于使用了pip install -U -r requirements.txt,pytorch就被覆盖成pytorch 1.11.0+cpu版本的了(1.11.0正是当时的最新版本)。崩溃。当时都没发现,后来发现怎么莫名其妙变成cpu版的了???排查了好久原来是-U的缘故。

猜你喜欢

转载自blog.csdn.net/m0_52848925/article/details/130847813