Qualcomm AI Hub-示例(二)模型性能分析

文章介绍

模型性能分析(Profiling)

当模型尝试部署到设备时,会面临许多重要问题:

  • 目标硬件的推理延迟是多少?
  • 该模型是否符合一定的内存预算?
  • 模型能够利用神经处理单元吗?

通过在云端的物理设备运行模型完成性能分析,能够解答这些疑问。

编译模型

Qualcomm AI Hub支持分析已编译好的模型。在本例中,我们优化并评测了先前使用submit_compile_job()编译的模型。请注意,我们是如何利用compile_job使用get_target_model()的方法编译的模型。

import qai_hub as hub

# Profile the previously compiled model

profile_job = hub.submit_profile_job(

    model=compile_job.get_target_model(),

    device=hub.Device("Samsung Galaxy S23"),

)

assert isinstance(profile_job, hub.ProfileJob)

返回值是ProfileJob的一个实例。要查看所有任务的列表,请转到/jobs/。

分析PyTorch模型性能

此示例需要PyTorch,可以按如下方式进行安装。

pip3 install "qai-hub[torch]"

在本例中,我们使用Qualcomm AI Hub优化和评测PyTorch模型。

from typing import List, Tuple

import torch

import qai_hub as hub

class SimpleNet(torch.nn.Module):

    def __init__(self):

        super().__init__()

        self.linear = torch.nn.Linear(5, 2)

    def forward(self, x):

        return self.linear(x)

input_shapes: List[Tuple[int, ...]] = [(3, 5)]

torch_model = SimpleNet()

# Trace the model using random inputs

torch_inputs = tuple(torch.randn(shape) for shape in input_shapes)

pt_model = torch.jit.trace(torch_model, torch_inputs)

# Submit compile job

compile_job = hub.submit_compile_job(

    model=pt_model,

    device=hub.Device("Samsung Galaxy S23 Ultra"),

    input_specs=dict(x=input_shapes[0]),

)

assert isinstance(compile_job, hub.CompileJob)

# Submit profile job using results form compile job

profile_job = hub.submit_profile_job(

    model=compile_job.get_target_model(),

    device=hub.Device("Samsung Galaxy S23 Ultra"),

)

assert isinstance(profile_job, hub.ProfileJob)

有关上传、编译和提交任务时选项的更多信息,请参考upload_model(), submit_compile_job() 和submit_profile_job().

分析TorchScript模型性能

如果您已经保存了traced或脚本化的torch模型(使用torch.jit.save保存),则可以直接提交。我们将以mobilenet_v2.pt为例。与前面的示例类似,只有在将TorchScript模型编译到合适的目标之后,才能对其进行概要评测。

import qai_hub as hub

# Compile previously saved torchscript model

compile_job = hub.submit_compile_job(

    model="mobilenet_v2.pt",

    device=hub.Device("Samsung Galaxy S23 Ultra"),

    input_specs=dict(image=(1, 3, 224, 224)),

)

assert isinstance(compile_job, hub.CompileJob)

profile_job = hub.submit_profile_job(

    model=compile_job.get_target_model(),

    device=hub.Device("Samsung Galaxy S23 Ultra"),

)

assert isinstance(profile_job, hub.ProfileJob)

分析ONNX模型性能

Qualcomm AI Hub还支持ONNX。与前面的示例类似,只有在ONNX模型编译到合适的目标之后,才能对其进行评测。我们将以 mobilenet_v2.onnx为例。

import qai_hub as hub

compile_job = hub.submit_compile_job(

    model="mobilenet_v2.onnx",

    device=hub.Device("Samsung Galaxy S23 Ultra"),

)

assert isinstance(compile_job, hub.CompileJob)

profile_job = hub.submit_profile_job(

    model=compile_job.get_target_model(),

    device=hub.Device("Samsung Galaxy S23"),

)

assert isinstance(profile_job, hub.ProfileJob)

分析TensorFlow Lite模型性能

Qualcomm AI Hub还支持以.tflite格式对模型Profiling。我们将使用SqueezeNet10 model。

import qai_hub as hub

# Profile TensorFlow Lite model (from file)

profile_job = hub.submit_profile_job(

    model="SqueezeNet10.tflite",

    device=hub.Device("Samsung Galaxy S23 Ultra"),

)

在多个设备上分析模型

通常,对多个设备的性能进行建模是很重要的。在本例中,我们介绍了最近的Snapdragon®8 Gen 1和Snapdragon™8 Gen 2设备,以获得良好的测试覆盖率。我们重用TensorFlow Lite示例中的SqueezeNet model,但这次我们在两个设备上对其进行了评测。

import qai_hub as hub

devices = [

    hub.Device("Samsung Galaxy S23 Ultra"),  # Snapdragon 8 Gen 2

    hub.Device("Samsung Galaxy S22 Ultra 5G"),  # Snapdragon 8 Gen 1

]

jobs = hub.submit_profile_job(model="SqueezeNet10.tflite", device=devices)

为每个设备创建一个单独的评测任务。

上传模型以进行评测

可以在不提交评测任务的情况下上传模型(例如SqueezeNet10.tflite)。

