Mace-micro引擎编译与测试

article/2025/9/15 12:07:11

官方简介

Mobile AI Compute Engine (MACE) 是一个专为移动端异构计算平台(支持Android, iOS, Linux, Windows)优化的神经网络计算框架。
主要从以下的角度做了专门的优化:

  • 性能
    • 代码经过NEON指令,OpenCL以及Hexagon HVX专门优化,并且采用Winograd算法来进行卷积操作的加速。
      此外,还对启动速度进行了专门的优化。
  • 功耗
    • 支持芯片的功耗管理,例如ARM的big.LITTLE调度,以及高通Adreno GPU功耗选项。
  • 系统响应
    • 支持自动拆解长时间的OpenCL计算任务,来保证UI渲染任务能够做到较好的抢占调度,从而保证系统UI的相应和用户体验。
  • 内存占用
    • 通过运用内存依赖分析技术,以及内存复用,减少内存的占用。另外,保持尽量少的外部依赖,保证代码尺寸精简。
  • 模型加密与保护
    • 模型保护是重要设计目标之一。支持将模型转换成C++代码,以及关键常量字符混淆,增加逆向的难度。
  • 硬件支持范围
    • 支持高通,联发科,以及松果等系列芯片的CPU,GPU与DSP(目前仅支持Hexagon)计算加速。CPU模式支持Android, iOS, Linux等系统。
  • 模型格式支持
    • 支持TensorFlow,Caffe和ONNX等模型格式。

Micro Controllers

上面的简介摘自官方GitHub介绍,可以让大家基本了解什么是mace引擎,它是一个移动端的AI计算框架。随着谷歌Tensorflow Lite的推广,越来越多的移动应用都将部分AI计算能力迁移至端侧,这些机器学习的算法都是运行在应用层的。但大多数系统层面的计算,例如省电优化(根据应用使用习惯)、睡眠监测、运动行为识别、语音唤醒手机等,为了保证低功耗,必须放在底层,这样计算过程中就无需唤醒上层的一系列进程,只等有结果时才唤醒并上报数据。

有多底层呢?通常来说就是BP侧,在HAL层以下,逻辑基本运行在类似DSP这样的处理器上,部分工作需要开发人员和硬件驱动打交道。mace框架支持将TF模型文件转换成C++代码并打包成micro组件,方便我们集成。

编译

