PaddlePaddle/PaddleX本地离线安装(分别以C++和Python为例)

news2024/11/16 9:18:53

目录

  • 一. 本地离线安装简介
    • 1.1 为什么需要源码编译
    • 1.2 源码编译的产物
    • 1.3 源码编译的原理
  • 二. 本地离线安装准备
    • 2.1 编译准备(C++/Python通用)
    • 2.2 本地编译推荐配置(C++)
    • 2.3 本地编译推荐配置(Python)
  • 三. Windows本地离线安装(C++源码编译)
    • 3.2 编译工具安装
    • 3.3 打开Visual studio 终端
    • 3.4 使用pip命令安装 Python 依赖
    • 3.5 创建编译Paddle的文件夹
    • 3.6 编译安装
    • 3.7 验证安装和卸载
    • 3.8 编译产物
  • 四. 预编译包离线安装
    • 4.1 C++预编译包下载
    • 4.2 Python预编译包安装

一. 本地离线安装简介

本地离线安装通常采用源码编译的方式,可以把预编译包下载到本地,然后进行离线编译。

1.1 为什么需要源码编译

对科研或工程人员来说,可能会遇到一些需要自己开发op的场景,可以在python层面编写op,但如果对性能有严格要求的话则必须在C++层面开发op,对于这种情况,需要用户源码编译飞桨,使之生效。

1.2 源码编译的产物

源码编译通常包括C++的编译和Python的编译,类型不同产物也不同:
C++:

含有 C++ 接口的头文件及其二进制库:用于C++环境,将文件放到指定路径即可开启飞桨使用之旅。

Python:

Python Wheel 形式的安装包:用于Python环境,也就是说,前面讲的pip安装属于在线安装,这里属于本地安装。

1.3 源码编译的原理

PaddlePaddle主要由C++语言编写,通过pybind工具提供了Python端的接口,飞桨的源码编译主要包括编译和链接两步。

  1. 编译过程由编译器完成,编译器以编译单元(后缀名为 .cc 或 .cpp 的文本文件)为单位,将 C++ 语言 ASCII 源代码翻译为二进制形式的目标文件。
  2. 链接过程使分离编译成为可能,由链接器完成。

二. 本地离线安装准备

2.1 编译准备(C++/Python通用)

PaddlePaddle分为 CPU 版本和 GPU 版本。如果您的计算机没有 Nvidia GPU,请选择 CPU 版本构建安装。如果您的计算机含有 Nvidia GPU 且预装有 CUDA / CuDNN,也可选择 GPU 版本构建安装。

2.2 本地编译推荐配置(C++)

1、稳定的 Github 连接,主频 1 GHz 以上的多核处理器,9 GB 以上磁盘空间。
2、GCC 版本 4.8 或者 8.2;或者 Visual Studio 2015 Update 3。
3、Python 版本 2.7 或 3.5 以上,pip 版本 9.0 及以上;CMake v3.10 及以上;Git 版本 2.17 及以上。请将可执行文件放入系统环境变量中以方便运行。
4、GPU 版本额外需要 Nvidia CUDA 9 / 10,CuDNN v7 及以上版本。根据需要还可能依赖 TensorRT。

2.3 本地编译推荐配置(Python)

1、稳定的 Github 连接,主频 1 GHz 以上的多核处理器,9 GB 以上磁盘空间。
2、Python 版本 2.7 或 3.5 以上,pip 版本 9.0 及以上,请将可执行文件放入系统环境变量中以方便运行。
3、GPU 版本额外需要 Nvidia CUDA 9 / 10,CuDNN v7 及以上版本。根据需要还可能依赖 TensorRT。

三. Windows本地离线安装(C++源码编译)

这种源码编译的方式比较复杂,一般开发也用不到,不推荐,更推荐使用预编译包的方式,百度已经帮我们编译好了。

3.2 编译工具安装

安装必要的工具 cmake, git, python, Visual studio 2017/2019:
1.cmake:建议安装 CMake3.17 版本, 官网下载链接。安装时注意勾选 Add CMake to the system PATH for all users,将 CMake 添加到环境变量中。
2.git:官网下载链接,使用默认选项安装。
3.python:官网链接,可选择 3.6/3.7/3.8/3.9/3.10 中任一版本的 Windows installer(64-bit)安装。安装时注意勾选 Add Python 3.x to PATH,将 Python 添加到环境变量中。
4.Visual studio:需根据 CUDA 版本选择对应的 Visual studio 版本,当只编译 CPU 版本或者 CUDA 版本 < 11.2 时,安装 VS2017;当 CUDA 版本 >= 11.2 时,安装 VS2019。官网链接,需要登录后下载,建议下载 Community 社区版。在安装时需要在工作负荷一栏中勾选 使用 C++的桌面开发通用 Windows 平台开发,并在语言包一栏中选择 英语。

