高通SNPE - 基准测试概述(1)

介绍SNPE SDK随附的Python基准测试脚本,可在Android/Linux设备上运行网络模型并收集性能指标。用户可通过配置文件指定测试参数,如模型名称、运行次数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基准测试概述

SNPE SDK附带的基准测试由一组python脚本组成,这些python脚本在目标Android / Linux嵌入式设备上运行一个网络并收集性能指标。它使用SDK包中的可执行文件和库,使用网络的一组输入和指向该输入组的文件在目标上运行DLC文件。

基准脚本的输入是JSON格式的配置文件。该SDK附带有一个配置文件,用于运行SNPE SDK中创建的AlexNet模型。鼓励SDK用户创建自己的配置文件,并使用基准脚本在目标上运行以收集计时和内存消耗度量。

该配置文件允许用户指定:

  • 基准测试的名称(即AlexNet)
  • 用于存储结果的主机路径
  • 要使用的设备路径(在何处推送运行基准测试所需的文件)
  • 用于运行基准测试的设备(每次运行仅支持一台设备)
  • 设备连接到的远程计算机的主机名/ IP
  • 重复运行的次数
  • 模型细节(名称,dlc的位置,输入的位置)
  • 要使用的SNPE运行时配置(CPU,GPU,GPU_FP16和DSP的组合)
  • 进行哪些测量(“内存”和/或“定时”)
  • 测量的概要分析级别(“关闭”,“基本”,“中等”或“详细”)

命令行参数

要查看所有命令行参数,请在运行snpe_bench.py​​时使用“ -h”选项。

usage: snpe_bench.py [-h] -c CONFIG_FILE [-o OUTPUT_BASE_DIR_OVERRIDE]
                     [-v DEVICE_ID_OVERRIDE] [-r HOST_NAME] [-a]
                     [-t DEVICE_OS_TYPE_OVERRIDE] [-d] [-s SLEEP]
                     [-b USERBUFFER_MODE] [-p PERFPROFILE] [-l PROFILINGLEVEL]
                     [-json] [-cache]

Run the snpe_bench

required arguments:
  -c CONFIG_FILE, --config_file CONFIG_FILE
                        Path to a valid config file
                        Refer to sample config file config_help.json for more
                        detail on how to fill params in config file

optional arguments:
  -o OUTPUT_BASE_DIR_OVERRIDE, --output_base_dir_override OUTPUT_BASE_DIR_OVERRIDE
                        Sets the output base directory.
  -v DEVICE_ID_OVERRIDE, --device_id_override DEVICE_ID_OVERRIDE
                        Use this device ID instead of the one supplied in config
                        file. Cannot be used with -a
  -r HOST_NAME, --host_name HOST_NAME
                        Hostname/IP of remote machine to which devices are
                        connected.
  -a, --run_on_all_connected_devices_override
                        Runs on all connected devices, currently only support 1.
                        Cannot be used with -v
  -t DEVICE_OS_TYPE_OVERRIDE, --device_os_type_override DEVICE_OS_TYPE_OVERRIDE
                        Specify the target OS type, valid options are
                        ['android', 'android-aarch64', 'le', 'le64_gcc4.9',
                        'le_oe_gcc6.4', 'le64_oe_gcc6.4']
  -d, --debug           Set to turn on debug log
  -s SLEEP, --sleep SLEEP
                        Set number of seconds to sleep between runs e.g. 20
                        seconds
  -b USERBUFFER_MODE, --userbuffer_mode USERBUFFER_MODE
                        [EXPERIMENTAL] Enable user buffer mode, default to
                        float, can be tf8exact0
  -p PERFPROFILE, --perfprofile PERFPROFILE
                        Set the benchmark operating mode (balanced, default,
                        sustained_high_performance, high_performance,
                        power_saver, system_settings)
  -l PROFILINGLEVEL, --profilinglevel PROFILINGLEVEL
                        Set the profiling level mode (off, basic, moderate, detailed).
                        Default is basic.
  -json, --generate_json
                        Set to produce json output.
  -cache, --enable_init_cache
                        Enable init caching mode to accelerate the network
                        building process. Defaults to disable.

运行基准

先决条件

SNPE SDK按照“ SNPE设置”一章设置。
教程设置已完成。

可选:如果设备连接到远程计算机,则用户需要完成远程adb服务器设置。

运行SDK附带的AlexNet

