【Qualcomm】高通SNPE框架简介、下载与使用

news2024/11/14 21:51:50

目录

一 高通SNPE框架

1 SNPE简介

2 QNN与SNPE

3 Capabilities

4 工作流程

二 SNPE的安装与使用

1 下载

2 Setup

3 SNPE的使用概述


一 高通SNPE框架

1 SNPE简介

SNPE(Snapdragon Neural Processing Engine),是高通公司推出的面向移动端和物联网设备的深度学习推理框架。 SNPE提供了一套完整的深度学习推理框架,能够支持多种深度学习模型,包括PytorchTFliteTensorFlowONNX,同时还支持多种模型转换工具,如SNPE模型优化器(SNPE Model Optimizer)和ONNX模型优化器等,能够将模型转换成SNPE可执行格式,提升模型在移动端和物联网设备上的性能和效率

SNPE(Snapdragon Neural Processing Engine)还支持多种硬件平台,包括高通骁龙平台、ARM平台、Intel平台等,能够充分利用底层硬件的优势,提升深度学习推理的效率和速度,同时还支持多线程和多异构处理,能够充分发挥多核心和异构计算的优势。

总之,SNPE是一套面向移动端和物联网设备的高效深度学习推理框架,能够支持多种深度学习模型和多种硬件平台,为移动端和物联网设备上的深度学习应用提供了有效的支持。

2 QNN与SNPE

高通的QNN(Qualcomm Neural Network)和SNPE(Snapdragon Neural Processing Engine)都是面向移动设备的深度学习推理框架,但它们有一些不同之处。

功能和定位

Qualcomm Neural Network是高通公司开发的深度学习推理库,用于在移动设备上对神经网络进行推理。SNPE也是高通公司推出的神经网络推理框架,旨在使移动设备能够高效地进行深度学习推理操作。

支持的硬件

QNN主要针对高通骁龙处理器进行了优化,以提高在移动设备上的性能和效率。SNPE也专门为高通骁龙处理器进行了优化,以支持在移动设备上进行神经网络推理。

架构和性能

QNN设计上可能更专注于高通特定型号的处理器,以提供更高的性能和功耗效率。SNPE为了兼容多种移动设备,可能更加通用,可能在不同的设备上具有更好的可移植性。

开发者支持

QNN针对高通平台的开发者可能会获得更多定制化的支持和优化建议。SNPE可能提供更广泛的文档和支持,以便在多种移动设备上实现更好的支持。

综上,二者都是高通为移动设备深度学习推理而设计的框架,但QNN可能更侧重于高通特定处理器的优化和支持,而SNPE可能更通用一些,以在不同移动设备上提供更好的性能和可移植性。

3 Capabilities

Snapdragon神经处理引擎(SNPE)是用于执行深度神经网络的Qualcomm Snapdragon软件加速运行时。 使用SNPE,用户可以:

执行任意深度的神经网络。

在SnapdragonTM CPU,AdrenoTM GPU或HexagonTM DSP上执行网络。

在x86 Ubuntu Linux上调试网络执行。

将ONNX和TensorFlow等模型转换为SNPE深度学习容器(DLC)文件。

将DLC文件量化为8位定点,以便在Hexagon DSP上运行。

使用SNPE工具调试和分析网络性能。

通过C ++/Java将网络集成到应用程序和其他代码中。

4 工作流程

模型在流行的深度学习框架上训练完成后,训练的模型将转换为可加载到SNPE运行时的DLC文件。 然后,可以使用此DLC文件使用其中一个Snapdragon加速计算核心执行前向推断传递。SNPE框架的工作流程包括模型准备、模型加载、数据输入、模型推理结果输出等步骤,能够支持多种深度学习模型和多种硬件平台,为移动端和物联网设备上的深度学习应用提供高效的支持。基本的SNPE工作流程包含的步骤如下:

模型准备:使用深度学习框架(如Caffe、TensorFlow等)训练出深度学习模型,然后通过SNPE模型优化器将模型转换成SNPE可执行格式,即DLC文件。在模型转换的过程中,SNPE会对模型进行剪枝、量化、编译等优化操作,以提升模型在移动端和物联网设备上的性能和效率。

