采用骁龙 X 系列 NPU 的智能路由:开发者视角
发表于 2025-08-21 15:52:01

20多年来,Teknikos始终致力于利用各种新兴技术解决实际业务问题,从而为从《财富》100强巨头到中型创新企业在内的前瞻性公司提供支持。本公司专注于触控计算和AI领域,所开发的软件通过移动应用程序、企业级解决方案和沉浸式体验来改变客户和员工的参与度。

2025年5月,本人参加了微软公司在墨西哥城举办的一场以混合AI为核心的技术峰会 – 即设备端AI和云端AI的协调运作。在此次活动中,我设计并主持了一场实践研讨会,展示了开发者如何使用微软Surface设备内置的骁龙X系列NPU来加速实现真实的AI场景。

您可以借鉴本文中的这一用例,即刻开始在骁龙X系列NPU上运行您自己的混合AI应用程序。

为什么骁龙X系列NPUWindows开发者非常重要

骁龙X系列处理器正在改变Windows个人电脑的AI开发生态,其专用的高通Hexagon神经处理单元(NPU)可实现高达45 TOPS的AI算力。利用这类NPU,开发者可以构建响应性强、注重隐私的应用程序,无缝融合云和边缘AI – 同时不会影响性能或用户体验。

骁龙X Elite和骁龙X Plus平台具有专用的NPU,与传统的CPU/GPU AI执行程序相比,具有很大的优势:

NPU性能和效率:在每瓦特TOPS方面的领先者

开发者支持:

  • 原生Windows机器学习(Windows ML)框架支持
  • ONNX运行时与QNN执行提供程序集成
  • 无缝Visual Studio开发工作流
  • WinUI与Python兼容

用例:带有动态路由的混合AI聊天机器人

我们的目标是展示如何在边云协同的环境中部署相同的ONNX模型,同时通过高通技术公司的 QNN执行提供程序(QNN EP)利用强大的板载NPU,以提供低延迟、隐私意识强、弹性强的人工智能体验。

我们构建了一个演示版的聊天机器人,其功能类似于内部服务台助理。该聊天机器人首先使用零样本分类模型对用户消息进行意图识别(即:该信息针对哪个部门),然后使用语言模型生成相关回复,该语言模型被设定为模仿该部门某位员工的口吻进行应答。

分类任务和语言生成均设计为在云端或设备端运行,并且不改变核心应用程序逻辑。

针对分类任务,我们采用了基于Hugging Face平台微调的DeBERTa模型,并针对ONNX格式进行了优化,在语言生成环节,应用可动态切换Azure云端的GPT-4o-mini与专为NPU设计的轻量化设备端语言模型Phi Silica。。

关键在于,该意图分类模型通过QNN执行引擎(QNN EP)在设备端实现加速,充分利用骁龙X系列平台的NPU推理能力。这使得聊天机器人即使在离线或网络受限环境下,仍能实现亚秒级的意图分类响应。

Hugging FaceNPU加速

本实验室向参与者介绍了:

  • 使用基于python的工具将Hugging Face transformer模型转换为ONNX
  • 使用QNN执行提供程序在设备端运行ONNX模型,以利用NPU
  • 将相同的模型部署到Azure机器学习上,以进行云端比较

Phi Silica语言模型专为NPU架构设计,通过.NET平台调用ONNX Runtime启用NPU加速仅需简单配置,只需要以下几行代码(来自可下载源文件中的LocalClassifierService.cs):

            var sessionOptions = new SessionOptions();
            Dictionary<string, string> options = new()
                {
                    { "backend_path", "QnnHtp.dll" }
                };
            sessionOptions.AppendExecutionProvider("QNN");
            _inferenceSession = new InferenceSession(modelFile, sessionOptions);

 

