文章介绍

2月26日,高通在2024年世界移动通信大会(MWC2024)上发布高通AI Hub, AI Hub 简化了AI 模型部署到边缘设备的过程。可以利用AI-hub云端托管 Qualcomm 设备上,在几分钟内完成模型的优化、验证和部署。本文以Pytorch版本的MobileNet模型为例子,介绍如何使用AI Hub。

更多关于Qualcomm AI Hub的入门指南,可以参考文档Getting started — qai-hub documentation

第一步. 安装环境

建议使用Miniconda来管理您的python版本和环境。

Installing Miniconda — Anaconda documentation

1. Python环境

在您的机器上安装miniconda。

Windows:安装完成后,从「开始」菜单打开Anaconda Prompt。

macOS/Linux:安装完成后,打开一个新的shell窗口。

为QualcommAI Hub设置一个环境:

conda create python=3.8 -n qai_hub

conda activate qai_hub

2. 安装qai-hub客户端

pip3 install qai-hub

3. 登录

登陆到 QualcommAI Hub

Home – Qualcomm AI Hub

使用您的高通ID登录,登录后导航Account -> Settings -> API Token。生成API token后进入下一步配置您的客户端。

4. 配置API Token

接下来,在终端中使用以下命令使用API令牌配置客户端:

qai-hub configure –api_token INSERT_API_TOKEN

INSERT_API_TOKEN 是你在第3步中生成的token

您可以通过获取可用设备的列表来检查API令牌是否正确安装。为此,您可以在Python终端中键入以下内容:

import qai_hub as hub

hub.get_devices()

第二步. 模型编译部署(PyTorch)

设置好QualcommAI Hub环境后,我们演示如何模型给到AI-hub托管的云端设备,完成模型的编译与优化。

首先,安装此示例的依赖项:

pip3 install “qai-hub[torch]”

注意:如果任何代码段因API身份验证错误而失败,则表示您没有安装有效的API Token。请参阅安装说明以了解如何设置。

如果任何代码段因SSL:CERTIFICATE_VERIFY_FAILED错误而失败,则安装了SSL拦截和流量检查工具。请向您的IT部门咨询如何为Python pip和Python请求库设置证书的说明。

提交MobileNet v2网络的性能分析:

from typing import Tuple

import torch

import torchvision

import qai_hub as hub

# Using pre-trained MobileNet

torch_model = torchvision.models.mobilenet_v2(pretrained=True)

torch_model.eval()

# Trace model

input_shape: Tuple[int, …] = (1, 3, 224, 224)

example_input = torch.rand(input_shape)

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

# Profile model on a specific device

compile_job, profile_job = hub.submit_compile_and_profile_jobs(

pt_model,

name=”MyMobileNet”,

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

input_specs=dict(image=input_shape),

)

这将提交一个编译工作,然后提交一个分析工作,打印这两个工作的URL。可以在

https://app.aihub.qualcomm.com/jobs/ 上查看您的所有作业的结果。

也可以通过编程方式查询工作的状态:

status = profile_job.get_status()

print(status)

您可以使用下面的代码段访问工作的结果。主要有三个部分

Profile:JSON格式的概要文件的结果。

Target Model:已优化的模型可供部署。

Results:包含所有工件(包括日志)的文件夹。

请注意,这些正在阻止等待工作完成的API调用:

#将配置文件结果下载为JSON(blocking call)

profile = profile_job.download_profile()

print(profile)

#下载优化模型(blocking call)

model = profile_job.model.download()

print(model)

#将结果下载到当前目录(blocking call)

profile_job.download_results(“.”)

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