一、AIP Runtime

AIP (AI Processor) Runtime是Q6、HVX和HTA三者在执行模型时候的一层软件抽象。
1、部署前提条件,让模型在AIP上执行的前提条件:
1)看硬件设备是否支持(查看前文中支持SNPE处理器的硬件列表);
2)量化模型如caffe转DLC格式时,需模型量化命令中带–enable_hta参数(–enable_partitions参数可选,表示一部分即subnet在HTA上执行,一部分即subnet在HNN上执行,调度通过Q6。具体见下文)。 相比量化,这个过程会调用HTA编译器,将编译好的AIP执行部分以二进制形式嵌入到DLC中。
在设备上使用DSP和AIP(也是DSP)的runtime是动态加载的,从而实现SNPE与AIP runtime的通讯。如安卓需要将对应DSP的库文件上传到对应路径,并export导入相关动态库和设备位置的环境变量ADSP_LIBRARY_PATH,ADSP或CDSP(即无论DSP或AIP runtime)都需要该环境变量。

2 内部调度
SNPE在用AIP计算时,会通过加载DSP的动态库从而与AIP runtime通讯,但调度管理器我想应该是Q6,通过Q6去管理使用HTA和HNN,下图的结构描述可以看到Q6是Hexagon DSP上的一部分,Q6这部分应该都是软件层面。
模型调用AIP执行过程中,SNPE Runtime上的AIP runtime会调用DSP执行器(executor,位于DSP动态库中),DSP执行器来调用HTA和HVX来管理模型的执行:
• 当DSP executor遇到HTA模型(部分),会通过HTA Driver调用HTA来执行模型该部分subnet;
• 当DSP executor遇到HVX模型(部分),会通过Hexagon NN来调用HVX执行该部分subnet。
不同部分在DLC量化过程中将相应的描述信息写到了量化后的DLC文件中,DSP executor遇到对应描述信息从而选择对应硬件驱动调用执行。

3 模型执行
因量化时可以选是否启用–hta_partitions以及对应的层数,若启用得到的模型会包含subnet。在执行过程中遇到subnet会被AIP runtime打断,根据subnet描述信息调用不同的硬件设备执行。
• HTA subnets:模型部分由HTA Compiler编译,位于DLC文件得到HTA部分;
• HNN subnets : 模型剩余部分可在DSP上调用Hexagon NN库完成计算。
目前,AIP只支持单独的HTA subnet + 单独的HNN subnet。此外,Adding HTA sections小节中还提到其它限制:HTA和HNN subnets只支持层的单一输入与输出;HTA subnet需要从第一层开始。
根据HTA、HNN subnets的分片,可将模型执行分为如下几种情况:
1)HTA subnet:runtime识别出DLC中描述信息整个网络都是HTA网络,完成计算后,如有必要先做计算结果的转换和反量化,再将输出结果返回给ARM CPU;
2)HTA subnet + HNN subnet:根据量化时的参数选择,模型的0-3层在HTA上计算,后面在HNN上计算。HTA subnet的输出交给HNN subnet作为输入,最后将结果给ARM CPU(同样,如有必要则需要反量化或转换操作);
3)TA subnet + HNN subnet + CPU subnet:这部分不同在于,前两个子网络在AIP上计算,最后几层交给ARM CPU完成计算。

二、SNPE性能与精度

下面是SNPE在小米MIX2上3个Runtime上做的benchmark。
• MIX2的SOC是骁龙835
• CPU:8核的大小核架构,1.9GHz+2.45GHz,大小核均为 Kryo280架构;
◦ 大核心频率2.45GHz,其大核心簇带有2MB的L2 Cache;
◦ 小核心频率1.9GHz,其小核心簇带有1MB的L2 Cache;
• GPU为Adreno 540@670MHz;
• DSP:Hexagon 690 DSP;
• AIP:无。
benchmark的4个模型有:AlexNet,GoogleNet,MobileNetV1/V2,SqueezeNetV1.1。一切参数根据CaffeModel和Prototxt基于SNPE提供的转换或量化工具而来。
1、 AlexNet

• 正确性验证,根据./models/alexnet/scripts/show_alexnet_classifications.py下的脚本,通过图像真实类别与网络分类类别比对,并非逐个featuremap单个元素值比较;
• fxp前缀:是使用snpe-dlc-quantize量化过的模型, 其量化策略采用8 bit的Tensorflow方式编码(下面相同),使用snpe的默认量化方式(snpe提供两种量化方式)。
2、GoogleNet

3、 MobileNetV1

4、 MobileNetV2

5、SqueezeNetV1.1

