写点什么

“一键飞桨”,轻松实现飞桨框架和套件的下载安装!

  • 2023-03-13
    北京
  • 本文字数:3023 字

    阅读完需:约 10 分钟

大家好,我是散步,很荣幸能和大家分享一个搭建飞桨全系列产品开发和使用环境的小工具。希望它能够帮助你在新场景下快速搭建飞桨工作台,让大家能够更简单地将飞桨安利给身边的朋友。


简介


你是否在新的虚拟环境或者新电脑上配置飞桨环境时发现一个个克隆飞桨的仓库很麻烦?没有关系!我给大家提供了一个超级方便的工具,你可以一键安装飞桨框架以及 CUDA(目前该工具默认安装 CUDA11.2 版本)和 CUDNN 的环境配置,并且可以一键下载并安装自己想要的飞桨套件,省去搜索、下载、环境配置的时间,更专注于项目内容的开发。

你可以通过 AI Studio 项目的挂载数据集或者 GitHub 仓库获取该工具(后文统称“一键飞桨”工具)。

  • AI Studio 项目

https://aistudio.baidu.com/aistudio/datasetdetail/189777

  • GitHub 仓库

https://github.com/sanbuphy/fool-proof-paddle


操作步骤


接下来我将详细介绍在 Linux 和 Windows 系统上如何使用“一键飞桨”工具。

备注:所有操作都在安装工具解压后的文件夹内完成。


Linux 环境下使用说明


Linux 环境下的下载


如果仅仅为了下载,你可以直接在解压“一键飞桨”后的文件目录下输入 bash main.sh 命令行,随后输入 1 即可进入下载选择界面。



在下载选择界面,通过连续输入飞桨框架或者飞桨套件对应的大写字母,即可下载对应的仓库。假设我们想下载飞桨框架 Paddle 仓库、飞桨模型压缩工具 PaddleSlim 仓库、飞桨轻量化推理引擎 Paddle Lite 仓库,我们可以连续输入大写字母 ABC,即可实现以上仓库的自动下载。根据图片所示,可以大概了解套件的下载方法,例如:



最后看到以下内容,就说明已下载成功!



Linux 环境下的安装


为了实现飞桨框架以及飞桨套件的安装,首先在命令行输入 source main.sh,即出现以下界面。



随后输入 2 以执行安装飞桨框架以及飞桨套件,出现的界面如下图所示。



随后输入 1 以安装飞桨框架及对应 CUDA 环境。输入 2 以安装之前下载好的飞桨套件。


Windows 环境下使用说明


Windows 环境中的下载


输入 python main.py 然后输入对应的字母完成下载。如果你没有安装 git bash,此时会自动下载并安装 git bash。注意,请一路按照默认安装!不要自己改安装地点。



输入字母后便进入下载方式的选择,此时推荐第一次选择 N,第二次选择 Y 即可使用 gitee 的 http 方式下载各个仓库,速度较快。


最后,当看到下方内容,就说明已经下载成功啦!



Windows 环境下的安装


在对应虚拟环境中执行 python main.py,其他按照提示操作即可完成飞桨框架的安装和所有已下载套件的安装。



除了可以安装飞桨框架,目前“一键飞桨”工具支持下载和安装的飞桨套件如下:(不断更新中)

  • PaddleDetection

  • PaddleSpeech

  • PaddleClas

  • PaddleSeg

  • PaddleNLP

  • PaddleVideo

  • PaddleOCR

  • PaddleGAN

  • PaddleSlim

  • FastDeploy 


工具制作过程分享


虽然该项目看起来简单,但实际整个工具的制作过程遇见了较多困难。在此特别感谢帮助我测试的每个朋友,因为你们让项目更为稳健。制作工具的初始,我也考虑过直接使用 Python 做成跨平台下载与安装工具,但考虑到可实现性和速度,最终采用了更简单直接的功能实现方式。同时,为了防止安装问题发生,安装代码中还加入了很多防御性检查(是否安装、是否下载、是否安装成功),最大程度提高了工具的稳健性。接下来我将针对 Linux 和 Windows 版本分别介绍实现过程中的困难点:


Linux 环境工具制作分享


主项目的入口主要起到任务分发的作用,制作过程中先保证了每部分的独立功能后才进行整体集成,以保证单元的可执行、可测试。



为了快速实现功能,这里选择了简单粗暴的 shell 数组方式。对于下载部分的实现可在 download_paddle.sh 里查看:



如果你想要加入新的下载仓库,可以用同样的方式在下面加入即可。在环境安装环节,考虑到网络可能存在不稳定的情况,采用“wget -c”保证飞桨程序安装包能顺利安装。