官方文档(https://mace.readthedocs.io/en/latest/micro-controllers/basic_usage.html)写得比较详尽,但一些细节和注意点还是只有实践过程中才会发现。我的系统是Ubuntu 20.04,部分依赖安装起来稍微麻烦一点(mace官方要求的依赖很多版本很旧)。

先配置基础环境,要装的东西挺多的,按官方给的版本号安装即可(https://mace.readthedocs.io/en/latest/installation/env_requirement.html)。下面只提一些注意点。

1、安装Python 2.7:Ubuntu 18.04就不自带Python 2.x了,默认是3.x,所以一定要自己手动安装Python 2.7,注意配置python和pip命令默认对应的版本为2.x。虽然mace官方文档写的3.6也可以编,但是我试过,各种失败。

2、安装Bazel 0.13.x(实测0.13.0和0.13.1都行):由于Ubuntu直接用apt安装bazel的话版本会非常高,最后会导致编译失败。Ubuntu的话直接到bazel官方GitHub下载对应版本的deb文件来安装即可:https://github.com/bazelbuild/bazel/releases?after=0.16.1

sudo dpkg -i bazel_0.13.1-linux-x86_64.deb

3、由于我只在手机BP侧运行micro代码,且基于Tensorflow的模型文件转换,所以官方文档中提到的Android NDK、ADB和Docker这里都不需要安装,除此之外都最好安装完。

配置好各种环境后,就可以根据basic_usage中的步骤拉取mace代码,并执行转换命令:

# 直接执行,不需要改
git clone https://github.com/XiaoMi/mace.git
cd mace/
git fetch --all --tags --prune
tag_name=`git describe --abbrev=0 --tags`
git checkout tags/${tag_name}
# 转换脚本(保证是Python 2.x版本)
python tools/python/convert.py --config=xxx.yml --enable_micro

这里的xxx.yml是模型转换的配置文件,可以参考官方示例:https://github.com/XiaoMi/mace-models

转换成功后,在mace/build/xxx/model目录下面会有转换成功的产物,解压xxx.tar.gz压缩包即可得到micro代码。

测试

如果每次都将micro代码集成到底层打包再进行模型测试,那太麻烦了,效率低下。因此,我们可以将其直接运行在PC上来进行输入数据mock,这个是官方文档没有提到的,需要我们自己修改CMake配置文件并添加测试代码。

我用CLion直接打开micro文件夹,导入后会自动加载CMakeLists文件,然而肯定是编不过的,需要对各目录下的CMakeLists稍作修改,可以直接根据错误提示来。由于不同模型转换得到的C++代码可能会有一些差异,但大致应该是差不多的,比如我这个模型转换后就只需要修改ops/CMakeLists.txt,注释掉其中不存在的源文件(因为你的模型可能不需要这些代码,所以刚才的convert脚本给你删掉了,但CMakeLists里又没做调整,应该是脚本没考虑周全吧)。示例:

set(MICRO_OPS_SRCS
#  shape.cc
#  reduce.ccreshape.ccmatmul.cc
#  nhwc/depthwise_conv_2d_ref.cc
#  nhwc/conv_2d_c4_s4.cc
#  nhwc/depthwise_conv_2d_kb3_s4.cc
#  nhwc/pooling_ref.cc
#  nhwc/conv_2d_c3_s4.cc
#  nhwc/conv_2d_ref.ccnhwc/depthwise_conv_2d_kb4_s4.ccnhwc/depthwise_conv_2d_kb1_s4.ccnhwc/base/depthwise_conv_2d_base.ccnhwc/base/conv_2d_base.ccnhwc/base/filter_op_base.ccnhwc/base/pooling_base.cc
#  nhwc/depthwise_conv_2d_kb2_s4.cc
#  nhwc/conv_2d_c2_s4.cc
#  nhwc/batch_norm.ccnhwc/pooling_s4.ccbias_add.ccsoftmax.cc
#  eltwise.ccutils/gemm.ccutils/crumb_utils.ccutils/gemv.ccutils/activation.cc
#  expand_dims.cc
#  squeeze.ccactivation.cc
)add_library(micro_ops${MICRO_OPS_SRCS}
)
target_link_libraries(micro_opsmicro_basemicro_framework
)add_library(micro_ops_for_test${MICRO_OPS_SRCS}
)
target_link_libraries(micro_ops_for_testmicro_basemicro_framework_for_optest
)
target_compile_options(micro_ops_for_test PUBLIC -fPIC)

编译错误提示找不到的,直接注释掉即可。接下来就可以自己编写测试代码来验证模型输出了,具体可以参考官方文档basic_usage最后一节。比如我这里在micro目录下添加了一个主入口测试文件main_test.cc和一个依赖文件my_test_utils.cc(包括.h头文件),只需要修改一下同目录下的CMakeLists(这个文件也是micro的顶层编译配置)即可:

# 追加配置即可
# main_test_srcs、micro_test_run_lib、micro_test_run都是自定义的名字
file(GLOB main_test_srcs my_test_utils.cc)
add_library(micro_test_run_lib${main_test_srcs}
)
add_executable(micro_test_run main_test.cc)
# 这里必须链接micro_engine_c,这样才能调用mace的API
target_link_libraries(micro_test_runmicro_test_run_libmicro_engine_c
)

http://chatgpt.dhexx.cn/article/bU1xlGq3.shtml

相关文章

小米MACE开源框架搭建

一、环境配置 请参照小米官方的文档: https://mace.readthedocs.io/en/latest/installation/env_requirement.html For Android build, ANDROID_NDK_HOME must be confifigured by using export ANDROID_NDK_HOME/path/to/ndk It will link libc instead of gnustl …

小米AI平台MACE的构建和部署

1.准备部署文件 需要准备的部署文件包括头文件(.h), mace库文件(.),转化后的模型(.a),这里以resnet18v1-opt.onnx模型为例 1.1. 优化onnx模型 # Optimize your model $python MACE_ROOT/tools/onnx_optimizer.py resnet18v1.onnx resnet18v1-opt.onnx…

小米开源框架MACE - 源码阅读笔记一

首先先一目了然看一下其目录结构(这些个源码可以在github上下载到,只要在GitHub搜索mace即可): 介绍 MACE(Mobile AI Compute Engine)是一个针对移动异构计算平台优化的深度学习推理框架。MACE提供工具和文…

MACE的环境搭建和工程构建

1. MACE 主页 MACE 的github地址:https://github.com/XiaoMi/mace 小米官方的相关文档:https://mace.readthedocs.io/en/latest/ 对开发环境的要求,可以按照以下指令安装相关的包: 2. 安装docker 参照教程:https:/…

meterpreter之timestomp命令修改文件MACE时间

文章目录 前言一、timestomp的使用前提二、MACE时间1、文件系统简述2、linux操作系统3、windows操作系统 三、timestomp使用详解1.查看帮助文档2.使用-v选项查看文件信息3.使用-f选项拷贝文件MACE时间4.使用-m/-a/-c/-e修改文件MACE时间5.使用-b/-r使MACE时间显示清空 总结 前言…

小米开源AI框架mace编译构建

目录 简介 环境要求 1 安装 Bazel 2 安装Android NDK 3 在Ubuntu16.04下安装Docker(17.09) 构建并运行示例模型 1 拉取MACE项目 2 拉取MACE Model Zoo项目 3 构建通用MACE库 4 将预先训练的mobilenet-v2模型转换为MACE格式模型 编译运行DEMO…

使用MACE加速---使用篇

最近开始研究如何对手机应用中的识别算法进行加速,搜索后发现了小米的MACE。 Mobile AI Compute Engine (MACE) 是一个专为移动端异构计算设备优化的深度学习前向预测框架。 覆盖了常见的移动端计算设备(CPU,GPU和DSP)。支持的硬…

小米AI推理框架MACE介绍

MACE 是小米公司自研的移动端深度学习框架 Mobile AI Compute Engine,2017年12月15日于公司内部正式发布。2018年6月28日,在“2018(第十三届)开源中国开源世界高峰论坛”上,小米公司人工智能与云平台副总裁崔宝秋博士宣…

MACE 使用笔记

环境安装 tensorflow 安装,一直不太想用mace的部分原因是不支持tensorflow2.模型, 但为了GPU(OpenCL)还是要用啊。 Shell set -e 学习笔记: shell 中的 set -e , set e 用法_滴水成川-CSDN博客_linux set-eset -eset命令的-e参…

小米开源框架MACE 简介

转载自 https://www.jianshu.com/p/2ab68779d05b 前言 MACE 是小米公司自研的移动端深度学习框架 Mobile AI Compute Engine,2017年12月15日于公司内部正式发布。2018年6月28日,在“2018(第十三届)开源中国开源世界高峰论坛”上…

MACE(1)-----环境搭建

学习MACE也有一个月了,将其划分三步来学习。本文是MACE学习的第一步即MACE环境的搭建。之后还有两步mace的编译和mace工程化。 MACE(2)-----模型编译:https://www.cnblogs.com/missidiot/p/9509831.html MACE(3)-----工程化:https://www.cnbl…

JDK , Tomcat , Eclipse 版本对应关系

1. JDK , Tomcat 版本对应关系 参考网址 : https://tomcat.apache.org/whichversion.html 2. JDK , Eclipse 版本对应关系 参考网址 : https://wiki.eclipse.org/Eclipse/Installation 作者 Github : tojohnonly , 博客 : EnskDeCode

如何查看eclipse的版本

阅读数:20254 转载文章,原文地址:https://blog.csdn.net/duqian94/article/details/52386076 由于作者已经写的很清楚了,就没有做修改直接转载过来了。 本篇文章主要讲解的是三种查看eclipse版本的方法(超详细&#xf…

Eclipse各版本有什么区别?

一直以来对eclipse这个IDE的各发行版本都弄不清楚,今天做一个梳理和记录。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环境插件(JDT),插件开发环境(PDE&#xff0…

超方便插件lombok的使用(eclipse版本)

1 准备 下载地址: 链接:https://pan.baidu.com/s/1Qoy2VRoERqZcgsOVYl3mZQ 提取码:2chx 2.安装 点击 或者找到对应的lombok文件所在目录执行java -jar lombok(1).jar 会自动扫描eclipse所以目录,也可以自己选择点击"S…

查看Eclipse版本号及各个版本区别

1. 找到eclipse安装目录 2. 进入readme文件夹,打开readme_eclipse.html 3. readme_eclipse.html呈现的第二行即数字版本号,如: Eclipse Project Release Notes Release 4.2.0 Last revised June 8th, 2012 附:Eclipse各个版本简介…

安装两个Eclipse 版本不一致,高版本无法打开

Could not create the Java Virtual Machine,A fatal exception has occurred。 首先删除了 工作空间的配置 然后删除掉C:\Windows\System32 里面的三个java文件 java.exe javas.exe javaw.exe 配置好环境变量就好了

eclipse选择java版本_使用 Eclipse 开发版本选择和下载说明

现在越来越多的人开发使用 IDEA,使用 Eclipse 开发的已经渐渐变少了,这篇就简单介绍下 Eclipse 的版本选择和下载,供目前还在坚守使用 Eclipse 开发的同胞们~ Eclipse 简介 Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,…

解决pydev与eclipse版本问题

eclipsepydevanaconda版本问题方法: 在eclipse安装pydev插件时,会遇见安装后在“Preference”不显示“pydev”现象,原因:下载的pydev版本与eclipse版本不匹配,导致无法使用,经过反复调试,发现官…

Eclipse版本升级(2020-12)

文章目录 Eclipse版本升级(2020-12)内置工具栏安装本地安装包安装 Eclipse版本升级(2020-12) Eclipse内安装软件通常会通过内置软件安装方式或者是自己下载安装包方式安装。同样,Eclipse版本升级也可以用这两种方式。…