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

原创
01/04 13:52
阅读数 42

点击蓝字

关注我们,让开发变得更有趣

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

排版 | 吴紫琴


OpenVINO™


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


OpenVINO™


环境安装与配置


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


https://visualstudio.microsoft.com/


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


图:Visual Studio 安装示例


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


图:搜索“x64 Native Tools Command Prompt”


OpenVINO™


预编译


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


图:编译环境初始化成功


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

git clone https://github.com/openvinotoolkit/openvino.gitset OPENVINO_HOME=D:\work_path\openvinocd %OPENVINO_HOME%git submodule update --init --recursivemd build_cccd build_cccmake -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



OpenVINO™


数据收集


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

cd %OPENVINO_HOME%\build_cccmake --build . --config Debug --target sea_itt_libcd %OPENVINO_HOME%set PATH=%PATH%;%OPENVINO_HOME%\\temp\tbb\binmkdir cc_datacd %OPENVINO_HOME%\cc_datapython3 ..\thirdparty\itt_collector\runtool\sea_runtool.py --bindir ..\bin\intel64\Debug -o %OPENVINO_HOME%\cc_data\data ! ..\bin\intel64\Debug\benchmark_app.exe -niter 1 -nireq 1 -m <your_model.xml> -d NPU


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


图:OpenVINO™ 运行依赖数据


OpenVINO™


运行库编译


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

cd %OPENVINO_HOME%md buildcd buildcmake -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™ 运行库的大小。


图:条件编译前后对比


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


图:openvino.dll 压缩效果

OpenVINO™


小结


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


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


OpenVINO™


---------------------------------------

*OpenVINO and the OpenVINO logo are trademarks of Intel Corporation or its subsidiaries.

-----------------------------

 OpenVINO 中文社区 

微信号 : openvinodev

B站:OpenVINO中文社区

“开放、开源、共创”

致力于通过定期举办线上与线下的沙龙、动手实践及开发者交流大会等活动,促进人工智能开发者之间的交流学习。



 点击 “ 在看 让更多人看见

本文分享自微信公众号 - OpenVINO 中文社区(openvinodev)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部