3.3 打开Visual studio 终端

在 Windows 桌面下方的搜索栏中搜索终端,若安装的是 VS2017 版本,则搜索 x64 Native Tools Command Prompt for VS 2017适用于 VS 2017 的 x64 本机工具命令提示符;若安装的是 VS2019 版本,则搜索 x64 Native Tools Command Prompt for VS 2019 或 适用于 VS 2019 的 x64 本机工具命令提示符,然后右键以管理员身份打开终端。后续的命令将在该终端执行。

3.4 使用pip命令安装 Python 依赖

1.通过 python --version 检查默认 python 版本是否是预期版本,因为你的计算机可能安装有多个 python,可通过修改系统环境变量的顺序来修改默认 Python 版本。
2.安装 numpy, protobuf, wheel, ninja(这里是联网安装,也可以到各自的官网直接下载whl文件来离线安装):

pip install numpy protobuf wheel ninja

3.5 创建编译Paddle的文件夹

mkdir D:\workspace && cd /d D:\workspace
#也可以先下载好Paddle的源码
git clone https://github.com/PaddlePaddle/Paddle.git

cd Paddle

3.6 编译安装

切换到 2.2 分支下进行编译:

git checkout release/2.4

创建名为 build 的目录并进入:

mkdir build
cd build

执行 cmake:
编译 CPU 版本的 Paddle:

cmake .. -GNinja -DWITH_GPU=OFF

编译 GPU 版本的 Paddle:

cmake .. -GNinja -DWITH_GPU=ON

如果本机安装了多个 CUDA,将使用最新安装的 CUDA 版本。若需要指定 CUDA 版本,则需要设置环境变量和 cmake 选项,例如:

set CUDA_TOOLKIT_ROOT_DIR=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.2
set PATH=%CUDA_TOOLKIT_ROOT_DIR:/=\%\bin;%CUDA_TOOLKIT_ROOT_DIR:/=\%\libnvvp;%PATH%
cmake .. -GNinja -DWITH_GPU=ON -DCUDA_TOOLKIT_ROOT_DIR="%CUDA_TOOLKIT_ROOT_DIR%"

如果本机安装了多个 Python,将使用最新安装的 Python 版本。若需要指定 Python 版本,则需要指定 Python 路径,例如:

cmake .. -GNinja -DWITH_GPU=ON -DPYTHON_EXECUTABLE=C:\Python38\python.exe -DPYTHON_INCLUDE_DIR=C:\Python38\include -DPYTHON_LIBRARY=C:\Python38\libs\python38.lib

执行编译:

ninja

编译完毕后,会在 python/dist 目录下生成一个 Python Wheel 安装包。编译成功后进入 python\dist 目录下找到生成的 .whl 包:

cd python\dist

安装编译好的 .whl 包:

pip install(whl 包的名字)--force-reinstall

至此已完成 PaddlePaddle 的编译安装

3.7 验证安装和卸载

安装完成后你可以使用 python 进入 python 解释器,输入:

import paddle
paddle.utils.run_check()

如果出现PaddlePaddle is installed successfully!,说明你已成功安装。
如果要卸载
CPU 版本的 PaddlePaddle:

pip uninstall paddlepaddle

GPU 版本的 PaddlePaddle:

pip uninstall paddlepaddle-gpu

3.8 编译产物

预测库编译后,所有产出均位于build目录下的paddle_inference_install_dir目录内,目录结构如下。version.txt 中记录了该预测库的版本信息,包括Git Commit ID、使用OpenBlas或MKL数学库、CUDA/CUDNN版本号。

build/paddle_inference_install_dir
├── CMakeCache.txt
├── paddle
│   ├── include
│   │   ├── paddle_anakin_config.h
│   │   ├── paddle_analysis_config.h
│   │   ├── paddle_api.h
│   │   ├── paddle_inference_api.h
│   │   ├── paddle_mkldnn_quantizer_config.h
│   │   └── paddle_pass_builder.h
│   └── lib
│       ├── libpaddle_inference.a (Linux)
│       ├── libpaddle_inference.so (Linux)
│       └── libpaddle_inference.lib (Windows)
├── third_party
│   ├── boost
│   │   └── boost
│   ├── eigen3
│   │   ├── Eigen
│   │   └── unsupported
│   └── install
│       ├── gflags
│       ├── glog
│       ├── mkldnn
│       ├── mklml
│       ├── protobuf
│       ├── xxhash
│       └── zlib
└── version.txt

Include目录下包括了使用飞桨预测库需要的头文件,lib目录下包括了生成的静态库和动态库,third_party目录下包括了预测库依赖的其它库文件。

