0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用OpenVINO?条件编译功能,压缩Windows应用体积

英特尔物联网 ? 来源:英特尔物联网 ? 2025-01-13 10:26 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者:

杨亦诚 英特尔 AI 软件工程师

在 OpenVINO 编译过程中,我们可以根据应用对于硬件平台的需求,关闭或开指定推理后端的编译,以达到简化 OpenVINO 运行库的目的,例如 cmake -DENABLE_INTEL_GPU=OFF 便可以取消 GPU plugin 库的编译。除此以外 OpenVINO 还提供了条件编译功能,用于针对特定模型进行运行库压缩,接下来就让我们一起来看下如何在 Windows 操作系统上实现这一功能。

1. 环境安装与配置

第一步,我们需要确保已经在 Windows 上安装了 Visual Studio 编译环境。如果是第一次安装 Visual Studio 可以通过以下链接下载。

https://visualstudio.microsoft.com/

在安装组件过程中,选择“使用C++的桌面开发”。

bf71685a-cf32-11ef-9310-92fbcf53809c.png

Visual Studio 安装示例

安装完毕后建议使用 Visual Studio 自带的命令行工具“x64 Native Tools Command Prompt”对编译环境进行初始化。

bf97b884-cf32-11ef-9310-92fbcf53809c.png

搜索“x64 Native Tools Command Prompt”

2. 预编译

在完成编译环境初始化后,会看到以下提醒。接下来我们就可以在该命令行终端上输入编译指令了。

bfb7e46a-cf32-11ef-9310-92fbcf53809c.png

编译环境初始化成功

在这一步中,我们需要先利用 Ninja 编译工具对 OpenVINO 运行库进行预编译,并使用 itt 组件来收集模型运行过程中的依赖数据。可以通过cmake -DENABLE_PROFILING_ITT=ONDSELECTIVE_BUILD=COLLECT ..指令开启这一功能的编译。以下是完整命令参考:

git clone https://github.com/openvinotoolkit/openvino.git
set OPENVINO_HOME=D:work_pathopenvino
cd %OPENVINO_HOME%
git submodule update --init --recursive
md build_cc
cd build_cc
cmake -G Ninja -Wno-dev -DCMAKE_BUILD_TYPE=Debug -DENABLE_CPPLINT=OFF -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_COMPILE_WARNING_AS_ERROR=OFF -DENABLE_FASTER_BUILD=ON -DENABLE_SANITIZER=OFF -DTHREADING=TBB -DBUILD_SHARED_LIBS=OFF -DENABLE_PROFILING_ITT=ON -DSELECTIVE_BUILD=COLLECT -DENABLE_INTEL_GPU=OFF -DENABLE_MULTI=OFF -DENABLE_AUTO=OFF -DENABLE_AUTO_BATCH=OFF -DENABLE_HETERO=OFF -DENABLE_TEMPLATE=OFF -DENABLE_OV_ONNX_FRONTEND=OFF -DENABLE_OV_PADDLE_FRONTEND=OFF -DENABLE_OV_PYTORCH_FRONTEND=OFF -DENABLE_OV_JAX_FRONTEND=OFF -DENABLE_OV_TF_FRONTEND=OFF -DCMAKE_INSTALL_PREFIX=install -DENABLE_PYTHON=OFF ..
cmake --build . --config Debug

3. 数据收集

完成预编译后,我们需要针对特定模型,利用 itt 工具收集 OpenVINO 运行库在运行指定模型所需的依赖模块。

cd %OPENVINO_HOME%uild_cc
cmake --build . --config Debug --target sea_itt_lib
cd %OPENVINO_HOME%
set PATH=%PATH%;%OPENVINO_HOME%\temp	bbin
mkdir cc_data
cd %OPENVINO_HOME%cc_data
python3 ..	hirdpartyitt_collector
untoolsea_runtool.py --bindir ..inintel64Debug -o %OPENVINO_HOME%cc_datadata ! ..inintel64Debugenchmark_app.exe -niter 1 -nireq 1 -m  -d NPU