与 CPU 版本的飞桨不同,GPU 版本安装好后还需进行环境配置。



环境配置环节,CUDA 和 CUDNN 的安装最为让人头痛。为此,加入检测环境和驱动 CUDA 版本的判断,以覆盖大部分用户安装的基础环境。同时根据 NVIDIA 官方文档详细对照了 gcc 版本确定了安装逻辑(CUDA 程序安装对 gcc 版本有要求)。这让不同用户都可以稳定安装,避免报错。



接下来是 CUDNN 安装环节,在这一部分我还做了多项检查保证安装的正确:



脚本的最后加入环境变量,以让默认链接过程能搜索到对应的依赖。


这里使用 CUDA 而非网上常见的 CUDA 11.2 等完成操作,是因为 CUDA 的本质是软链接,在完成安装后会被自动软链接为安装版本。软链接对象可在对应文件夹下使用 ll 命令查看。通过这种方式,可实现 WSL 和 Linux 实体机的共同兼容。



至此,下载和安装的脚本思路已经介绍完毕,接下来我将介绍有关套件安装脚本的一个值得注意的小技巧:

部分套件需要运行 python 脚本以验证效果。通过使用```覆盖部分 python 脚本,实现了用 python – c 在 shell 脚本中验证完整套件。



也可以通过逐个分割实现相同目的。但过于繁琐,并不推荐。



至此,Linux 环境工具制作过程已经大概介绍完毕。总体来说使用 Linux 安装脚本制作较为简单(个人偏爱)。

Windows 环境工具制作分享


Windows 工具的制作比 Linux 环境要繁琐的多。因为很多调用方式特殊,且与 Linux 完全不兼容,所以在查阅工具的过程中花费了很多时间。这里我采用在脚本中直接下载安装 git-windows 的方式,以实现 Linux 环境的下载工具的直接复用。


对于 Windows 环境下的飞桨安装工具,一开始我没有想好怎么利用当前虚拟环境解释器去安装对应的环境,只能用这种方法对需要 pip 安装的库进行安装:



之后我看到了可以通过 sys.executable 获得当前解释器的路径,这就给了我们直接运行命令行的可能,之后的 pip 安装都会在前面加上这样一句用于对应虚拟环境解释器的指定:



在 Windows 环境下,由于默认命令行缺少很多工具,所以我们要通过 powershell 简介进行下载、安装、转移操作:



此时最难的一步是安装 CUDNN,需要满足以下条件:

1)管理员权限操作,因为 CUDA 的安装地点默认在需要管理员操作权限的地方;

2)复制文件后需要覆盖目标文件;

3)在 powershell 或者 cmd 中实现这些操作。


最后我和小伙伴讨论出一个折中的方案,我们通过一个间接的 python 文件执行拷贝,同时显式指定了需要覆盖。




但这里面临另一个问题,由于我们安装的环境是 python3.7,但 shutil 的 copytree 只有在 python3.8 之后的版本才支持显式覆盖的操作,所以在这里对源码进行了改进:



看完了飞桨安装和环境配置,我们最后来看下套件的安装,其全部实现逻辑在 paddle_tools.py 中。由于我们需要把套件安装到对应的执行环境中,并且要满足在对应文件夹下执行命令的需求,所以在每个执行函数的开头都必须进行一个“初始化”的操作:



这里的 cd_dst_dir 就是进入目标文件夹的意思,通过获取函数名和当前目录可以直接让 os.system 运行的 cmd 进入预期文件夹,便可实现后续指令的顺利运行:



部分 Windows 用户会在安装 PaddleDetection 过程中遇到 pycootools 编译问题,导致库无法使用。这里加入了提示和下载,以保证安装后的直接使用:



至此,我们大致浏览了 Linux 和 Windows 的飞桨环境配置、安装、套件下载工具的制作流程。希望对你有些帮助,理论上你也可以根据这样的一套模板改造出自己的任何安装工具。


总结


本项目还在不断更新迭代,后续还将加入 PaddleRS、PaddleTS 、Paddle3D、PaddleRec、VisualDL 库和飞桨 awesome-DeepLearning 仓库。如果你有想法,欢迎加入和我一起完善这个工具或各类 bug 报告。后续,我们还会逐步补充完善各库的简介,以帮助大家简单轻松的探索其他套件。

欢迎大家 fork 项目,和我一起体验使用飞桨的快乐!

https://aistudio.baidu.com/aistudio/projectdetail/5448389

用户头像

还未添加个人签名 2022-12-26 加入

还未添加个人简介

评论

发布
暂无评论
“一键飞桨”,轻松实现飞桨框架和套件的下载安装!_框架_飞桨PaddlePaddle_InfoQ写作社区