snpe_bench.py​​是用于测量和报告性能统计信息的主要基准脚本。这是将其与在SDK中创建的AlexNet模型和数据一起使用的方法。

cd $SNPE_ROOT/benchmarks
python3 snpe_bench.py -c alexnet_sample.json -a

    where
        -a benchmarks on the device connected

查看结果(csv文件或json文件)

所有结果都存储在配置json文件中指定的“ HostResultDir”中。基准为每次基准运行创建带时间戳的目录。所有计时结果均以微秒为单位存储。

为了方便起见,创建了一个“ latest_results”链接,该链接始终指向最新的运行。

# In alexnet_sample.json, "HostResultDir" is set to "alexnet/results"
cd $SNPE_ROOT/benchmarks/alexnet/results
# Notice the time stamped directories and the "latest_results" link.
cd $SNPE_ROOT/benchmarks/alexnet/results/latest_results
# Notice the .csv file, open this file in a csv viewer (Excel, LibreOffice Calc)
# Notice the .json file, open the file with any text editor

CSV基准结果文件

CSV文件包含与以下示例类似的结果。某些测量结果可能在CSV文件中不明显。要获取所有时序信息,需要将分析级别设置为详细。默认情况下,配置级别是基本的。请注意,为清楚起见,添加了彩色标题。

在这里插入图片描述

高通SNPE - 基准测试概述(1)

### 端侧推理框架概述 端侧推理是指在终端设备上执行机器学习模型推断的过程,使得智能应用可以直接运行于移动电话、嵌入式系统或其他物联网(IoT)装置之上。这种方式不仅减少了延迟时间还保护了隐私安全,因为数据不必上传至远程服务器即可得到处理结果。 #### 常见的端侧推理框架及其特点 - **高通 SNPE (Snapdragon Neural Processing Engine)** 这是由Qualcomm推出的专用于骁龙平台上的神经网络处理引擎。它支持广泛的深度学习架构,并能够充分利用SoC中的各种计算资源如CPU、GPU以及Hexagon DSP来进行高效的模型部署[^3]。 - **阿里巴巴 MNN** 来自阿里云团队打造的一个轻量级移动端AI推理引擎,具备良好的跨平台兼容性和易用性。MNN特别注重对于卷积层运算效率的提升,在图像识别等领域表现出色。该工具链提供了从训练好的TensorFlow/Caffe/PaddlePaddle等格式模型向MNN内部表示形式转换的功能。 - **腾讯 FeatherCNN** 定位为一款专注于手机端高效能表现的小型化深度学习库。FeatherCNN实现了对常见操作符的高度优化,特别是针对ARM架构进行了特殊设计以达到最佳性能。此外,此项目也包含了丰富的预训练模型供开发者快速集成到应用程序当中去。 - **ncnn** ncnn由腾讯优图实验室开源发布的一款专门为移动设备定制化的高性能神经网络前馈算法实现方案。除了常规意义上的多核并行外,ncnn还引入了一些独特的加速策略比如SIMD指令集利用、OpenMP多线程调度机制等来进一步缩短预测所需的时间开销[^4]。 ### 性能评估与选型建议 当考虑选用哪一种端侧推理框架时,应该综合考量以下几个方面: - **目标硬件环境** 不同厂商生产的芯片组可能具有不同的微体系结构特征,因此某些特定类型的处理器可能会更适合某一类别的软件包。例如,如果主要面向Android智能手机市场,则可以优先考察那些已经过良好调校并与主流品牌合作密切的产品。 - **模型复杂度和支持程度** 并不是所有的框架都能够完美解析任意种类的人工神经网路描述文件;有时还需要额外编写适配器代码才能完成迁移工作。所以事先确认所使用的原生或第三方API能否满足需求至关重要。 - **功耗预算** 对于电池供电的应用场景而言,降低能耗往往是一个重要指标。部分解决方案允许用户灵活调整参数配置从而找到速度与续航之间的平衡点。 ```python import time from some_inference_framework import load_model, preprocess_input, run_inference def benchmark(model_path, input_data): model = load_model(model_path) start_time = time.time() processed_input = preprocess_input(input_data) output = run_inference(processed_input, model) end_time = time.time() latency = end_time - start_time return { 'latency': latency, 'output': output } ``` 上述脚本展示了如何构建一个简单的基准测试函数`benchmark()`,可用于测量不同条件下各个候选对象的表现差异。实际操作过程中应当多次重复实验取平均值得出更加可靠的结论。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值