在win10上cuda12+tensorrt8.6+vs2019环境下编译paddle2.6生成python包与c++推理库

本文主要是介绍在win10上cuda12+tensorrt8.6+vs2019环境下编译paddle2.6生成python包与c++推理库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

paddle infer官方目前没有发布基于cuda12的c++库,为此参考https://www.paddlepaddle.org.cn/inference/user_guides/source_compile.html实现cuda12的编译安装,不料博主才边缘好自己的paddle2.6,paddle官方已经发布了cuda12.0的paddle2.6框架。但按照官网教程进行编译是有很多bug需要解决的,故此分享一下经验,避免踩坑。例如在使用paddle infer库时发现某些类的接口设置不合理,可以通过修改源码后自行编译,修改接口权限。
在这里插入图片描述

1、编译前准备

1.1 下载源码

下载源码

git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
git checkout release/2.6

在这里插入图片描述

1.2 安装依赖项

pip install numpy protobuf wheel ninja

1.3 执行cmake命令

执行以下编译命令 ,Visual Studio 16 2019这个根据自己电脑环境进行修改,TENSORRT_ROOT按照自己配置设置,也可以删除该配置项
cmake .. -G "Visual Studio 16 2019" -A x64 -DWITH_GPU=ON -DWITH_TESTING=OFF -DON_INFER=ON -DCMAKE_BUILD_TYPE=Release -DPY_VERSION=3.8

如果本机安装了多个 CUDA,将使用最新安装的 CUDA 版本。若需要指定 CUDA 版本,则需要设置环境变量。先执行以下代码
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%

如果本机安装了多个 Python,将自动使用最新安装的 Python 版本。若需要指定 Python 版本,则需要指定 Python 路径。则需要在cmake命令中添加以下命令
-DPYTHON_EXECUTABLE=C:\Python38\python.exe -DPYTHON_INCLUDE_DIR=C:\Python38\include -DPYTHON_LIBRARY=C:\Python38\libs\python38.lib -DWITH_UNITY_BUILD=ON
除了以上的cuda支持外,编译paddle还有一下支持项,tensorrt、onnxruntime等,具体见下图
在这里插入图片描述

2、编译中问题

2.1 python版本报错

若无以下报错,则忽略该章节

Paddle only support Python version>=3.8 now
在这里插入图片描述
如果确认自己python版本没有任何问题,参考博主的操作,将原来判断版本的代码改成以下形式
在这里插入图片描述
此时,应该会cmake成功,输出信息如下所示
在这里插入图片描述

2.2 vs2019编译

找到以下文件,双击打开
在这里插入图片描述
在vs中将配置项改成以下内容,并在ALL_BUILD处点击右键选生成,此时界面信息如下图所示
在这里插入图片描述

2.3 过程报错一

在这里插入图片描述
解决方案,将生成的common.dll拷贝出来,重新执行一遍编译
在这里插入图片描述

2.4 过程报错二

以下报错是同样是拷贝文件失误,但不清楚具体是怎么导致的
在这里插入图片描述
博主将Paddle/cmake/copyfile.py里的代码改为以下方式:

import glob
import os
import shutil
import sysdef main():src = sys.argv[1]dst = sys.argv[2]try:if os.path.isdir(src):  # copy directorypathList = os.path.split(src)dst = os.path.join(dst, pathList[-1])if not os.path.exists(dst):shutil.copytree(src, dst)print(f"first copy directory: {src} --->>> {dst}")else:shutil.rmtree(dst)shutil.copytree(src, dst)print(f"overwritten copy directory: {src} --->>> {dst}")else:  # copy file, wildcardif not os.path.exists(dst):os.makedirs(dst)srcFiles = glob.glob(src)for srcFile in srcFiles:print(f"copy file: {srcFile} --->>> {dst}")shutil.copy(srcFile, dst)except:print("拷贝失误:=====》",src,dst)raise EOFErrorif __name__ == "__main__":main()

察觉出是 拷贝失误:=====》 C:\Users\Administrator\Paddle\build\paddle\common\common.* C:\Users\Administrator\Paddle\build\paddle_inference_install_dir\paddle\lib
于是手动完成数据拷贝
在这里插入图片描述
并将Paddle/cmake/copyfile.py里的代码改为以下方式,跳过对common.*数据的拷贝。然后重新执行编译

import glob
import os
import shutil
import sysdef main():src = sys.argv[1]dst = sys.argv[2]try:if os.path.isdir(src):  # copy directorypathList = os.path.split(src)dst = os.path.join(dst, pathList[-1])if not os.path.exists(dst):shutil.copytree(src, dst)print(f"first copy directory: {src} --->>> {dst}")else:#shutil.rmtree(dst)#shutil.copytree(src, dst)print(f"overwritten copy directory: {src} --->>> {dst}")else:  # copy file, wildcardif not os.path.exists(dst):os.makedirs(dst)if "common.*" in src:returnsrcFiles = glob.glob(src)for srcFile in srcFiles:shutil.copy(srcFile, dst)print(f"copy file: {srcFile} --->>> {dst}")except:print("拷贝失误:=====》",src,dst)raise EOFErrorif __name__ == "__main__":main()

最终输出如下所示,可见编译成功
在这里插入图片描述

3、编译结果

3.1 python安装包

可以在python终端进入dist目录,然后执行pip install ./paddlepaddle_gpu-0.0.0-cp38-cp38-win_amd64.whl 安装自己编译的paddle
在这里插入图片描述

3.2 c++推理库

paddle/Include目录下包括了使用飞桨预测库需要的头文件,paddle/lib目录下包括了生成的静态库和动态库,third_party目录下包括了预测库依赖的其它库文件。
在这里插入图片描述
具体形式如官网一致

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

在使用过程中需要将dll文件的路径添加到系统环境变量中
在这里插入图片描述

这篇关于在win10上cuda12+tensorrt8.6+vs2019环境下编译paddle2.6生成python包与c++推理库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/572720

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma