Files
FastDeploy/docs/compile/how_to_use_sdk_on_windows.md
DefTruth 9e09a55abb [docs] update win build docs with cmake-gui+vs2019 (#280)
* Delete redundant Chinese comments

* [docs] update win build docs with cmake-gui+vs2019

* [docs] update win build docs with cmake-gui+vs2019

* [examples] replace some cn comments with en

* [cmake] update FastDeploy.cmake.in

* [docs] update windows c++ sdk usage docs

* [cmake] update FastDeploy.cmake.in

* [docs] update windows sdk usage docs

Co-authored-by: Jason <jiangjiajun@baidu.com>
2022-09-26 19:25:12 +08:00

14 KiB
Raw Blame History

在 Windows 使用 FastDeploy C++ SDK

在 Windows 下使用 FastDeploy C++ SDK 与在 Linux 下使用稍有不同。以下以 PPYOLOE 为例进行演示在CPU/GPU以及GPU上通过TensorRT加速部署的示例。在部署前需确认以下两个步骤

目录

1. 环境依赖

  • cmake >= 3.12
  • Visual Studio 16 2019
  • cuda >= 11.2 (当WITH_GPU=ON)
  • cudnn >= 8.0 (当WITH_GPU=ON)
  • TensorRT >= 8.4 (当ENABLE_TRT_BACKEND=ON)

2. 下载 FastDeploy Windows 10 C++ SDK

可以从以下链接下载编译好的 FastDeploy Windows 10 C++ SDKSDK中包含了examples代码。

https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-win-x64-gpu-0.2.1.zip

3. 准备模型文件和测试图片

可以从以下链接下载模型文件和测试图片,并解压缩

https://bj.bcebos.com/paddlehub/fastdeploy/ppyoloe_crn_l_300e_coco.tgz # (下载后解压缩)
https://gitee.com/paddlepaddle/PaddleDetection/raw/release/2.4/demo/000000014439.jpg

4. SDK使用方式一命令行方式使用 C++ SDK

4.1 在 Windows 上编译 PPYOLOE

Windows菜单打开x64 Native Tools Command Prompt for VS 2019命令工具cd到ppyoloe的demo路径

cd fastdeploy-win-x64-gpu-0.2.0\examples\vision\detection\paddledetection\cpp
mkdir build && cd build
cmake .. -G "Visual Studio 16 2019" -A x64 -DFASTDEPLOY_INSTALL_DIR=%cd%\..\..\..\..\..\..\..\fastdeploy-win-x64-gpu-0.2.1 -DCUDA_DIRECTORY="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.2"

然后执行

msbuild infer_demo.sln /m:4 /p:Configuration=Release /p:Platform=x64

4.2 运行 demo

cd Release
infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 0  # CPU
infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 1  # GPU
infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 2  # GPU + TensorRT

特别说明exe运行时所需要的依赖库配置方法请参考章节: 多种方法配置exe运行时所需的依赖库

5. SDK使用方式二Visual Studio 2019 IDE 方式使用 C++ SDK

5.1 步骤一Visual Studio 2019 创建“CMake”工程项目

1打开Visual Studio 2019点击"创建新项目"->点击"CMake"从而创建CMake工程项目。以PPYOLOE为例来说明如何在Visual Studio 2019 IDE中使用FastDeploy C++ SDK.

image

image

image

2打开工程发现Visual Stuio 2019已经为我们生成了一些基本的文件其中包括CMakeLists.txt。infer_ppyoloe.h头文件这里实际上用不到我们可以直接删除。

image

5.2 步骤二在CMakeLists中配置 FastDeploy C++ SDK

1在工程创建完成后我们需要添加infer_ppyoloe推理源码并修改CMakeLists.txt修改如下

image

2其中infer_ppyoloe.cpp的代码可以直接从examples中的代码拷贝过来

3CMakeLists.txt主要包括配置FastDeploy C++ SDK的路径如果是GPU版本的SDK还需要配置CUDA_DIRECTORY为CUDA的安装路径CMakeLists.txt的配置如下

project(infer_ppyoloe_demo C CXX)
cmake_minimum_required(VERSION 3.12)

# Only support "Release" mode now  
set(CMAKE_BUILD_TYPE "Release")

# Set FastDeploy install dir
set(FASTDEPLOY_INSTALL_DIR "D:/qiuyanjun/fastdeploy-win-x64-gpu-0.2.1"
    CACHE PATH "Path to downloaded or built fastdeploy sdk.")

# Set CUDA_DIRECTORY (CUDA 11.x) for GPU SDK
set(CUDA_DIRECTORY "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.7"
    CACHE PATH "Path to installed CUDA Toolkit.")

include(${FASTDEPLOY_INSTALL_DIR}/FastDeploy.cmake)

include_directories(${FASTDEPLOY_INCS})

add_executable(infer_ppyoloe_demo ${PROJECT_SOURCE_DIR}/infer_ppyoloe.cpp)
target_link_libraries(infer_ppyoloe_demo ${FASTDEPLOY_LIBS})  

# Optional: install all DLLs to binary dir.
install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}/Release)

5.3 步骤三生成工程缓存并修改CMakeSetting.json配置

1点击"CMakeLists.txt"->右键点击"生成缓存":

image

发现已经成功生成缓存了但是由于打开工程时默认是Debug模式我们发现exe和缓存保存路径还是Debug模式下的。 我们可以先修改CMake的设置为Release.

2点击"CMakeLists.txt"->右键点击"infer_ppyoloe_demo的cmake设置"进入CMakeSettings.json的设置面板把其中的Debug设置修改为Release.

image

同时设置CMake生成器为 "Visual Studio 16 2019 Win64"

image

3点击保存CMake缓存以切换为Release配置

image

44.1)点击"CMakeLists.txt"->右键"CMake缓存仅限x64-Release"->"点击删除缓存"4.2)点击"CMakeLists.txt"->"生成缓存"4.3)如果在步骤一发现删除缓存的选项是灰色的可以直接点击"CMakeLists.txt"->"生成"若生成失败则可以重复尝试4.14。2

image

最终可以看到配置已经成功生成Relase模式下的CMake缓存了。

image

5.4 步骤四:生成可执行文件,运行获取结果。

1点击"CMakeLists.txt"->"生成"。可以发现已经成功生成了infer_ppyoloe_demo.exe并保存在out/build/x64-Release/Release目录下。

image

2执行可执行文件获得推理结果。 首先需要拷贝所有的dll到exe所在的目录下这里我们可以在CMakeLists.txt添加一下命令可将FastDeploy中所有的dll安装到指定的目录。

install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}/Release)

3同时也需要把ppyoloe的模型文件和测试图片下载解压缩后拷贝到exe所在的目录。 准备完成后,目录结构如下:

image

4最后执行以下命令获得推理结果

D:\xxxinfer_ppyoloe\out\build\x64-Release\Release>infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 0
[INFO] fastdeploy/runtime.cc(304)::fastdeploy::Runtime::Init    Runtime initialized with Backend::OPENVINO in Device::CPU.
DetectionResult: [xmin, ymin, xmax, ymax, score, label_id]
415.047180,89.311569, 506.009613, 283.863098, 0.950423, 0
163.665710,81.914932, 198.585342, 166.760895, 0.896433, 0
581.788635,113.027618, 612.623474, 198.521713, 0.842596, 0
267.217224,89.777306, 298.796051, 169.361526, 0.837951, 0
......
153.301407,123.233757, 177.130539, 164.558350, 0.066697, 60
505.887604,140.919601, 523.167236, 151.875336, 0.084912, 67

Visualized result saved in ./vis_result.jpg

打开保存的图片查看可视化结果:

特别说明exe运行时所需要的依赖库配置方法请参考章节: 多种方法配置exe运行时所需的依赖库

6. 多种方法配置exe运行时所需的依赖库

6.1 方式一修改CMakeLists.txt一行命令配置(推荐)

考虑到Windows下C++开发的特殊性如经常需要拷贝所有的lib或dll文件到某个指定的目录FastDeploy提供了install_fastdeploy_libraries的cmake函数方便用户快速配置所有的dll。修改ppyoloe的CMakeLists.txt添加

install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}/Release)

6.2 方式二:命令行设置环境变量

编译好的exe保存在Release目录下在运行demo前需要将模型和测试图片拷贝至该目录。另外需要在终端指定DLL的搜索路径。请在build目录下执行以下命令。

set FASTDEPLOY_HOME=%cd%\..\..\..\..\..\..\..\fastdeploy-win-x64-gpu-0.2.1
set PATH=%FASTDEPLOY_HOME%\lib;%PATH%
set PATH=%FASTDEPLOY_HOME%\third_libs\install\onnxruntime\lib;%PATH%
set PATH=%FASTDEPLOY_HOME%\third_libs\install\opencv-win-x64-3.4.16\build\x64\vc15\bin;%PATH%
set PATH=%FASTDEPLOY_HOME%\third_libs\install\paddle_inference\paddle\lib;%PATH%
set PATH=%FASTDEPLOY_HOME%\third_libs\install\paddle_inference\third_party\install\mkldnn\lib;%PATH%
set PATH=%FASTDEPLOY_HOME%\third_libs\install\paddle_inference\third_party\install\mklml\lib;%PATH%
set PATH=%FASTDEPLOY_HOME%\third_libs\install\paddle2onnx\lib;%PATH%
set PATH=%FASTDEPLOY_HOME%\third_libs\install\tensorrt\lib;%PATH%
set PATH=%FASTDEPLOY_HOME%\third_libs\install\faster_tokenizer\lib;%PATH%
set PATH=%FASTDEPLOY_HOME%\third_libs\install\faster_tokenizer\third_party\lib;%PATH%
set PATH=%FASTDEPLOY_HOME%\third_libs\install\yaml-cpp\lib;%PATH%
set PATH=%FASTDEPLOY_HOME%\third_libs\install\openvino\bin;%PATH%
set PATH=%FASTDEPLOY_HOME%\third_libs\install\openvino\3rdparty\tbb\bin;%PATH%

注意需要拷贝onnxruntime.dll到exe所在的目录。

copy /Y %FASTDEPLOY_HOME%\third_libs\install\onnxruntime\lib\onnxruntime* Release\

由于较新的Windows在System32系统目录下自带了onnxruntime.dll因此就算设置了PATH系统依然会出现onnxruntime的加载冲突。因此需要先拷贝demo用到的onnxruntime.dll到exe所在的目录。如下

where onnxruntime.dll
C:\Windows\System32\onnxruntime.dll  # windows自带的onnxruntime.dll

可以把上述命令拷贝并保存到build目录下的某个bat脚本文件中(包含copy onnxruntime),如setup_fastdeploy_dll.bat,方便多次使用。

setup_fastdeploy_dll.bat

6.3 方式三手动拷贝依赖库到exe的目录下

手动拷贝或者在build目录下执行以下命令

set FASTDEPLOY_HOME=%cd%\..\..\..\..\..\..\..\fastdeploy-win-x64-gpu-0.2.1
copy /Y %FASTDEPLOY_HOME%\lib\*.dll Release\
copy /Y %FASTDEPLOY_HOME%\third_libs\install\onnxruntime\lib\*.dll Release\
copy /Y %FASTDEPLOY_HOME%\third_libs\install\opencv-win-x64-3.4.16\build\x64\vc15\bin\*.dll Release\
copy /Y %FASTDEPLOY_HOME%\third_libs\install\paddle_inference\paddle\lib\*.dll Release\
copy /Y %FASTDEPLOY_HOME%\third_libs\install\paddle_inference\third_party\install\mkldnn\lib\*.dll Release\
copy /Y %FASTDEPLOY_HOME%\third_libs\install\paddle_inference\third_party\install\mklml\lib\*.dll Release\
copy /Y %FASTDEPLOY_HOME%\third_libs\install\paddle2onnx\lib\*.dll Release\
copy /Y %FASTDEPLOY_HOME%\third_libs\install\tensorrt\lib\*.dll Release\
copy /Y %FASTDEPLOY_HOME%\third_libs\install\faster_tokenizer\lib\*.dll Release\
copy /Y %FASTDEPLOY_HOME%\third_libs\install\faster_tokenizer\third_party\lib\*.dll Release\
copy /Y %FASTDEPLOY_HOME%\third_libs\install\yaml-cpp\lib\*.dll Release\
copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\bin\*.dll Release\
copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\bin\*.xml Release\
copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\3rdparty\tbb\bin\*.dll Release\

可以把上述命令拷贝并保存到build目录下的某个bat脚本文件中copy_fastdeploy_dll.bat,方便多次使用。

copy_fastdeploy_dll.bat

特别说明上述的set和copy命令对应的依赖库路径需要用户根据自己使用SDK中的依赖库进行适当地修改。比如若是CPU版本的SDK则不需要TensorRT相关的设置。

7. CLion 2022 IDE 方式使用 C++ SDK

  • TODO

8. Visual Studio Code IDE 方式使用 C++ SDK

  • TODO