请注意,使用Phi Silica时有一些额外要求,其文档中具体说明了这些要求。虽然不需要高通技术公司提供额外帮助,但需要牢记的是,如果提供的模型与NPU用途不兼容,ONNX运行时可能会悄无声息地退回到CPU执行。您可能需要使用优化和量化技术进一步调整您的模型。

以下为使用QNN执行提供程序进行本地运行的Python推理代码示例(来自_GOODIES INSIDE文件夹中使用可下载源代码的Lab.ipynb ):

import onnxruntime
import numpy as np
import torch
import gc
from transformers import AutoTokenizer

# Parameters
text = "How many calories are in your hamburger?"
candidate_labels = ["sales", "customer support", "technical support", "accounting", "marketing", "shipping and orders"]
model_path = r"..\AImodels\zero_shot_classifier.onnx"
tokenizer_name = "MoritzLaurer/deberta-v3-large-zeroshot-v1"

# Load tokenizer and model
tokenizer = AutoTokenizer.from_pretrained(tokenizer_name)

# Use the QNN (aka Qualcomm AI Engine Direct) execution provider
options = onnxruntime.SessionOptions()
session = onnxruntime.InferenceSession(model_path, sess_options=options, providers=["QNNExecutionProvider"], provider_options=[{"backend_path":"QnnHtp.dll"}])

# Create hypotheses
template = "This example is {}."
hypotheses = [template.format(label) for label in candidate_labels]

# Tokenize
encoded = tokenizer(
    [text] * len(candidate_labels),
    hypotheses,
    return_tensors="np",
    truncation=True,
    padding=True
)

# Run ONNX model
logits = session.run(
    None,
    {
        "input_ids": encoded["input_ids"],
        "attention_mask": encoded["attention_mask"],
    }
)[0]

del session

# Use entailment scores (index 0) and normalize with softmax
entailment_scores = logits[:, 0]
probs = torch.softmax(torch.from_numpy(entailment_scores), dim=0).numpy()

# Zip labels and scores
results = sorted(zip(candidate_labels, probs), key=lambda x: x[1], reverse=True)

# Display
for label, score in results:
    print(f"{label}: {score:.4f}")


gc.collect()

 

具有评估器的智能AI路由

为了完善实验,我们引入了评估器 – 即在运行时条件(例如:连接性、隐私或设备功能)的基础上动态选择使用云端还是设备端AI的逻辑。

在我们的Windows桌面应用程序(使用WinUI3构建)中,我们使用了两种评估器:

  • 连接性:如果无法获得云端点或速度缓慢,则退回到设备端推理
  • 隐私:如果检测到敏感模式(例如:账号),则将数据保存在本地

C#版本实现(来自可下载源文件中的 LocalClassifierService.cs)与Python示例保持架构一致,同样使用QNN执行提供程序进行推理会话,以确保硬件加速AI在设备端的执行。

            var scores = new List<float>();

            foreach (var label in labels)
            {
                var (inputIds, attentionMask) = Tokenize(input, label);

                var inputs = new List<NamedOnnxValue>
                {
                    NamedOnnxValue.CreateFromTensor("input_ids", new DenseTensor<long>(inputIds, new[] { 1, inputIds.Length })),
                    NamedOnnxValue.CreateFromTensor("attention_mask", new DenseTensor<long>(attentionMask, new[] { 1, attentionMask.Length }))
                };

                using IDisposableReadOnlyCollection<DisposableNamedOnnxValue> results = _inferenceSession.Run(inputs);
                var logits = results.First().AsEnumerable<float>().ToArray();

                scores.Add(logits[0]);

            }

            // Softmax (scores --> relative probaibilties) across all entailment scores
            float max = scores.Max(); // for numerical stability
            float[] exp = scores.Select(s => MathF.Exp(s - max)).ToArray();
            float sum = exp.Sum();
            float[] probs = exp.Select(e => e / sum).ToArray();

            // Final labeled results
            var resultsWithLabels = labels.Zip(probs, (label, prob) => (label, prob))
                                          .OrderByDescending(x => x.prob)
                                          .ToList();

            // Sort and display
            var sorted = resultsWithLabels.OrderByDescending(r => r.prob);

            return sorted.ToList();

 