四. 预编译包离线安装

4.1 C++预编译包下载

在这里插入图片描述

C++预编译包下载地址
如图所示,MSVC 2017即Microsoft Visual C++2017,只要安装了Visual Studio即可。然后根据自己开发机的GPU情况选择适合的CUDA版本的预编译包。

4.2 Python预编译包安装

在这里插入图片描述
Python预编译包下载地址
如图所示,上面编译好的whl文件可以直接下载到本地然后安装。根据自己开发机的GPU情况选择适合的CUDA版本的预编译包。
下载后在本地运行:

#安装编译好的 .whl 包:
pip install(whl 包的名字)--force-reinstall

即可安装成功。
如果使用PaddleX等端到端开发套件,则需要查看PaddleX源码下的requirements.txt文档:

tqdm
scipy
colorama
cython
pycocotools
visualdl >= 2.1.1
paddleslim == 2.2.1
shapely
paddlepaddle-gpu >= 2.2.0
opencv-python
scikit-learn==0.23.2
lap
motmetrics
matplotlib
chardet
openpyxl

需要到这些包的官网上直接下载各自的whl文件,如tqdm:
tqdm-4.38.0-py2.py3-non-any.whl
然后分别离线安装即可。
对于找不到whl文件的包如lap等,可以进行源码安装,即将源码包下载到本地后,进入该目录,并在Python环境下运行:

python setup.py build_ext --inplace
python setup.py build_ext install

在这里插入图片描述

即可安装。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/130571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

torch.cat函数

#dim0,上下拼接 #dim1&#xff0c;左右拼接 import torch # x1 x1 torch.tensor([[1,2,3],[4,5,6]],dtypetorch.int)# x2 x2 torch.tensor([[7,8,9],[10,11,12]],dtypetorch.int)#inputs为&#xff12;个形状为[2 , 3]的矩阵 inputs [x1, x2] print(inputs)#dim0,上下拼接…

如何用Python字符串进行切片操作?

嗨害大家好鸭&#xff01;我是小熊猫~ 我们基本上都知道Python的序列对象 都是可以用索引号来引用的元素的&#xff0c; 索引号可以是正数由0开始从左向右&#xff0c; 也可以是负数由-1开始从右向左。 在Python中对于具有序列结构的数据来说都可以使用切片操作&#xff0…

【C++升级之路】第五篇:C/C++内存管理(new和delete的实现原理)

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【C学习与应用】 ✒️✒️本篇内容&#xff1a;C/C内存分布&#xff0c;C/C动态内存管理方法&#xff0c;C动态内存管理方法底层函数operator new 和operat…

浅谈树状数组

学习树状数组必不可少学习树状数组的精髓&#xff0c;lowbit()运算 在计算机中存储一个正数是以二进制的形式&#xff0c;而存储一个负数则是以二进制补码的形式&#xff0c;简单说就是二进制取反1&#xff0c;lowbit运算就是提取出最后一个1以后的位置&#xff0c;比如10100进…

【C语言】结构体、共用体、位域

结构体 1、 结构体的声明方法 struct struct_name {data_type member1;data_type member2;.. };这是其中一种声明方式~ 2、定义一个结构体变量 struct struct_name variable&#xff1b;3、访问成员变量 . 运算 一个结构体变量访问其成员时&#xff0c;使用的是 . 运算 下面…

BM35 判断是不是完全二叉树

题目 给定一个二叉树&#xff0c;确定他是否是一个完全二叉树。 完全二叉树的定义&#xff1a;若二叉树的深度为 h&#xff0c;除第 h 层外&#xff0c;其它各层的结点数都达到最大个数&#xff0c;第 h 层所有的叶子结点都连续集中在最左边&#xff0c;这就是完全二叉树。&a…

深入理解ConcurrentHashMap1.7源码

1. 概述 HashMap在我们的日常生活中使用很多&#xff0c;但是它不是线程安全的。我们可以使用HashTable来代替&#xff0c;主要实现方式是在方法中加入synchronized&#xff0c;所以效率也比较低。因此&#xff0c;对于键值对&#xff0c;我们可以尝试使用ConcurrentHashMap来…

实验室规划设计方案SICOLAB

一、实验室规划设计 喜格提供实验室布局方案 根据实验室性质、实验室定位、实验室功能、实验类型、实验工艺流程以及国家相关标准合理的规划布局。 喜格提供仪器摆放布局方案 根据该实验流程来确定仪器的种类、数量、规格型号、外形尺寸、电压功率等参数以及摆放位置以及提…

【Linux】tee、tail、killall、|、||、、命令学习