import qai_hub as hub

hub_model = hub.upload_model("SqueezeNet10.tflite")

print(hub_model)

现在,您可以使用上传的模型的model_id来运行评测任务。

import qai_hub as hub

# Retrieve model using ID

hub_model = hub.get_model("mabc123")

# Submit job

profile_job = hub.submit_profile_job(

            model=hub_model,

            device=hub.Device("Samsung Galaxy S23 Ultra"),

            input_shapes=dict(x=(1, 3, 224, 224)),

)

分析已编译好的模型

我们可以重用以前作业中的模型来启动新的评测任务(例如,在不同的设备上)。这样可以避免多次上传同一个模型。

import qai_hub as hub

# Get the model from the profile job

profile_job = hub.get_job("jabc123")

hub_model = profile_job.model

# Run the model from the job

new_profile_job = hub.submit_profile_job(

    model=hub_model,

    device=hub.Device("Samsung Galaxy S22 Ultra 5G"),

)

作者:高通工程师,戴忠忠(Zhongzhong Dai)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始学HCIA之网络基础知识02

1、TCP/IP(Transmission Control Protocol/Internet Protocol)参考模型,它是当下实际的业界标准。 2、TCP/IP这个名字来自该协议簇中两个非常重要的协议,一个是IP(Internet Protocol),另一个是T…

Django 三板斧、静态文件、request方法

【一】三板斧 【1】HttpResponse (1)介绍 HttpResponse是Django中的一个类,用于构建HTTP响应对象。它允许创建并返回包含特定内容的HTTP响应。 (2)使用 导入HttpResponse类 from django.http import HttpResponse创…

Linux:Prometheus的源码包安装及操作(2)

环境介绍 三台centos 7系统,运行内存都2G 1.prometheus监控服务器:192.168.6.1 主机名:pm 2.grafana展示服务器:192.168.6.2 主机名:gr 3.被监控服务器:192.168.6.3 …

二叉树的遍历及线索二叉树试题解析

一、单项选择题 01.在下列关于二叉树遍历的说法中,正确的是( C ). A.若有一个结点是二叉树中某个子树的中序遍历结果序列的最后一个结点,则它一定是该子树的前序遍历结果序列的最后一个结点 B.若有一个结点是二叉树中某个子树的前序遍历结果序列的最后一…

多态的左膀右臂,向上转型与重写

同一个引用 调用了 同一个方法,但是因为引用的对象不一样,所表现的行为不一样,我们把这种思想称为:多态 目录 1.向上转型 1.1.向上转型定义 1.2.向上转型的优缺点 1.3.向上转型的内存指向 1.4.向上转型的三种方式 1.5.向下…

【学习】软件测试行业未来的发展趋势预测

近年来,随着中国数字经济的蓬勃发展,软件测试行业也迎来了新的春天。从早期的手工测试到自动化测试,再到持续集成和持续交付,中国的软件测试行业经历了快速的发展和变革。各行各业均对软件测试提出了更高的要求,尤其在…

项目1-加法计算器

1.创建项目 2.导入前端代码 2.1 static包内 2.2 测试前端代码是否有误 显示成功说明无误 2.3 定义用户接口 请求路径:calc/sum 请求方式:GET/POST 接口描述:计算两个整数相加 请求参数: 参数名类型是否必须备注num1Integer是参与计算的第…

python学习9:python的代码中的数据类型转换

python中数据类型的转换 1.为什么需要转换类型呢? 数据类型之间,在特定的场景下,是可以相互转换的,如字符串转数字,数字转字符串等;数据类型转换,在以后是我们经常使用到的功能,例如…

【MySQL】复合查询——基本单表查询、多表查询、自连接、子查询、使用from进行子查询、合并查询

文章目录 MySQL复合查询1. 基本单表查询2. 多表查询3. 自连接4. 子查询4.1 单行子查询4.2 多行子查询4.3 多列子查询4.4 使用from进行子查询 5. 合并查询5.1 union5.2 union all MySQL 复合查询 数据库的复合查询是指在一个查询中结合使用多个查询条件或查询子句,以…

前端学习之用css和html做一个仿淘宝的导航栏

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>仿淘宝界面案例</title><style>/* 最外层盒子 */.container{width: 270px;height: 385px;border: 1px solid rgb(255, 208, 0);bord…

MISC:zip压缩包伪加密破解及其结构解析

一.前言 遇到zip压缩包是被加密的&#xff0c;但加密有时侯是伪加密&#xff0c;需要我们进行破解。 二.压缩包解析 1. 压缩源文件数据区 zip文件头标记 文件头&#xff1a;504B0304 解压文件所需的pkware版本 全局方式位标记 如果四位中的第二位为奇数则表示有加密&#xff…

基于LLM的数据质量错误检测

原文地址&#xff1a;automated-detection-of-data-quality-issues 2024 年 3 月 23 日 本文是有关使用大型语言模型 (LLM) 清理数据的系列文章中的第二篇文章&#xff0c;重点是识别表格数据集中的错误。 该图概述了我们将在本文中探讨的方法&#xff0c;该方法侧重于在最少的…