AI 开发者工作流程
Qualcomm Linux 中的 AI/ML 开发人员工作流程主要分为两个步骤: 步骤 1:
编译并优化模型
- 编译并优化来自第三方 AI 框架的模型,以便在 RUBIK Pi 3 上高效运行。例如,可以将 TensorFlow 模型导出为 TFLite 模型。
- 或者,使用硬件特定的定制来量化、细调性能和精确度。
步骤 2:
编译应用程序,使用优化后的模型在设备上运行推理
- 将 AI 模型集成到用例 pipeline 中。
- 或者使用安卓的 native sdk 调用 Qualcomm AI SDKs。
概述
开发人员可以从 ONNX、PyTorch、TensorFlow 或 TFLite 引入模型,并使用 Qualcomm AI SDK 在 Qualcomm AI 硬件 - HTP (NPU)、GPU、CPU 上高效运行这些模型。
AI 硬件
-
Qualcomm Kryo™ CPU- 一流的 CPU,具有高性能和卓越的能效。
-
Qualcomm Adreno GPU- 适合在需要平衡功耗与性能的情况下执行 AI 工作负载。AI 工作负载可以通过 OpenCL 内核进行加速。GPU 还可用于加速模型预处理/后处理。
-
Qualcomm Hexagon 张量处理器 (HTP)- 又称 NPU/DSP/HMX,适合以低功耗、高性能执行AI 工作负载。为优化性能,需要对预训练模型进行量化,使其达到支持的任一种精度。
AI 软件
AI 堆栈包含各种 SDK,以便利用 AI 硬件加速器的强大功能。开发人员可以使用自己选择的一种 SDK 来部署 AI 工作负载。预训练模型(TFLite 模型除外)在运行之前需要使用所选 SDK 将其转换为可执行格式。TFLite 模型可以使用 TFLite Delegate 直接运行。
- TFLite
TFLite 模型可以在使用以下 Delegate 进行加速的条件下在 Qualcomm 硬件本地执行。
Delegate | 加速 |
---|---|
AI Engine Direct Delegate (QNN Delegate) | CPU, GPU 和 HTP |
XNNPACK Delegate | CPU |
GPU Delegate | GPU |
- Qualcomm 神经网络处理引擎 (SNPE) SDK
Qualcomm 神经网络处理引擎 (SNPE) 是一种用于执行深度神经网络的软件加速 runtime。SNPE 提供相关工具来对神经网络进行转换、量化,并在 CPU、GPU 和 HTP 等硬件加速器上对其进行加速。
- Qualcomm AI Engine Direct (QNN)
Qualcomm AI Engine Direct 是 Qualcomm 芯片组和 AI 加速核心中适用于 AI/ML 用例场景的一种软件架构。该架构旨在提供统一的 API,模块和可扩展的预加速库,从而基于这种可重用的结构打造全栈 AI 解决方案。它可为 Qualcomm 神经网络处理 SDK、TFLite AI Engine Direct Delegate 等 runtime 提供支持。
编译并优化模型
用户可以采用两种可用途径中的任一种来编译和优化他们的模型。
-
AI Hub
-
AI 软件堆栈
AI Hub
为了在 Qualcomm AI 硬件上快速构建模型原型,AI Hub 提供了一种方法,帮助开发人员针对视觉、音频和语音用例在设备上对机器学习模型进行优化、验证和部署。
有关设置和入门指南,可参见 AI Hub 文档。
环境配置
- 配置 Python 环境。
在计算机上安装 miniconda.
Windows:安装完成后,通过 Start 菜单打开 Anaconda 提示符窗口。
macOS/Linux:安装完成后,打开一个新的 shell 窗口。
为 Qualcomm(®) AI Hub 设置 Python 虚拟环境:
source <path>/miniconda3/bin/activate
conda create python=3.8 -n qai_hub
conda activate qai_hub
- 安装 AI Hub Python 客户端。
pip3 install qai-hub
pip3 install "qai-hub[torch]"
- 登录 AI Hub。
前往 AI Hub 并使用 Qualcomm ID 登录,查看所创建作业的相关信息。
登录后,导航至 Account* *> Settings > API Token。此时应提供一个可用于配置客户端的 API 令牌。
- 在终端,使用以下命令通过 API 令牌配置客户端。
qai-hub configure --api_token <INSERT_API_TOKEN>
AI Hub 工作流程
使用预优化模型
导航到 AI Hub Model Zoo,访问适用于 RUBIK Pi 3 的模型.
点击下载按钮后开始模型下载。下载的模型已经过预先优化,可直接开发用户自己的应用程序。
引入用户自己的模型
-
选择 PyTorch 或 Onnx 格式的预训练模型。
-
使用 Python API 将模型提交至 AI Hub 以进行编译或优化。
提交编译作业时,必须选择设备或芯片组以及目标 runtime 才能编译模型。RUBIK Pi 3 支持 TFLite runtime。
芯片组 | Runtime | CPU | GPU | HTP |
---|---|---|---|---|
QCS6490 | TFLite | INT8,FP16, FP32 | FP16,FP32 | INT8,INT16 |
提交后,AI Hub 会为该作业生成一个唯一的 ID。用户可以使用此作业 ID 查看作业详情。
- AI Hub 会根据选择的设备和 runtime 对模型进行优化。
或者,也可以提交作业以在源自设备集群且已经过配置的实际设备上对优化模型进行分析或推理(使用 Python API)。
-
性能分析:在已配置的设备上对模型进行基准测试并提供统计数据,包括层级的平均推理时间、runtime 配置等。
-
推理:在推理作业执行过程中,使用优化模型基于提交的数据进行推理,即在已配置的设备上运行该模型。
- 提交的每项作业都可以在 AI Hub 门户中进行审核。提交编译作业时,将提供优化模型的可下载链接。然后,该优化模型可以部署在 RUBIK Pi 3 等本地开发设备上。
下方所示为从 AI Hub documentation 中获取的所述工作流程的示例。在本示例中,会将源自 PyTorch 的MobileNet V2 预训练模型上传到 AI Hub,并编译为优化的 TFLite 模型以便在 RUBIK Pi 3上运行。
import qai_hub as hub
import torch
from torchvision.models import mobilenet_v2
import numpy as np
# Using pre-trained MobileNet
torch_model = mobilenet_v2(pretrained=True)
torch_model.eval()
# Trace model (for on-device deployment)
input_shape = (1, 3, 224, 224)
example_input = torch.rand(input_shape)
traced_torch_model = torch.jit.trace(torch_model, example_input)
# Compile and optimize the model for a specific device
compile_job = hub.submit_compile_job(
model=traced_torch_model,
device=hub.Device("QCS6490 (Proxy)"),
input_specs=dict(image=input_shape),
#compile_options="--target_runtime tflite",
)
# Profiling Job
profile_job = hub.submit_profile_job(
model=compile_job.get_target_model(),
device=hub.Device("QCS6490 (Proxy)"),
)
sample = np.random.random((1, 3, 224, 224)).astype(np.float32)
# Inference Job
inference_job = hub.submit_inference_job(
model=compile_job.get_target_model(),
device=hub.Device("QCS6490 (Proxy)"),
inputs=dict(image=[sample]),
)
# Download model
compile_job.download_target_model(filename="/tmp/mobilenetv2.tflite")
要停用先前激活的 qai_hub 环境,可使用以下命令。
conda deactivate
模型下载完毕后,即可直接开发用户自己的应用程序。
有关 AI Hub 工作流程和 API 的更多详细信息,可参见 AI Hub Documentation.
TFLite
TensorFlow Lite (TFLite) 是一个用于在设备上进行推理的开源深度学习框架。TFLite 可优化模型的延迟、模型尺寸、功耗等,帮助开发人员在移动、嵌入式和边缘平台上运行他们的模型。Qualcomm 支持通过下方列出的 TFLite Delegate 在 Qualcomm Linux 硬件本地执行 TFLite 模型。
Delegate | 加速 |
---|---|
AI Engine Direct Delegate (QNN Delegate) | CPU, GPU,HTP |
XNNPack Delegate | CPU |
GPU Delegate | GPU |
参考指南 | API 手册 |
---|---|
Reference Guide | C/C++ |
Qualcomm 神经网络处理引擎
Qualcomm 神经网络处理引擎(又称 Snapdragon 神经网络处理引擎或 SNPE)是一款一站式解决方案 SDK,用于移植 ML 模型以在 Qualcomm 硬件加速器上运 行。SNPE 提供相关工具对在PyTorch 和 TensorFlow 中经过训练的模型进行转换和量化,并提供 runtime 以便在 CPU、GPU 和 HTP 上执行这些模型。想要了解有关 SNPE SDK 的详细信息,可点击此处。
环境配置 | 定制 | Run Inference | API Reference |
---|---|---|---|
安装 Qualcomm 神经网络处理引擎 SDK | 模型转换 | 模型部署 | C/C++ |
安装 Qualcomm 神经网络处理引擎 SDK
Qualcomm 神经网络处理引擎 SDK 需要在 Ubuntu 22.04 主机上运行。
如果主机运行的是 Windows 或 macOS 操作系统软件,须按照此处提供的步骤安装虚拟机。后续步骤必须在运行 Ubuntu 22.04 LTS 的虚拟机中执行。
Qualcomm 神经网络处理 SDK 工作流程已通过采用以下配置并运行于物理主机或虚拟机上的 Ubuntu 22.04 进行了验证。
不支持在基于 Arm 架构的 macOS 操作系统中的 VM 内运行 Ubuntu 22.04。
下载方式 | 前提条件 | 可用版本 |
---|---|---|
直接下载 | 无需任何前提条件即可下载 | v2.22.6(SDK 每季度更新一次) |
Qualcomm Package Manager | 需要拥有有效的 Qualcomm ID。Qualcomm Package Manager 工具。 | SDK 每月更新一次 |
直接下载
Qualcomm 神经网络处理引擎 SDK 可从此处直接下载。下载后,提取或解压 SDK。
上述链接提供的 SDK 版本每季度更新一次。
unzip 2.22.6.240515.zip
cd qairt/2.22.6.240515/
export SNPE_ROOT=`pwd`
Qualcomm Package Manager
Qualcomm 神经网络处理引擎 SDK 也可以通过 Qualcomm Package Manager (QPM) 下载。本部分将演示如何使用 QPM 下载 Qualcomm 神经网络处理引擎 SDK。
如需使用 Qualcomm Package Manager 下载 Qualcomm 神经网络处理 SDK,应确保用户已经注册了 Qualcomm ID。如果用户没有 Qualcomm ID,系统将提示其注册。然后,按照下方说明下载并安装 SDK。
-
前往 Qualcomm Package Manager 并使用 Qualcomm ID 登录。
-
导航至 Tools 选项卡并在左侧窗格中搜索 "AI Stack"。在筛选结果中,点击 Qualcomm® AI Stack 旁边的箭头,展开可用的 AI 软件 SDK 列表,然后从列表中选择 Qualcomm Neural Processing SDK。
- 点击 Qualcomm Neural Processing SDK,导航至下一页。从下拉列表中选择 Linux 和 Version 2.22.6.2405155,然后点击 Download 下载 Qualcomm 神经网络处理 SDK 安装程序。
这些步骤基于版本 2.22.6.240515。
如果使用 Qualcomm Package Manager 桌面工具,Extract 将取代下载按钮。点击该按钮会自动安装 SNPE SDK。
-
安装使用 QPM CLI 工具下载的安装程序 (.qik)。
- 使用 QPM CLI 登录。
qpm-cli --login <username>
qpm-cli --license-activate qualcomm_neural_processing_sdk
qpm-cli --extract <path to downloaded .qik file>
Qualcomm 神经网络处理 SDK 将安装在以下路径:
/opt/qcom/aistack/qairt/2.22.6.240515