|、||、&、&&辨析 竖线‘|’在linux中是管道符的意思&#xff0c;将‘|’前面命令的输出作为’|后面的输入&#xff1b; 双竖线‘||’&#xff0c;用双竖线‘||’分割的多条命令&#xff0c;执行的时候遵循如下规则&#xff1a;如果前一条命令为真&#xff0c;则…

还在喷农民歌唱家大衣哥吗?他的一个不经意间的举动却造福了乡里

农民歌唱家大衣哥&#xff0c;一直以来都饱受争议&#xff0c;有人说他是炒货专家&#xff0c;然而事实真的如此吗&#xff1f;事实上&#xff0c;大衣哥也做了很多好事&#xff0c;像修桥补路等都不说了&#xff0c;单就他的一个不经意间的举动&#xff0c;就造福了四乡八邻。…

Windows内核--CPU和内核(1.7)

Windows内核支援哪些CPU? Intel x86/x86_64 IA64已不再支持. AMD amd64 ARM (Windows On Arm: WOA) ARM具备低功耗优势, 除了高通, 还有Broadcom/NXP等都支援ARM架构. 苹果自研M系列开了头&#xff0c;ARM不仅有低功耗&#xff0c;同样有性能&#xff0c;Windows也想分一杯羹…

【vue系列-03】vue的计算属性,列表,监视属性及原理

vue的核心属性一&#xff0c;vue核心属性1&#xff0c;计算属性2&#xff0c;监视属性3&#xff0c;样式绑定3.1&#xff0c;class样式绑定3.2&#xff0c;style样式绑定4&#xff0c;条件渲染5&#xff0c;列表渲染5.1&#xff0c;遍历列表5.2&#xff0c;key的作用5.3&#x…

2022年全国职业院校技能大赛中职组网络安全竞赛——隐写术应用解析(超详细)

2022年全国职业院校技能大赛中职组网络安全竞赛——隐写术应用解析(超详细) B-8任务八:隐写术应用 *任务说明:仅能获取Server8的IP地址 环境需求私信博主 1.找出文件夹1中的文件,将文件中的隐藏信息作为Flag值提交; 解题步骤如下 2.找出文件夹2中的文件,将文件中的隐藏信息…

基于Vue的数据可视化设计框架,数据大屏可视化编辑器

开发文档&#xff08;★★★★★&#xff09; 请访问 https://lizhensheng.github.io/vue-data-view/ 完整代码下载地址&#xff1a;基于Vue的数据可视化设计框架&#xff0c;数据大屏可视化编辑器 简介 DataView是一个基于Vue的数据可视化设计框架提供用于可拖拽的控件提供…

Spring之IOC入门案例

目录 一&#xff1a;IOC入门案例实现思路分析 1.IOC容器管理什么&#xff1f; 2. 如何将被管理的对象告知 IOC 容器 ? 3.被管理的对象交给 IOC 容器&#xff0c;要想从容器中获取对象&#xff0c;就先得思考如何获取到 IOC 容器 ? 4.IOC 容器得到后&#xff0c;如何从容…

C++首超Java

TIOBE 公布了 2022 年 12 月的编程语言排行榜。 TIOBE 将于下个月揭晓其 2022 年度编程语言&#xff0c;目前共有 3 个候选者&#xff1a;Python、C 和 C。TIOBE CEO Paul Jansen 指出&#xff0c;虽然 Python 和 C 已多次斩获该头衔&#xff0c;而 C 仅在 2003 年获得过一次&a…

Android---开发笔记

ListView控件 <ListViewandroid:id"id/main_iv"android:layout_width"match_parent"android:layout_height"match_parent"android:layout_below"id/main_top_layout"android:padding"10dp"android:divider"null&qu…

彩色圣诞树圣诞树

目录 一、圣诞介绍 二、技术需要 三、效果展示 四、实现步骤 五、颜色的更改 六、源码 一、圣诞介绍 基督教纪念耶稣诞生的重要节日。亦称耶稣圣诞节、主降生节&#xff0c;天主教亦称耶稣圣诞瞻礼。耶稣诞生的日期&#xff0c;《圣经》并无记载。公元336年罗马教会开始在…

JavaScript对象与类的创建

1、面向过程与面向对象 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。面向对象是把事务分解成为一个个对象&#xff0c;然后由对象之间分工与合作。 面向过程与面向对象对比 面…

LeetCode11.盛水最多的容器

11. 盛最多水的容器 该题用的是贪心的思想&#xff0c;也即每一步都以更加靠近最值为目标&#xff0c;用双指针维护height数组&#xff0c;接下来我用我自己通俗的语言尽可能解释双指针这种做法的正确性&#xff1a; 首先双指针指向数组两端&#xff0c;从两端开始&#xff0…