模型加载:将转换后的SNPE模型加载到移动端或物联网设备上。在加载模型的过程中,SNPE会根据设备配置和硬件平台等条件选择合适的加速库,如高通DSP库等。可选择量化DLC 文件以在Hexagon DSP 上运行。

数据输入:将待处理的数据输入到SNPE模型中。可以通过摄像头等设备获取实时数据流,也可以通过文件读取的方式输入离线数据。

模型推理:通过SNPE模型推理引擎对数据进行处理。在模型推理的过程中,SNPE会根据模型结构和数据输入等参数计算出模型的输出结果,输出结果可以是分类、回归、分割等形式。

结果输出:将模型推理得到的结果输出到移动端或物联网设备上。可以通过屏幕等设备显示或播放结果,也可以通过网络传输的方式将结果发送到远程服务器上。

二 SNPE的安装与使用

SNPE可以运行模型进行推理,但需要先将模型转换为Deep Learning Container (DLC) file才可以加载进SNPE中。

CPU支持支持双精度浮点和8位量化的模型,GPU支持混合精度或者单精度浮点,数字信号处理器DSP就只支持支持8位整形。DLC进一步进行8bit量化才可以运行在Qualcomm Hexagon DSP上。

1 下载

地址:Qualcomm Neural Processing SDK | Qualcomm Developer

点击Get Software 直接下载, 然后解压

2 Setup

① 创建conda环境 snpe

conda create -n snpe python=3.10 
# 激活snpe环境
conda activate snpe

② 安装SNPE相关依赖

安装Linux依赖:

sudo bash ${SNPE_ROOT}/bin/check-linux-dependency.sh

安装Python依赖:

${SNPE_ROOT}/bin/check-python-dependency

注意:如果Python依赖可正常安装,则可跳过这一步骤。否则,修改check-python-dependency文件,以便使用清华源。

vim check-python-dependency

添加一行内容,修改如下:

"-i https://pypi.tuna.tsinghua.edu.cn/simple"

③ 安装ML Frameworks

ML Frameworks的版本按照实际需求来安装,以下仅作为示例。

# tensorflow

pip3 install TensorFlow==2.10.1 -f https://pypi.org/project/tensorflow/2.10.1/

# CPU版 tensorflow

pip3 install tensorflow-cpu==2.10.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

# tflite

pip3 install tflite==2.3.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

# PyTorch

pip3 install torch==1.13.1 -f https://download.pytorch.org/whl/cpu/stable -i https://pypi.tuna.tsinghua.edu.cn/simple

# ONNX

pip3 install onnx==1.16.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

# ONNX Runtime

pip3 install onnxruntime==1.18.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

使用下述命令确认上述依赖是否成功安装,无报错即可。

python -c "import tensorflow"

python -c "import onnx"

python -c "import onnxruntime"

python -c "import tflite"

python -c "import torch"

3 SNPE的使用概述

# Inception v3模型数据地址:
https://storage.googleapis.com/download.tensorflow.org/models/inception_v3_2016_08_28_frozen.pb.tar.gz
# 运行脚本下载模型并设置为在CPU上运行:
python3 $SNPE_ROOT/examples/Models/InceptionV3/scripts/setup_inceptionv3_snpe.py -a ~/tmpdir -d
# 运行脚本下载模型并设置为在DSP上运行:
python3 $SNPE_ROOT/examples/Models/InceptionV3/scripts/setup_inceptionv3_snpe.py -a ~/tmpdir -d -r dsp
# 在HTA上运行:
python3 $SNPE_ROOT/examples/Models/InceptionV3/scripts/setup_inceptionv3_snpe.py -a ~/tmpdir -r aip

① 设置环境变量

source ${SNPE_ROOT}/bin/envsetup.sh

这将设置/更新以下环境变量:

  1. SNPE_ROOT
  2. PYTHONPATH
  3. PATH
  4. LD_LIBRARY_PATH

② 模型转换

◆ 非量化