可以看到在以上命令中,我们将 benchmark app 所采集到的模型运行数据保存在 cc_data 目录下,接下来就需要基于该数据来压缩 OpenVINO 运行库的体积。

bfd4ce2c-cf32-11ef-9310-92fbcf53809c.png

OpenVINO 运行依赖数据

4.运行库编译

使用cmake -DSELECTIVE_BUILD=ON -DSELECTIVE_BUILD_STAT=%OPENVINO_HOME%cc_data*.cs 指令,我们可以利用上一步所采集的依赖数据,在正式编译过程中删除一些不必要的依赖组件或是函数,以达到针对指定模型优化运行库容量的目的。以下是完整的参考指令:

cd %OPENVINO_HOME%
md build
cd build
cmake -G "Visual Studio 16 2019" -A x64 -DENABLE_CPPLINT=OFF -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_COMPILE_WARNING_AS_ERROR=OFF -DCMAKE_BUILD_TYPE=Release -DENABLE_FASTER_BUILD=ON -DENABLE_PROFILING_ITT=OFF -DSELECTIVE_BUILD=ON -DENABLE_INTEL_GPU=OFF -DENABLE_MULTI=OFF -DENABLE_AUTO=OFF -DENABLE_AUTO_BATCH=OFF -DENABLE_HETERO=OFF -DENABLE_TEMPLATE=OFF -DENABLE_OV_ONNX_FRONTEND=OFF -DENABLE_OV_PADDLE_FRONTEND=OFF -DENABLE_OV_PYTORCH_FRONTEND=OFF -DENABLE_OV_JAX_FRONTEND=OFF -DENABLE_OV_TF_FRONTEND=OFF -DSELECTIVE_BUILD_STAT=%OPENVINO_HOME%cc_data*.csv -DBUILD_SHARED_LIBS=OFF -DENABLE_LTO=ON -DENABLE_ONEDNN_FOR_GPU=OFF -DENABLE_OV_TF_LITE_FRONTEND=OFF -DENABLE_PROFILING_FIRST_INFERENCE=OFF ..
cmake --build . --config Release

这里我们比较开启条件编译功能关闭条件编译功能后,OpenVINO 运行库的大小。

bff2d37c-cf32-11ef-9310-92fbcf53809c.png

c001d84a-cf32-11ef-9310-92fbcf53809c.png

条件编译前后对比

可以看到在只编译 NPU plugin 以及 samples 示例的情况下,OpenVINO 被压缩了6MB左右的空间,其中 openvino.dll 动态库为主要压缩对象。当然针对不同模型的压缩效果也是不同的,以上数据仅为参考。

c0162dae-cf32-11ef-9310-92fbcf53809c.png

openvino.dll 压缩效果

5. 小结

使用条件编译功能可以最大限度压缩 OpenVINO 运行库的体积,帮助应用瘦身,从而减少应用软件在发行时由容量问题带来的网络和磁盘压力。关于 OpenVINO 条件编译功能更详细的使用方法可以参考:

https://docs.openvino.ai/2024/openvino-workflow/deployment-locally/optimial-binary-size-conditional-compilation.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    4

    文章

    3615

    浏览量

    91601
  • 编译
    +关注

    关注

    0

    文章

    680

    浏览量

    34218
  • OpenVINO
    +关注

    关注

    0

    文章

    115

    浏览量

    512

