一、这篇文章讲了什么
1.1 背景:终端侧 AI 的工具链化元年
终端侧 AI 部署长期处于「各做各的」状态。Google 有 AI Edge、Apple 有 Core ML、MediaTek 有 Neuron——每家的模型格式、量化工具、运行时都不相通,开发者把一个模型从 PyTorch 切到 TFLite 再切到 QNN,光是适配就能消耗两周。
Qualcomm AI Hub 在这个背景下登场——它不是一个孤立的推理引擎,而是一个 端到端的终端 AI 部署平台,覆盖模型发现→编译→量化→Profile→真机验证→导出整条链路。核心吸引力有三点:
- 300+ 预优化模型:覆盖分类、检测、分割、LLM 等主流任务,所有模型已在 Snapdragon 平台上验证
- 云端真机集群:50+ 款真实 Qualcomm 设备托管在云端,无需采购硬件即可做 Profile 和推理验证
- 多运行时输出:一次编译,同时输出 TFLite、ONNX Runtime、Qualcomm AI Runtime(QNN)三种格式
2026 年 6 月 5 日,MarkTechPost 发布了一份基于 Colab 的 实操教程,用 MobileNet-V2(分类)和 YOLOv7(检测)两条线,完整演示了从模型加载到真机部署的全流程。本文以这份教程为蓝本,结合 Qualcomm AI Hub 官方文档,做一次系统的技术解读与实践复盘。
1.2 教程覆盖范围
| 模块 | 核心内容 | 关键技术点 |
|---|---|---|
| 环境准备 | qai_hub_models 安装与依赖 | Colab/Nox 兼容 |
| 模型发现 | 枚举全部可用模型 | pkgutil + qai_hub_models.models |
| 分类推理(本地) | MobileNet-V2 加载与推理 | NHWC → NCHW 形状转换 |
| 分类推理(真实图片) | 下载图片 → 预处理 → Top-5 输出 | TorchVision 预处理管线 |
| CLI Demo | 官方命令行 Demo | 一行命令复现标准结果 |
| 目标检测 | YOLOv7 扩展安装与运行 | 可视化检测结果 |
| 云端真机部署(可选) | 编译 → Profile → 远程推理 | Workbench API Token |
二、核心能力一览
Qualcomm AI Hub 平台由三大组件构成:
2.1 平台架构
PyTorch / ONNX 模型
│
▼
┌─────────────────────────────┐
│ Qualcomm AI Hub │
│ │
│ Models ── 模型市场 300+ │
│ Workbench ── 编译+量化 │
│ Cloud Devices ── 50+ 真机 │
└─────────────────────────────┘
│
▼
TFLite / ONNX Runtime / QNN ← 三种输出格式
2.2 能力表格
| 能力维度 | 详情 |
|---|---|
| 模型市场 | 300+ 开源模型,Qwen3-4B、MobileNet 系列、YOLO 系列等,已针对 Snapdragon 优化 |
| 模型来源 | 高通自研 + Mistral AI、IBM Watsonx、Preferred Networks 等生态伙伴 |
| 目标平台 | 手机(Snapdragon Mobile)、笔记本(Snapdragon X Elite)、IoT、汽车 |
| 输入格式 | PyTorch(torch.jit.trace)、ONNX |
| 输出格式 | TFLite(LiteRT)、ONNX Runtime、Qualcomm AI Runtime(QNN) |
| 云设备测试 | Samsung Galaxy S24、小米 14、Snapdragon X Elite 等 50+ 款真机 |
| API 接入 | qai_hub Python SDK(云端 API)、qai_hub_models Python 包(本地模型库) |
| 开发者门槛 | 免费注册,Workbench API Token 即可使用云端功能 |
2.3 与大厂方案的对比(简略)
| 对比维度 | Qualcomm AI Hub | Google AI Edge | Apple Core ML |
|---|---|---|---|
| 目标硬件 | 高通全系芯片 | Google Tensor / 通用 | Apple 全系芯片 |
| 模型数量 | 300+ 预优化 | 部分 + BYOM | 部分 + BYOM |
| 云端真机 | 50+ 设备远程测试 | 有限 | 需 Xcode |
| 开放度 | 开源 SDK + 商业许可 | 开源 | 仅 Apple 生态 |
| 输出格式 | TFLite/ONNX/QNN | TFLite | .mlpackage |
三、实操:分类任务(MobileNet-V2)
3.1 环境准备
教程基于 Colab 运行,第一步是安装 qai_hub_models 包并导入依赖:
import subprocess, sys, os, glob, textwrap, traceback
import numpy as np, torch
from PIL import Image
import matplotlib.pyplot as plt
def pip_install(*pkgs):
subprocess.run([sys.executable, "-m", "pip", "install", "-q", *pkgs], check=True)
pip_install("qai_hub_models")
OUT_DIR = "/content/qaihm_out"
os.makedirs(OUT_DIR, exist_ok=True)
torch.set_grad_enabled(False)
关键点:用 pip_install 封装 subprocess.run 而非 !pip,保证在 Colab 和本地环境中都能可靠安装。torch.set_grad_enabled(False) 禁用梯度追踪——推理阶段不需要它。
3.2 NHWC → NCHW 转换(极易踩坑)
在进入推理之前,必须先理解一个形状问题。Qualcomm AI Hub 模型的输入规格(get_input_spec())有时会返回 NHWC 格式([batch, height, width, channels]),但标准 PyTorch 模型期望 NCHW 格式([batch, channels, height, width])。如果不做转换,张量形状会直接报错。
定义一个统一转换函数:
def to_nchw(value):
"""Convert any input tensor to NCHW format expected by the model."""
arr = value[0] if isinstance(value, (list, tuple)) else value
t = torch.from_numpy(np.asarray(arr, dtype=np.float32))
if t.ndim == 3:
t = t.unsqueeze(0)
if t.ndim == 4 and t.shape[1] != 3 and t.shape[-1] == 3:
t = t.permute(0, 3, 1, 2).contiguous()
return t
逻辑拆解:
- 如果输入是
list/tuple,取第一个元素 - 3 维张量(如单张图片
[H, W, C])→ 加 batch 维度[1, H, W, C] - 4 维张量的最后一个维度是 3(通道)→ 转置为
[N, 3, H, W]
3.3 模型发现与加载
Qualcomm AI Hub 的模型集合通过 Python 包级枚举获取。qai_hub_models.models 包含所有可用模型的可导入模块:
import pkgutil
import qai_hub_models.models as _m
model_ids = sorted(
n for _, n, p in pkgutil.iter_modules(_m.__path__)
if p and not n.startswith("_")
)
print(f">>> {len(model_ids)} models available. First 40:\n")
print(textwrap.fill(", ".join(model_ids[:40]), 100), "\n")
这会输出类似以下的内容(实际数量视版本而定):
>>> 300+ models available. First 40:
mobilenet_v2, yolov7, resnet50, efficientnet_b0, ...(完整列表以实际为准)
然后加载 MobileNet-V2 并查看输入规格:
from qai_hub_models.models.mobilenet_v2 import Model as MobileNetV2
model = MobileNetV2.from_pretrained().eval()
spec = model.get_input_spec()
input_name = list(spec.keys())[0]
print(">>> Input:", input_name, spec[input_name].shape, spec[input_name].dtype)
输出预期(具体形状以实际为准):
>>> Input: image [1, 224, 224, 3] <dtype: float32>
⚠️ 注意:这里输入规格是
[1, 224, 224, 3](NHWC),后续推理时需要用to_nchw()转换。
准备 ImageNet 标签与 Top-5 函数:
from torchvision.models import MobileNet_V2_Weights
IMAGENET_CLASSES = MobileNet_V2_Weights.IMAGENET1K_V1.meta["categories"]
def top5(logits):
if logits.ndim == 1:
logits = logits.unsqueeze(0)
probs = torch.softmax(logits, dim=1)[0]
conf, idx = probs.topk(5)
return [(IMAGENET_CLASSES[i], float(c)) for c, i in zip(conf, idx)]
3.4 本地推理:内置样本输入
先用模型自带的 sample_inputs() 做快速测试:
sample = model.sample_inputs()
x = to_nchw(sample[input_name])
print(">>> fed tensor shape:", tuple(x.shape))
print("\n>>> Top-5 for the built-in sample input:")
for label, conf in top5(model(x)):
print(f" {conf:6.2%} {label}")
这一步确认模型能正常加载和推理。如果形状不匹配,问题大概率出在 to_nchw() 没有正确触发——检查张量维度后再排查。
3.5 本地推理:真实图片
下载一张真实图片,用标准 TorchVision 预处理管线处理后推理:
from torchvision import transforms
preprocess = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
])
img = None
try:
import urllib.request
p = os.path.join(OUT_DIR, "input.jpg")
urllib.request.urlretrieve(
"https://raw.githubusercontent.com/pytorch/hub/master/images/dog.jpg",
p
)
img = Image.open(p).convert("RGB")
except Exception as e:
print(">>> photo download skipped:", e)
if img is not None:
preds = top5(model(preprocess(img).unsqueeze(0)))
print("\n>>> Top-5 for the downloaded photo:")
for label, conf in preds:
print(f" {conf:6.2%} {label}")
plt.figure(figsize=(5, 5))
plt.imshow(img)
plt.axis("off")
plt.title(f"{preds[0][0]} ({preds[0][1]:.1%})")
plt.show()
预处理的顺序:Resize 到 256 → CenterCrop 到 224 → ToTensor(自动转为 [C, H, W] 并归一化到 [0,1])。unsqueeze(0) 增加 batch 维度。
3.6 官方 CLI Demo
Qualcomm AI Hub 为每个模型提供了命令行 Demo,可以作为可复现的参考基准:
def run_demo(module, extra=None, timeout=900):
cmd = [sys.executable, "-m", module, "--eval-mode", "fp",
"--output-dir", OUT_DIR] + (extra or [])
print(f"\n>>> {' '.join(cmd)}")
try:
r = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout)
print("\n".join((r.stdout + r.stderr).strip().splitlines()[-25:]))
except Exception as e:
print(">>> demo skipped:", e)
run_demo("qai_hub_models.models.mobilenet_v2.demo")
--eval-mode fp 指定全精度推理(不做量化),--output-dir 指定结果输出目录。Demo 的优点是可复现——任何人跑同一条命令,应该得到相同的输出。
四、实操:目标检测任务(YOLOv7)
4.1 安装 YOLOv7 扩展
YOLOv7 的依赖不包含在基础包中,需要单独安装:
pip_install("qai_hub_models[yolov7]")
4.2 运行检测 Demo
run_demo("qai_hub_models.models.yolov7.demo")
4.3 可视化检测结果
运行完成后,从输出目录中找到最新生成的图片,可视化检测结果:
imgs = sorted(
glob.glob(OUT_DIR + "/*.png") + glob.glob(OUT_DIR + "/*.jpg"),
key=os.path.getmtime
)
if imgs:
plt.figure(figsize=(9, 9))
plt.imshow(Image.open(imgs[-1]).convert("RGB"))
plt.axis("off")
plt.title("YOLOv7 detections")
plt.show()
else:
print(">>> no output image found (results may have printed instead).")
YOLOv7 的输出是一张标注了边界框和置信度的图片,框内显示类别标签和置信度分数。
💡 提示:检测结果可能直接以文本打印而非图片输出,取决于 Demo 版本。如果
imgs列表为空,检查终端输出中的日志信息。
五、进阶:云端真机部署
这一节是 Qualcomm AI Hub 最具价值的部分——在云端编译模型,在真实的 Snapdragon 设备上做 Profile 和推理验证,无需购买任何硬件。
5.1 Workbench 注册与 API Token
这个过程在首次使用云端功能时完成:
- 访问 workbench.aihub.qualcomm.com 注册账号
- 生成 API Token
- 在 Colab 中配置 Token:
qai-hub configure --api_token YOUR_TOKEN
代码中通过 import qai_hub 自动检测已配置的 Token。
5.2 编译:PyTorch → TFLite
先获取可用设备列表,然后将 PyTorch 模型编译为目标运行时(此处以 TFLite 为例):
try:
import qai_hub as hub
devices = hub.get_devices()
print(f"\n>>> Authenticated. {len(devices)} cloud devices available.")
device = hub.Device("Samsung Galaxy S24 (Family)")
sample = model.sample_inputs()
nchw = to_nchw(sample[input_name])
traced = torch.jit.trace(model, [nchw])
cloud_inputs = {input_name: [nchw.numpy()]}
cj = hub.submit_compile_job(
model=traced,
device=device,
input_specs=model.get_input_spec(),
options="--target_runtime tflite"
)
target = cj.get_target_model()
print(">>> compiled:", cj.url)
核心步骤解析:
| 步骤 | 说明 |
|---|---|
torch.jit.trace | 将 PyTorch 模型导出为 TorchScript 计算图 |
hub.submit_compile_job | 提交编译任务到云端,指定目标运行时为 TFLite |
get_target_model | 获取编译产物(优化后的模型对象) |
--target_runtime tflite | 指定编译目标(可选 qnn、onnxruntime) |
5.3 云端 Profiling
Profile 是在真实设备上运行模型并测量性能指标的过程:
pj = hub.submit_profile_job(model=target, device=device)
print(">>> profiling:", pj.url)
返回的 Profile 报告包含:
- 推理延迟(单次推理耗时,毫秒级)
- 内存占用(峰值内存)
- 算子执行时间分布
- 量化前后的精度对比
5.4 远程推理验证
在真机上执行推理并下载结果:
ij = hub.submit_inference_job(model=target, device=device, inputs=cloud_inputs)
out = ij.download_output_data()
dev_logits = torch.from_numpy(np.asarray(list(out.values())[0][0]))
print(">>> Top-5 from the REAL device:")
for label, conf in top5(dev_logits):
print(f" {conf:6.2%} {label}")
target.download(os.path.join(OUT_DIR, "mobilenet_v2.tflite"))
print(">>> saved compiled .tflite to", OUT_DIR)
这一步的输出验证了 编译后的模型在真实 Snapdragon 设备上的推理结果与本地 PyTorch 推理结果一致。
5.5 完整的异常处理
由于 API Token 配置是可选的,教程提供了优雅的降级处理:
except Exception as e:
print("\n>>> Cloud (on-device) section skipped — no API token configured.")
print(" Get one at workbench.aihub.qualcomm.com, then:")
print(" !qai-hub configure --api_token YOUR_TOKEN")
print(" detail:", (str(e).splitlines() or [type(e).__name__])[0])
print("\n>>> Tutorial complete. Outputs in:", OUT_DIR)
六、能解决哪些问题
问题一:终端侧模型部署碎片化
现状:每款芯片有自己的推理引擎,开发者需要为不同平台维护多套部署管线。
解决方案:Qualcomm AI Hub 提供 统一入口——一次代码编写,编译输出 TFLite/ONNX Runtime/QNN 三种格式,覆盖高通所有目标平台。
问题二:模型选型困难
现状:开发者不知道哪些模型在终端上好用,需要逐一尝试、踩坑。
解决方案:300+ 预优化模型市场,每个模型已在高通设备上验证过性能指标,选型阶段即可参考 Profile 数据做决策。
问题三:真机测试门槛高
现状:采购几十款手机做兼容性测试,成本高、周期长、管理复杂。
解决方案:云端 50+ 款真实设备集群,按需租用,按次付费,从 Model-32(入门机)到 Galaxy S24(旗舰)到 Snapdragon X Elite(笔记本),覆盖完整设备谱系。
问题四:模型优化耗时
现状:量化、剪枝、算子融合等优化手段需要专家知识和大量手动调试。
解决方案:Workbench 自动完成编译和量化,一行代码提交 Profile 任务,从数据驱动的方式定位性能瓶颈。
七、对普通开发者的意义
7.1 降低终端 AI 的技术门槛
在 Qualcomm AI Hub 出现之前,一个具备 PyTorch 基础能力的工程师要想把模型部署到手机上,需要学习:
- Android NDK 和 JNI 接口
- TFLite / NNAPI / QNN 等底层运行时
- 模型量化(PTQ/QAT)的原理和工具
- 各厂商芯片的算子支持差异
现在,这些知识被 抽象成一套 Python SDK 和 CLI,核心流程缩减为四步:
安装 → 加载 → 编译 → 部署
每一步都有现成的 API 和 Demo 可以复用。
7.2 全流程打通
教程从「环境安装」到「真机推理」再到「模型导出」,端到端覆盖。开发者跑完一遍教程后,不仅学会了 MobileNet-V2 怎么部署,也掌握了替换为自己的业务模型的完整方法论:
- 自己的 PyTorch 分类模型 → 替换
model变量即可 - 自己的检测模型 → 替换
Model的 import 语句 - 自己的业务数据 → 替换预处理管线
7.3 为后续场景打基础
终端侧 AI 的趋势是从「单一模型」走向 Agent 化、多模态、实时推理。Qualcomm AI Hub 目前已经上架了 Qwen3-4B 这样的端侧 LLM。掌握了这套工具链,未来部署更复杂的 Agent 架构(如端侧 RAG、多模态理解)时会比从零起步的团队快好几个版本。
八、总结
Qualcomm AI Hub 提供了一站式终端 AI 部署平台。通过 qai_hub_models 模型市场和 qai_hub 云端 Workbench,开发者可以在一套工具链中完成模型发现 → 本地验证 → 云端编译 → 真机 Profile → 产线部署的全流程。
今天跑通 MobileNet-V2 的分类流程和 YOLOv7 的检测流程,最大的收获不是学会两个模型怎么用,而是 掌握了一套可复用的终端 AI 部署工作流——下次换成 ResNet、换成自己的开源模型、换成新的目标平台,过程都一样。
推荐学习路径
| 阶段 | 内容 | 预计耗时 |
|---|---|---|
| 入门 | 跑通本教程全部代码 | 1-2 小时 |
| 进阶 | 替换为自己的模型,做编译和 Profile | 1-2 天 |
| 深入 | 学习量化技术(PTQ/QAT)和性能优化 | 1-2 周 |
| 实战 | 将模型集成到 Android/iOS/Windows 应用 | 1-2 月 |
项目地址
| 资源 | 链接 |
|---|---|
| Qualcomm AI Hub 官网 | https://aihub.qualcomm.com/ |
| Official API Docs | https://docs.qualcomm.com/ |
参考资料
- MarkTechPost 原教程:A Hands-On Coding Tutorial on Qualcomm AI Hub Models for Classification, Object Detection, and Hardware-Aware Deployment. → https://www.marktechpost.com/2026/06/05/a-hands-on-coding-tutorial-on-qualcomm-ai-hub-models-for-classification-object-detection-and-hardware-aware-deployment/
- Qualcomm AI Hub 首页:The platform for on-device AI, with optimized open source and licensed models. → https://aihub.qualcomm.com/
- Qualcomm AI Hub Workbench:Cloud device testing and model compilation portal. → https://workbench.aihub.qualcomm.com/
- PyTorch MobileNet-V2 官方文档:TorchVision MobileNet-V2 model architecture and weights. → https://pytorch.org/vision/main/models/mobilenetv2.html
- YOLOv7 论文:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors. → https://arxiv.org/abs/2207.02696
文档信息
- 本文作者:zhupite
- 本文链接:https://zhupite.com/dev/ai/qualcomm-ai-hub-practical-tutorial.html
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)