# snpe-tensorflow-to-dlc工具将TensorFlow模型转换为等效的Qualcomm® Neural Processing SDK DLC文件。下面的命令将一个Inception v3 TensorFlow模型转换为Qualcomm®Neural Processing SDK DLC文件。
snpe-tensorflow-to-dlc --input_network $SNPE_ROOT/examples/Models/InceptionV3/tensorflow/inception_v3_2016_08_28_frozen.pb \
                       --input_dim input "1,299,299,3" --out_node "InceptionV3/Predictions/Reshape_1" \
                       --output_path inception_v3.dlc
# snpe-tflite-to-dlc工具将TFLite模型转换为等效的Qualcomm®Neural Processing SDK DLC文件。下面的命令将Inception v3 TFLite模型转换为DLC文件。
snpe-tflite-to-dlc --input_network inception_v3.tflite
                   --input_dim input "1,299,299,3"
                   --output_path inception_v3.dlc
# snpe-pytorch-to-dlc工具将PyTorch TorchScript模型转换为等效的Qualcomm®Neural Processing SDK DLC文件。下面的命令将ResNet18 PyTorch模型转换为DLC文件。
snpe-pytorch-to-dlc --input_network resnet18.pt
                    --input_dim input "1,3,224,224"
                    --output_path resnet18.dlc
# snpe-onnx-to-dlc工具将序列化的ONNX模型转换为等效的DLC表示。
snpe-onnx-to-dlc --input_network models/bvlc_alexnet/bvlc_alexnet/model.onnx
                 --output_path bvlc_alexnet.dlc

◆ 量化

每个snpe-framework-to-dlc转换工具都将非量化模型转换为非量化DLC文件。量化需要另一个步骤。snpe-dlc-quantize工具用于将模型量化为支持的定点格式之一。

例如,下面的命令将把一个Inception v3 DLC文件转换成一个量化的Inception v3 DLC文件。

snpe-dlc-quantize --input_dlc inception_v3.dlc --input_list image_file_list.txt

--output_dlc inception_v3_quantized.dlc

③ run

Linux Host

转到模型的基本位置并运行snpe-net-run。

cd $SNPE_ROOT/examples/Models/InceptionV3

snpe-net-run --container dlc/inception_v3_quantized.dlc --input_list data/cropped/raw_list.txt

snpe-net-run完成后,结果将保存到$SNPE_ROOT/examples/Models/InceptionV3/output目录中。

◆ Run on Android Platform

设置SNPE_TARGET_ARCH

export SNPE_TARGET_ARCH=aarch64-android

PUSH库和二进制文件

将Qualcomm®Neural Processing SDK库和snpe-net-run可执行文件推送到Android目标上的/data/local/tmp/snpeexample。“SNPE_TARGET_DSPARCH”设置为目标Android设备的DSP架构

export SNPE_TARGET_ARCH=aarch64-android

export SNPE_TARGET_DSPARCH=hexagon-v73
adb shell "mkdir -p /data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/bin"

adb shell "mkdir -p /data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/lib"

