|
离线部署python项目全流程详解python项目虚拟环境外网准备版本控制工具conda安装python调试工具pycharm安装python项目下载配置python虚拟环境(可选,建议新手执行)用pycharm打开项目anaconda创建虚拟环境anaconda界面创建虚拟环境anaconda命令行创建虚拟环境激活python虚拟环境anaconda命令行激活虚拟环境pycharm命令行激活python虚拟环境配置python依赖命令行进行python依赖配置(可选)使用pytorch的CUDA版本依赖替换普通版本手动安装指令安装环境测试离线环境部署资源准备具体配置(可选)外网设备和离线设备conda路径不一致时的情况python项目虚拟环境关于虚拟环境基础知识,可参考python虚拟环境详解博文。由于个人工作需要,本文采用conda工具进行python虚拟环境配置及移植。配置虚拟环境前,首先要对python解释器、python运行库(以下称“python依赖”或“依赖”)及其功能有初步的了解。python解释器版本主要分python2和python3两个大版本,大版本之间有重大差异,大版本中的小版本之间也会有一定的不同。愿意深入了解的可以参考博文python版本差异总结学习。本文主要以常用的python3进行示例说明。python依赖拥有强大的功能,能够对系统内各种工具、文件等进行操作,基本可以完成你能想到的任何任务。但是python依赖除对python解释器有版本匹配的要求外,其内部还包含大量依赖关系,并不是每个依赖的新版本都能兼容旧版本的python代码,并且某些特殊的python依赖还需要非python的第三方运行库进行支持。因此,每个python虚拟环境的依赖版本控制都是比较严格的,需要用到版本管理工具(本文使用conda)进行辅助。这里以神经网络框架pytorch为例,pytorch除对python计算库numpy、scipy、matplotlib等有依赖要求外,还对显卡的第三方专用计算库Nvidia驱动、CUDA、CUDNN等有依赖要求。(pytorch相对方便的一点就是把cuda集成到了python依赖中,就可以不用另外安装CUDA,非常方便)因此,如果需要配置一个包含pytorch计算库的python虚拟计算环境,并使其能够调用显卡作为算力,就需要安装显卡驱动、CUDA、CUDNN、python解释器及python依赖。外网准备对python及其依赖有基本了解后,就可以在具备联网条件的外网设备展开工作了版本控制工具conda安装Anaconda下载地址安装过程除以下两点外,其他默认即可:A)为降低在离线环境的工作量,请安装路径和离线环境的anaconda保持一致,本人工作需要,将anaconda安装在D盘根目录,如下所示:B)勾选“配置环境变量”的选项python调试工具pycharm安装按装这个主要是为了用于运行开源python项目确认环境配置无误,对虚拟环境本身没有影响。pycharm下载地址**下载社区版!!!**多数python项目不需要专业版pycharm。绝大多数情况下,专业版pycharm除了增加破解难度以外没有其他作用。安装时同样需要勾选配置环境变量的选项python项目下载github下载需要的项目源代码即可python项目中一般会有一个名为readme(大小写可能有区别)的markdown文件(.md/.MD),一般都内含该项目环境要求,包括python解释器版本、python依赖库及版本、其他第三方依赖库等初学者建议按照项目中对依赖库的最低版本要求配置虚拟环境,有一定的版本控制经验后再使用较高版本依赖库进行兼容替代这里以经典目标检测算法YOLOv5作为部署案例进行实战讲解。进入项目github发布页后,下载源码到本地并解压即可。配置python虚拟环境(可选,建议新手执行)用pycharm打开项目打开后,会发现pycharm试图自动帮助我们配置虚拟环境,这里我们先取消,因为使用venv部署虚拟环境,管理起来相对麻烦一点。打开后,找到readme文件(YOLOv5功能完善,还有专门的中文版readme),点开后在里面会找到一段以install为的内容,里面包含python版本(这里是>=3.8),依赖版本以及安装指令==(在其他项目中,这段内容所在的位置及形式各不相同,最常见的是readme,具体情况需要详细阅读项目的说明文档后自行寻找)==这里详细解释一下这几条指令的含义gitclonehttps://github.com/ultralytics/yolov5#clone1该指令是使用git工具下载项目源码,我们是直接在github上下载下来了,就跳过这一步。感兴趣的可以参考git使用方法学习使用该指令。cdyolov51该指令是在命令行中用于“打开文件夹”的指令,可以理解为在“我的电脑”里面点开了一个文件夹,然后“我的电脑”就会显示该文件夹的内容,我们也可以跳过。具体使用效果如下(其中ls指令是在命令行查看目录内文件的指令):需要注意的是,命令行就可以当成一种纯指令交互的“我的电脑”。执行指令时,会优先从当前目录中寻找相关文件。windows命令行学习请参考深入了解命令提示符(CMD)。pipinstall-rrequirements.txt#install1该指令是用于下载python依赖的指令。pip是每个python虚拟环境都自带的python依赖下载工具,详细用法参考pip详细用法。该指令的含义是指从requirments.txt中寻找项目对python依赖的要求并批量化安装,我们可以找到该文件,发现内部格式如下:可以发现,有的依赖库设置了版本要求(==表示python依赖只能采用该版本号,>=表示python依赖需新于该版本号,piplistPackageVersion---------------------------------------certifi2024.7.4charset-normalizer3.3.2colorama0.4.6contourpy1.1.1cycler0.12.1filelock3.15.4fonttools4.53.1fsspec2024.6.1gitdb4.0.11GitPython3.1.43idna3.7importlib_resources6.4.3Jinja23.1.4kiwisolver1.4.5MarkupSafe2.1.5matplotlib3.7.5mpmath1.3.0networkx3.1numpy1.24.4opencv-python4.10.0.84packaging24.1pandas2.0.3pillow10.4.0pip24.2psutil6.0.0py-cpuinfo9.0.0pyparsing3.1.2python-dateutil2.9.0.post0pytz2024.1PyYAML6.0.2requests2.32.3scipy1.10.1seaborn0.13.2setuptools72.1.0six1.16.0smmap5.0.1sympy1.13.2thop0.1.1.post2209072238torch2.4.0torchvision0.19.0tqdm4.66.5typing_extensions4.12.2tzdata2024.1ultralytics8.2.79ultralytics-thop2.0.5urllib32.2.2wheel0.43.0zipp3.20.0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051也可以在pycharm中查看已安装的python依赖及其版本(可选)使用pytorch的CUDA版本依赖替换普通版本如前文所说,由于pytorch需要使用显卡进行神经网络加速,所以需要安装合适版本的显卡驱动和CUDA。显卡驱动的安装无法跳过,但是可以通过使用pytorch的CUDA版本,来跳过安装CUDA的过程(仅pytorch等少数依赖库具备该功能,并不是每个python依赖都具备该功能)。根据上述方法,我们已经安装了如下版本的torch和torchvision,这两个库需要CUDA支持,也有官方CUDA版本。torch2.4.0torchvision0.19.012在torch官方下载源和torchvision官方下载源中,可以找到这两个库的CUDA版本。可以通过下载后手动安装的方式进行替换,也可以用指令安装进行替换手动安装手动安装需要选择完全合适的版本进行安装,包括1.torch/torchvision版本2.cuda版本3.python解释器版本4.操作系统版本5.CPU架构版本具体版本号为和下图中从左到右所示:安装前,首先确保以安装显卡驱动(这里以N卡为例),在终端使用指令,得到如下输出:nvidia-smi1其中,右上角的CUDAVersion表示该驱动最高支持的CUDA版本,笔者电脑为12.2,不能安装高于12.2的CUDA。汇总得到具体版本如下表所示:版本号torch2.4.0torchvision0.19.0CUDA版本pipinstall.\torch-2.4.0+cu121-cp38-cp38-win_amd64.whlLookinginindexes:https://pypi.tuna.tsinghua.edu.cn/simpleProcessingf:\work\pythonblog\yolov5-master\torch-2.4.0+cu121-cp38-cp38-win_amd64.whlRequirementalreadysatisfied:filelockind:\anaconda\envs\yolov5\lib\site-packages(fromtorch==2.4.0+cu121)(3.15.4)Requirementalreadysatisfied:typing-extensions>=4.8.0ind:\anaconda\envs\yolov5\lib\site-packages(fromtorch==2.4.0+cu121)(4.12.2)Requirementalreadysatisfied:sympyind:\anaconda\envs\yolov5\lib\site-packages(fromtorch==2.4.0+cu121)(1.13.2)Requirementalreadysatisfied:networkxind:\anaconda\envs\yolov5\lib\site-packages(fromtorch==2.4.0+cu121)(3.1)Requirementalreadysatisfied:jinja2ind:\anaconda\envs\yolov5\lib\site-packages(fromtorch==2.4.0+cu121)(3.1.4)Requirementalreadysatisfied:fsspecind:\anaconda\envs\yolov5\lib\site-packages(fromtorch==2.4.0+cu121)(2024.6.1)Requirementalreadysatisfied:MarkupSafe>=2.0ind:\anaconda\envs\yolov5\lib\site-packages(fromjinja2->torch==2.4.0+cu121)(2.1.5)Requirementalreadysatisfied:mpmath=1.1.0ind:\anaconda\envs\yolov5\lib\site-packages(fromsympy->torch==2.4.0+cu121)(1.3.0)Installingcollectedpackages:torchAttemptinguninstall:torchFoundexistinginstallation:torch2.4.0Uninstallingtorch-2.4.0:Successfullyuninstalledtorch-2.4.0WARNING:Failedtoremovecontentsinatemporarydirectory'D:\Anaconda\envs\yolov5\Lib\site-packages\~unctorch'.Youcansafelyremoveitmanually.Successfullyinstalledtorch-2.4.0+cu121(yolov5)PSF:\work\pythonBlog\yolov5-master>pipinstall.\torchvision-0.19.0+cu121-cp38-cp38-win_amd64.whlLookinginindexes:https://pypi.tuna.tsinghua.edu.cn/simpleProcessingf:\work\pythonblog\yolov5-master\torchvision-0.19.0+cu121-cp38-cp38-win_amd64.whlRequirementalreadysatisfied:numpyind:\anaconda\envs\yolov5\lib\site-packages(fromtorchvision==0.19.0+cu121)(1.24.4)Requirementalreadysatisfied:torch==2.4.0+cu121ind:\anaconda\envs\yolov5\lib\site-packages(fromtorchvision==0.19.0+cu121)(2.4.0+cu121)Requirementalreadysatisfied:pillow!=8.3.*,>=5.3.0ind:\anaconda\envs\yolov5\lib\site-packages(fromtorchvision==0.19.0+cu121)(10.4.0)Requirementalreadysatisfied:filelockind:\anaconda\envs\yolov5\lib\site-packages(fromtorch==2.4.0+cu121->torchvision==0.19.0+cu121)(3.15.4)Requirementalreadysatisfied:typing-extensions>=4.8.0ind:\anaconda\envs\yolov5\lib\site-packages(fromtorch==2.4.0+cu121->torchvision==0.19.0+cu121)(4.12.2)Requirementalreadysatisfied:sympyind:\anaconda\envs\yolov5\lib\site-packages(fromtorch==2.4.0+cu121->torchvision==0.19.0+cu121)(1.13.2)Requirementalreadysatisfied:networkxind:\anaconda\envs\yolov5\lib\site-packages(fromtorch==2.4.0+cu121->torchvision==0.19.0+cu121)(3.1)Requirementalreadysatisfied:jinja2ind:\anaconda\envs\yolov5\lib\site-packages(fromtorch==2.4.0+cu121->torchvision==0.19.0+cu121)(3.1.4)Requirementalreadysatisfied:fsspecind:\anaconda\envs\yolov5\lib\site-packages(fromtorch==2.4.0+cu121->torchvision==0.19.0+cu121)(2024.6.1)Requirementalreadysatisfied:MarkupSafe>=2.0ind:\anaconda\envs\yolov5\lib\site-packages(fromjinja2->torch==2.4.0+cu121->torchvision==0.19.0+cu121)(2.1.5)Requirementalreadysatisfied:mpmath=1.1.0ind:\anaconda\envs\yolov5\lib\site-packages(fromsympy->torch==2.4.0+cu121->torchvision==0.19.0+cu121)(1.3.0)Installingcollectedpackages:torchvisionAttemptinguninstall:torchvisionFoundexistinginstallation:torchvision0.19.0Uninstallingtorchvision-0.19.0:Successfullyuninstalledtorchvision-0.19.0Successfullyinstalledtorchvision-0.19.0+cu12112345678910111213141516171819202122232425262728293031323334353637383940指令不报错,表示安装完毕,再次使用指令查看python依赖版本,发现已经替换成功:piplist1(yolov5)PSF:\work\pythonBlog\yolov5-master>piplistPackageVersion---------------------------------------certifi2024.7.4charset-normalizer3.3.2colorama0.4.6contourpy1.1.1cycler0.12.1filelock3.15.4fonttools4.53.1fsspec2024.6.1gitdb4.0.11GitPython3.1.43idna3.7importlib_resources6.4.3Jinja23.1.4kiwisolver1.4.5MarkupSafe2.1.5matplotlib3.7.5mpmath1.3.0networkx3.1numpy1.24.4opencv-python4.10.0.84packaging24.1pandas2.0.3pillow10.4.0pip24.2psutil6.0.0py-cpuinfo9.0.0pyparsing3.1.2python-dateutil2.9.0.post0pytz2024.1PyYAML6.0.2requests2.32.3scipy1.10.1seaborn0.13.2setuptools72.1.0six1.16.0smmap5.0.1sympy1.13.2thop0.1.1.post2209072238torch2.4.0+cu121torchvision0.19.0+cu121tqdm4.66.5typing_extensions4.12.2tzdata2024.1ultralytics8.2.79ultralytics-thop2.0.5urllib32.2.2wheel0.43.0zipp3.20.012345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152指令安装指令安装相对简单很多,在官网查看到下图后,得知需安装cu121的python依赖,所以在虚拟环境输入下述指令,系统会自动安装对应版本的python依赖:pipinstalltorch==2.4.0+cu121-fhttps://download.pytorch.org/whl/torchpipinstalltorchvision==0.19.0+cu121-fhttps://download.pytorch.org/whl/torchvision12等待指令运行完毕,即为安装成功。环境测试此时,yolov5项目的python虚拟环境已经在外网设备完成部署,注释掉100行的check_git_info(),并执行train.pyLOCAL_RANK=int(os.getenv("LOCAL_RANK",-1))#https://pytorch.org/docs/stable/elastic/run.htmlRANK=int(os.getenv("RANK",-1))WORLD_SIZE=int(os.getenv("WORLD_SIZE",1))#GIT_INFO=check_git_info()#注释这句1234程序会进入自动下载coco数据集的阶段,这表示yolov5的依赖check已经完全完成,环境部署成功。D:\Anaconda\envs\yolov5\python.exeF:\work\pythonBlog\yolov5-master\train.pygithub:skippingcheck(notagitrepository),forupdatesseehttps://github.com/ultralytics/yolov5train:weights=yolov5s.pt,cfg=,data=data\coco128.yaml,hyp=data\hyps\hyp.scratch-low.yaml,epochs=100,batch_size=16,imgsz=640,rect=False,resume=False,nosave=False,noval=False,noautoanchor=False,noplots=False,evolve=None,evolve_population=data\hyps,resume_evolve=None,bucket=,cache=None,image_weights=False,device=,multi_scale=False,single_cls=False,optimizer=SGD,sync_bn=False,workers=8,project=runs\train,name=exp,exist_ok=False,quad=False,cos_lr=False,label_smoothing=0.0,patience=100,freeze=[0],save_period=-1,seed=0,local_rank=-1,entity=None,upload_dataset=False,bbox_interval=-1,artifact_alias=latest,ndjson_console=False,ndjson_file=FalseYOLOv52024-8-20Python-3.8.0torch-2.4.0+cu121CUDA:0(NVIDIAGeForceRTX4070Ti,12282MiB)hyperparameters:lr0=0.01,lrf=0.01,momentum=0.937,weight_decay=0.0005,warmup_epochs=3.0,warmup_momentum=0.8,warmup_bias_lr=0.1,box=0.05,cls=0.5,cls_pw=1.0,obj=1.0,obj_pw=1.0,iou_t=0.2,anchor_t=4.0,fl_gamma=0.0,hsv_h=0.015,hsv_s=0.7,hsv_v=0.4,degrees=0.0,translate=0.1,scale=0.5,shear=0.0,perspective=0.0,flipud=0.0,fliplr=0.5,mosaic=1.0,mixup=0.0,copy_paste=0.0Comet:run'pipinstallcomet_ml'toautomaticallytrackandvisualizeYOLOv5runsinCometTensorBoard:Startwith'tensorboard--logdirruns\train',viewathttp://localhost:6006/Datasetnotfound,missingpaths['F:\\work\\pythonBlog\\datasets\\coco128\\images\\train2017']Downloadinghttps://github.com/ultralytics/assets/releases/download/v0.0.0/coco128.ziptococo128.zip...1234567891011离线环境部署首先,要确保离线设备的CPU架构、操作系统和外网设备的一致。资源准备1.anaconda安装包2.pycharm安装包3.python项目源码4.已配置好依赖的python解释器压缩包(python解释器地址如下,压缩即可)D:\Anaconda\envs\yolov51具体配置1.安装anaconda,流程和外网安装一致,也最好保证路径一致2.将python解释器压缩包解压缩到以下目录中,确保解压后的python程序在该目录的下一级子目录中,即和外网压缩前完全一致D:\Anaconda\envs13.安装pycharm,使用pycharm打开pycharm项目,并根据外网流程配置解释器为第二步解压缩的python解释器做完这三步后,就完成了在离线环境下部署python项目的流程。(可选)外网设备和离线设备conda路径不一致时的情况如果两者不一致,则在解压缩python解释器后,需要用pycharm打开python解释器所在目录,按ctrl+shift+R,或者按下图所示,进入“从文件中替换”模式。搜索框中输入外网的虚拟环境路径,这里以E盘路径为例:E:\Anaconda\envs\yolov51全部替换为离线设备的虚拟环境路径,这里以D盘路径为例:D:\Anaconda\envs\yolov51替换完成后,虚拟环境就可以正常使用了。
|
|