可以看出:
• 大模型DSP更有优势,小模型GPU和DSP差不多。但不能忽略的是DSP跑的都是int8量化的模型,若非量化模型,可能执行前DSP会自动量化模型初始化会占用一部分可被忽略的时间。
• 整体而言,GPU和DSP性能差不多,但GPU是float32或者float16,精度比只能跑int8的DSP要高一些,对检测、分割(如超分辨率)任务应该GPU(能加载原始非量化的模型)表现更好。GPU跑相同模型,float32和float16的推理时间差别不大,而且本身float16也能满足计算需要,在GPU情况下,可能选float32的模型更好;
• 高通对CPU的优化力度有限,毕竟DSP和GPU就是用来卸载CPU负载的,CPU与GPU/DSP相比,推理时间上慢了1到2个数量级;
• int8量化精度低。mobilenetv1和v2对于量化模型,无论是离线通过脚本转换,或者DSP直接加载float32模型做的int8定点量化,分类模型的计算结果全都错误。

SNPE分析与评测 (2)相关推荐

  1. SNPE分析与评测 (1)

    一.骁龙历代产品 在2013年之前,骁龙处理器分为S1,S2,S3,S4四个层级,以区分不同的四代产品. 1. 骁龙S1(2007-2011):MSM7225/7265采用ARM v6架构.单CPU核 ...

  2. 在线病毒分析工具评测试用

    总览 1 区分在线杀毒引擎与在线沙盒 在线杀毒引擎用的大多是国际上出名的杀毒厂商的引擎作为底层,对文件进行扫描,结论通常会反馈"无毒"或者杀毒引擎自己的代码. 在线沙盒用云端的机器 ...

  3. Android App性能评测分析-流畅度篇

    1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字 ...

  4. php xingnengfenxi_PHP 性能分析与实验:性能的微观分析

    在上一篇文章中,我们从 PHP 是解释性语言.动态语言和底层实现等三个方面,探讨了 PHP 性能的问题.本文就深入到 PHP 的微观层面,我们来了解 PHP 在使用和编写代码过程中,性能方面,可能需要 ...

  5. 聚焦可信AI与产业应用,百度联合发起千言计划实现情感分析2.0升级

    数据集是推动自然语言处理技术进步的基石.为应对自然语言处理技术应用中面临的多领域.多场景等诸多挑战,百度联合中国计算机学会.中国中文信息学会,于2020年8月共同发起中文自然语言处理数据共建计划--& ...

  6. 评测通知 | 2022年全国知识图谱与语义计算大会评测任务发布

    一.任务简介 CCKS技术评测旨在为研究人员提供测试知识图谱与语义计算技术.算法.及系统的平台和资源,促进国内知识图谱领域的技术发展,以及学术成果与产业需求的融合和对接.去年,CCKS 2021评测竞 ...

  7. 软件工程 案例分析作业

    现代软件工程  构建之法 作业https://bbs.csdn.net/forums/SoftwareEngineering?typeId=1723 软件工程作业  案例分析 (建议作为个人或结对作业 ...

  8. Android App性能流畅度测评分析可以用到工具

    1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字 ...

  9. 软件工程网络15个人作业3——案例分析(201521123107)

    #软件工程网络15个人作业3--案例分析 根据博客要求,写一篇个人随笔 参考来自: http://www.cnblogs.com/xinz/archive/2012/03/26/2417699.htm ...

最新文章

  1. 【LeetCode】Palindrome Partitioning 解题报告
  2. 迁移性好、多用途,港中文提出特征分离的无监督人类三维姿态表征​
  3. ExecutorService对象的shutdown()和shutdownNow()的区别
  4. 区块链(1)——以太坊下载安装(我营销?营销个屁)
  5. No module named import_export.admin
  6. Codeforces Round #212 (Div. 2) C. Insertion Sort 思维
  7. PgSql备份pg_dump与还原手记pg_restore(转)
  8. 2019数据安装勾选_【安装部署】esweb服务器如何单独部署
  9. 多线程的那点儿事(之多线程数据结构)
  10. h系列标签自动加了bold
  11. Spring思维导图(AOP篇)
  12. error: invalid argument ‘-std=gnu++98‘ not allowed with ‘C‘
  13. 吴恩达深度学习教程参考链接
  14. 矢量组合图标文件格式设计
  15. java excel导入jsp_导入导出EXCEL数据(jsp+ssh)
  16. R 加权最小二乘 代码_如何用EXCEL的规划求解功能优化投资组合的阿尔法值(最小二乘估计法)?...
  17. 使用 git add -p 整理 patch
  18. nemesis什么车_世界上十大最强的超级跑车,Trion Nemesis排名第一
  19. 两个可能常用到的几何知识(圆与椭圆的方程、求垂直向量)
  20. Flutter设置Container的最大最小宽高

热门文章

  1. 幼儿教师个人简历模板范文
  2. win10+vs2019+FFTW64位安装配置保姆教程
  3. mysql cache lock_mysql服务器上有sql状态status显示 Waiting for query cache lock?
  4. LeetCode-搜索二维矩阵
  5. 创业公司如何应对大公司抄袭
  6. 三菱Qplc.QD75Mh4触摸屏及plc程序,光纤伺服通讯
  7. 记录佩戴耳机时长App开发
  8. C# DES加密解密算法
  9. 祛除装修异味的方法 总有一种适合你!
  10. 旧手机利用(flutter+声网RTC+声网RTM)