结果与性能优点

在会议收尾时,我们以一次现场演示展示了应用程序如何在骁龙X系列平台的NPU支持下,在真实场景的基础上实施云和边缘执行之间动态切换。反馈结果很明确:混合AI时代已经到来,设备端加速技术正推动响应迅捷、隐私安全且高性价比的AI应用落地。

通过对比ONNX模型在NPU加速与云端运行的基准测试数据,参与者亲眼目睹了设备端NPU运算在延迟和能效方面的显著优势。下文显示的应用程序日志摘录说明了这些优点。

附图1:混合AI聊天机器人 – 应用程序日志

在云端运行时,评估器在:40.704开始,并在:42.672生成Azure OpenAI响应 – 大约2秒的执行时间。在本地设备端运行时,评估器在:53.486开始,并在:53.680生成Phi Silica响应 – 略少于0.2秒的执行时间。

In other words, the chatbot runs about ten times faster on the device than in the cloud.

换句话说,聊天机器人在设备端的运行速度比在云端快十倍。

轮到你了

您可以在以下网址:https://github.com/jonathankhootek/HelpChatLab_public获得完整的源代码、Jupyter笔记本、和幻灯片。如要获取安装说明,请务必查看README.md

运行完整的应用程序需要一个具有大型语言模型部署的Azure订阅账户和一个托管ONNX模型的Azure机器学习工作空间;但是,您可以通过运行Lab.ipynb笔记本的方式立即开始进行。Lab.ipynb笔记本引导您在骁龙X系列平台的NPU上生成和执行ONNX模型 – 无需进行云端设置。您也可以打开任务管理器实时监测NPU运行状态。

您可以立即动手尝试,看看通过NPU加速将真正的AI工作负载带到边缘是多么容易。

无论您是在构建注重隐私的应用程序,构建支持离线使用的工具,还是只是想降低推理成本,现在正是开始探索混合AI的最佳时机。

Windows AI开发的未来

骁龙X系列平台代表了Windows AI开发的范式转变。通过将数据中心级别的AI性能直接赋能PC终端,使开发者可以构建响应更快、私密性更高、比传统的纯云端方法更具成本效益的应用程序。

强大的NPU硬件、成熟的开发工具和无缝的Windows集成组合为AI驱动的Windows应用程序创造了前所未有的机会。无论您是在构建产能工具、创意应用程序还是企业解决方案,骁龙X系列平台的NPU都能为下一代AI体验提供性能基础。

您是否已经在尝试高通工具?我们很想了解您目前的工作内容。请加入高通开发者Discord社区,分享您的进展,提出问题,并与其他开发者建立联系。

在所发布内容中表达的观点仅为原作者的个人观点,并不代表高通技术公司或其子公司(以下简称为“高通技术公司”)的观点。所提供的内容仅供参考之用,而并不意味着高通技术公司或任何其他方的赞同或表述。本网站同样可以提供非高通技术公司网站和资源的链接或参考。高通技术公司对于可能通过本网站引用、访问、或链接的任何非高通技术公司网站或第三方资源并没有做出任何类型的任何声明、保证、或其他承诺。

骁龙和高通品牌产品均为高通技术公司和/或其子公司的产品。

关于作者

乔纳森·邱,Teknikos公司首席技术官

阅读更多

CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
微博关注
【免责声明:CSDN本栏目发布信息,目的在于传播更多信息,丰富网络文化,稿件仅代表作者个人观点,与CSDN无关。其原创性以及文中陈述文字和文字内容未经本网证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本网不做任何保证或者承诺,请读者仅作参考,并请自行核实相关内容。您若对该稿件有任何怀疑或质疑,请立即与CSDN联系,我们将迅速给您回应并做处理。】