adb shell "mkdir -p /data/local/tmp/snpeexample/dsp/lib"
adb push $SNPE_ROOT/lib/$SNPE_TARGET_ARCH/*.so \

/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/lib

adb push $SNPE_ROOT/lib/$SNPE_TARGET_DSPARCH/unsigned/*.so \

/data/local/tmp/snpeexample/dsp/lib

adb push $SNPE_ROOT/bin/$SNPE_TARGET_ARCH/snpe-net-run \

/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/bin

PUSH模型相关数据Android

cd $SNPE_ROOT/examples/Models/InceptionV3
mkdir data/rawfiles && cp data/cropped/*.raw data/rawfiles/
adb shell "mkdir -p /data/local/tmp/inception_v3"
adb push data/rawfiles /data/local/tmp/inception_v3/cropped
adb push data/target_raw_list.txt /data/local/tmp/inception_v3
adb push dlc/inception_v3_quantized.dlc /data/local/tmp/inception_v3
rm -rf data/rawfiles

RUN模型

可以使用CPU或者DSP,如下。

使用CPU Runtime:

adb shell

export SNPE_TARGET_ARCH=aarch64-android

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/lib

export PATH=$PATH:/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/bin

cd /data/local/tmp/inception_v3

snpe-net-run --container inception_v3_quantized.dlc --input_list target_raw_list.txt

exit

在run完模型后将结果pull到本地。

adb pull /data/local/tmp/inception_v3/output output_android

运行以下python脚本检查分类结果:

python3 scripts/show_inceptionv3_classifications_snpe.py -i data/target_raw_list.txt \

-o output_android/ \

-l data/imagenet_slim_labels.txt

输出应该如下所示,显示所有图像的分类结果。

Classification results
cropped/notice_sign.raw 0.175781 459 brass
cropped/plastic_cup.raw 0.976562 648 measuring cup
cropped/chairs.raw      0.285156 832 studio couch
cropped/trash_bin.raw   0.773438 413 ashcan

使用DSP Runtime:

需要--use_dsp选项

注意,额外的环境变量ADSP_LIBRARY_PATH必须设置为使用DSP。

adb shell

export SNPE_TARGET_ARCH=aarch64-android

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/lib

export PATH=$PATH:/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/bin

export ADSP_LIBRARY_PATH="/data/local/tmp/snpeexample/dsp/lib;/system/lib/rfsa/adsp;/system/vendor/lib/rfsa/adsp;/dsp"

cd /data/local/tmp/inception_v3

snpe-net-run --container inception_v3_quantized.dlc --input_list target_raw_list.txt --use_dsp

exit

在run完模型后将结果pull到本地host。

adb pull /data/local/tmp/inception_v3/output output_android_dsp

运行以下python脚本检查分类结果:

python3 scripts/show_inceptionv3_classifications_snpe.py -i data/target_raw_list.txt \

-o output_android_dsp/ \

-l data/imagenet_slim_labels.txt

输出应该如下所示,显示所有图像的分类结果。

Classification results
cropped/notice_sign.raw 0.175781 459 brass
cropped/plastic_cup.raw 0.976562 648 measuring cup
cropped/chairs.raw      0.285156 832 studio couch
cropped/trash_bin.raw   0.773438 413 ashcan

以上,本文分享的内容就结束啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2161584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode尊享面试100题-252.会议室

给定一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] [starti, endi] ,请你判断一个人是否能够参加这里面的全部会议。 示例 1: 输入:intervals [[0,30],[5,10],[15,20]] 输出&#xff…

记录Mac编译Android源码踩过的坑

学习Android源码,如果电脑配置还不错,最好还是下载一套源码,经过编译后导入到Android Studio中来学习,这样会更加的直观,代码之间的跳转查看会更加方便。因此,笔者决定下载并编译一套源码,以利于…

【C++算法】链表

知识总结 常用技术: 1.画图!!——>直观形象便于理解 2.引入虚拟”头结点“ 便于处理边界情况方便对链表操作 3.不要吝啬空间,大胆定义变量 4.快慢双指针——判环、找链表中环的入口、找链表中倒数第n个节点 链表中的常用…

电力领域大模型

2023年12月,arXiv预印本平台发表了一篇题为"Large Foundation Models for Power Systems"的研究论文。该文系统探讨了大型基础模型如大型语言模型(LLMs)在电力系统建模和运行中的应用前景。研究重点关注了大型基础模型在最优潮流计…

php+mysql安装

1.卸载mysql 没启动不停止 2.下载 3.解压 4.点击安装 5.出现成功 端口占用修改 修改端口89或者87 可视化扩展 修改后重启 开启扩展

consul注册中心与容器自动发现实战

consul简介 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等&#xff0…

springboot快速开发平台使用达梦数据库

1.首先来到DM管理工具 大致流程是:创建表空间(用于给新建的用户使用)-》创建用户(绑定表空间) 文件位置 2.创建用户 来到所属角色页面,第一个权限管理员一定要勾上,其他的看情况 3.来到DM数…

9.24每日作业

1> 思维导图 2> 将昨天的My_string类中的所有能重载的运算符全部进行重载 、[] 、>、、>) 3> 仿照stack类实现my_stack,实现一个栈的操作 text.h #ifndef LIST_H #define LIST_H #include <iostream> #include <string.h>using namespace std;…

Java项目: 基于SpringBoot+mybatis+maven医疗病历交互系统(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven医疗病历交互系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简…

力扣 简单 206.反转链表

文章目录 题目介绍题解 题目介绍 题解 法一&#xff1a;双指针 在遍历链表时&#xff0c;将当前节点的 next 改为指向前一个节点。由于节点没有引用其前一个节点&#xff0c;因此必须事先存储其前一个节点。在更改引用之前&#xff0c;还需要存储后一个节点。最后返回新的头引…

不靠学历,不拼年资,怎么才能月入2W?

之前统计局发布了《2023年城镇单位就业人员年平均工资情况》&#xff0c;2023年全国城镇非私营单位和私营单位就业人员年平均工资分别为120698元和68340元。也就是说在去年非私营单位就业人员平均月薪1W&#xff0c;而私营单位就业人员平均月薪只有5.7K左右。 图源&#xff1a;…

1. 值、类型与运算符

在计算机的世界里&#xff0c;只有数据。你可以读取数据、修改数据、创建新数据&#xff0c;但不能提及非数据的内容。所有这些数据都存储为长位序列&#xff0c;因此本质上是相似的。 位&#xff08;比特&#xff09;是任何类型的二值事物&#xff0c;通常被描述为0和1。在计算…

Maya学习笔记:软选择

文章目录 打开软选择调整软选择范围衰减模式 软选择可以很好的进行渐变修改 打开软选择 方法1&#xff1a; 进入点线面模式&#xff0c;按B键进入软选择模式&#xff0c;再按B取消 方法2&#xff1a;双击左侧的选择按钮打开选择面板&#xff0c;勾选软选择 调整软选择范围 …

hadoop大数据平台操作笔记(上)

Hadoop介绍 Hadoop是一个开源的分布式系统框架&#xff0c;专为处理和分析大规模数据而设计。它由Apache基金会开发&#xff0c;并通过其高可靠性、高扩展性、高效性和高容错性等特性&#xff0c;在大数据领域发挥着重要作用。以下是对Hadoop的详细解释及其用途的概述&#xf…

分享6个icon在线生成网站,支持AI生成

在这个数字化的时代&#xff0c;创意和视觉标识在产品推广中可谓是愈发重要。提到图标&#xff0c;我们就不能不聊聊“Icon”这个小家伙。它不仅仅是个简单的视觉元素&#xff0c;简直是品牌信息的超级传递者。因此&#xff0c;图标生成器成了设计界的“万金油”&#xff0c;帮…

【赵渝强老师】K8s的DaemonSets控制器

DaemonSet控制器相当于在节点上启动了一个守护进程。通过使用DaemonSet可以确保一个Pod的副本运行在 Node节点上。如果有新的Node节点加入集群&#xff0c;DaemonSet也会自动给新加入的节点增加一个Pod的副本&#xff1b;反之&#xff0c;当有Node节点从集群中移除时&#xff0…

1.4 边界值分析法

欢迎大家订阅【软件测试】 专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言1 定义2 选取3 具体步骤4 案例分析 本篇文章参考黑马程序员 前言 边界值分析法是一种广泛应用于软件测试中的技术&#xff0c;旨在识别输入值范围内的潜在缺陷。本文将详细探讨…

一.python入门

gyp的读研日记&#xff0c;哈哈哈哈&#xff0c;&#x1f642;&#xff0c;从复习python开始&#xff0c; 目录 1.python入门 1.1 Python说明书 1.2 Python具备的功能 1.3 学习前提 1.4 何为Python 1.5 编程语言 2.Python环境搭建 2.1 开发环境概述 2.2 Python的安装与…

离线一机一码验证和网络验证的区别以及使用场景

本文主要介绍离线一机一码验证和网络验证的区别及其各自的特点和优势。通过对比这两种验证方式的工作原理、优缺点&#xff0c;使开发人员更好地理解并选择适合自己需求的验证方案。接下来&#xff0c;我们将详细探讨每种验证方式的具体实现和应用场景。 离线一机一码验证 和 网…

告别旋转手机:SLAM过程中的磁力计标定

1.论文信息 论文标题&#xff1a;Saying goodbyes to rotating your phone: Magnetometer calibration during SLAM 作者&#xff1a;Ilari Vallivaara, Yinhuan Dong, Tughrul Arslan 作者单位&#xff1a;爱丁堡大学 论文链接&#xff1a;https://arxiv.org/pdf/2409.0124…