原文标题:开发者实战 | 使用 OpenVINO? 条件编译功能,压缩 Windows 应用体积

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Windows中安装OpenVINO?后,无法找到OpenCL编译器二进制文件是怎么回事?

    已在 Windows* 和开源OpenVINO工具套件 Windows* 中安装 OpenVINO?英特尔 Distribution。 如 如何为 VPU 实施自定义层 (英特尔?
    发表于 03-05 08:57

    请问OpenVINO?工具套件英特尔?Distribution是否与Windows? 10物联网企业版兼容?

    无法在基于 Windows? 10 物联网企业版的目标系统上使用 英特尔? Distribution OpenVINO? 2021* 版本推断模型。
    发表于 03-05 08:32

    Windows上安装OpenVINO?运行时遇到错误怎么解决?

    已在 Windows* 上安装OpenVINO?运行时。 配置环境变量。 遇到错误: Location is not available.
    发表于 03-05 09:13

    Windows? 11上安装OpenVINO? 2021.4时,安装程序崩溃了,安装失败怎么解决?

    Windows? 11 上安装OpenVINO? 2021.4 时,安装程序崩溃了,安装失败。
    发表于 03-05 06:50

    为什么无法在OpenVINO? 2021.3源中使用CMAKE编译ONNX模型?

    尝试从源版本 2021.3 编译OpenVINO? 错误: ~/项目/OpenVINO/cmake-build-debug/_deps/ext_onnx-src/onnx/onnx_pb.h
    发表于 03-05 08:29

    请问是否可以在通用Windows平台中构建OpenVINO? GenAI C++ 应用程序?

    无法在通用 Windows 平台中构建OpenVINO? GenAI C++ 应用程序
    发表于 06-24 07:35

    C语言中条件编译的妙用

    。例如,我们有一个数据类型,在Windows平台中,应该使用long类型表示,而在其他平台应该使用float表示,这样往往需要对源程序作必要的修改,这就降低了程序的通用性。可以用以下的条件编译
    发表于 07-19 01:53

    如何正确安装OpenVINO并将其与所需依赖关系链接?

    Windows 10 中安装OpenVINO 2019.3 在 Windows 路径中设置:C:\\Program Files (x86)\\Intel
    发表于 08-15 08:29

    永久设置OpenVINO trade Windows reg10的工具套件环境变量

    您可以在 Windows? 10 中手动设置OpenVINO?环境变量。在 Windows? 10 系统中,转到 >系统和安全>系统>高级系统设置&
    发表于 08-15 07:18

    无法使用Microsoft Visual Studio 2017为Windows 10构建开源OpenVINO怎么解决?

    无法使用 Microsoft Visual Studio 2017 为 Windows 10 构建开源OpenVINO?。
    发表于 08-15 06:43

    PIC系列单片机WINDOWS版反编译软件

    PIC系列单片机WINDOWS版反编译软件
    发表于 04-14 15:06 ?0次下载

    c语言之条件编译技巧与示例分析

    C语言的条件编译#if, #elif, #else, #endif、#ifdef, #ifndef 有些程序在调试、兼容性、平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件,这当然
    的头像 发表于 08-26 15:06 ?3195次阅读

    C语言中条件编译详解

    —般情况下,C语言源程序中的每一行代码.都要参加编译。但有时候出于对程序代码优化的考虑,希望只对其中一部分内容进行编译。此时就需要在程序中加上条件,让编译器只对满足
    的头像 发表于 04-14 13:12 ?3483次阅读

    Windows搭建OpenHarmony编译环境

    由于OpenHarmony的编译工具链主要是建立在Linux操作系统下,如需要编译OpenHarony内核则需要搭建虚拟机等工序,相对比较繁琐。那么,是否可以在Windows操作系统上实现
    的头像 发表于 08-09 08:26 ?2243次阅读
    <b class='flag-5'>Windows</b>搭建OpenHarmony<b class='flag-5'>编译</b>环境

    NNCF压缩与量化YOLOv8模型与OpenVINO部署测试

    OpenVINO2023版本衍生出了一个新支持工具包NNCF(Neural Network Compression Framework – 神经网络压缩框架),通过对OpenVINO IR格式模型的
    的头像 发表于 11-20 10:46 ?2040次阅读
    NNCF<b class='flag-5'>压缩</b>与量化YOLOv8模型与<b class='flag-5'>OpenVINO</b>部署测试