发挥高通QNN执行提供程序GPU后端对于ONNX Runtime的潜力
发表于 2025-05-28 12:19:42

在生成式人工智能和深度学习技术不断发展的背景下,多样化的工作负载需要使用NPU、GPU和CPU,以便在边缘平台上实现最佳体验。高通技术公司不断增强我们的AI软件技术栈,以实现骁龙X Elite平台的最佳性能。

概述

当前ONNX Runtime支持高通® AI Engine Direct (QNN) 执行提供程序 (EP) NPU(高通HTP)或DirectML GPU堆栈。今天,我们很高兴正式发布具有高通Adreno GPU后端的ONNX Runtime高通® AI Engine Direct (QNN) 执行提供程序的预览版。

选择后端

在推理会话创建时间内,规定了有关ONNX Runtime高通 (ORT) QNN EP的后端选择。可以通过高通ORT QNN EP选项进行后端选择。除此之外,在客户端代码的使用方面,在HTP后端和GPU后端之间没有区别。

附图-1显示了高通ORT QNN GPU EP的工作流

# Create an ONNX Runtime session.
session = ort.InferenceSession(
    model_path,
    sess_options=options,
    providers=["QNNExecutionProvider"],
    provider_options=[{"backend_path": "QnnGpu.dll"}]
)

Python 代码 

std::unordered_map qnn_options;
qnn_options["backend_path"] = "QnnGpu.dll";
Ort::SessionOptions session_options;
session_options.AppendExecutionProvider("QNN", qnn_options);
Ort::Session session(env, model_path.c_str(), session_options);

C++ 代码

 

Adreno GPU上充分运行推理

如要检查模型图是否可以在Qualcomm ORT QNN EP的GPU后端上充分运行,您可以禁用CPU回退机制并使用Qualcomm ORT QNN EP运行模型。如果您的模型运行成功,则表明该模型可以在GPU后端充分运行。以下为进行该项操作的示例:

# (Optional) Enable configuration that raises an exception if
# the model can't be run entirely on the QNN backend.
options.add_session_config_entry("session.disable_cpu_ep_fallback", "1")

Python 代码

session_options.AddConfigEntry("session.disable_cpu_ep_fallback", "1");

C++ 代码

OpenCL驱动程序依赖项

GPU后端取决于系统上安装的OpenCL驱动程序。采用预览版本或后续版本的任何驱动程序都可以与2.33及以上版本的高通QNN SDK一起正确运行。

对于较低版本的驱动程序,可以在WCR中启用详细日志记录等级,以解决问题。以下为进行该项操作的示例:

qnn_options["log_severity_level"] = "0";

C++ 代码

# Set the logging level to Verbose for QnnGpu to work with older driver
ort.set_default_logger_severity(0)

Python 代码

支持的模型

GPU后端目前处于启用的预览阶段。以下模型在高通GPU上进行了验证:

  • resnet_50_fp16
  • resnet_50_fp32
  • google_vit_base_fp32
  • squeezenet1.0-7
  • mobilenetv2-7
  • emotion-ferplus-8
  • arcfaceresnet100-8
  • intel_bert_fp32
  • google_bert_fp32

其他模型可以在GPU上部分运行,其余部分将回退至CPU运行。

唯一后端选择

请注意,虽然EP的选择优先于子图执行,但高通ORT QNN EP后端是执行提供程序的唯一选择。这意味着这是一个“非此即彼”的选择。

如果为高通ORT QNN EP选择了HTP后端,则在同一会话中不能将GPU后端同时用于高通ORT QNN EP。

结论

我们希望收到关于ONNX Runtime QNN GPU后端的反馈,因为我们将继续启用更多模型,包括大型语言模型。

额外资源

ONNX Runtime网站

ONNX Runtime网站上的高能AI Engine Direct执行提供程序文档 

骁龙X Elite平台的升级版图形驱动程序博客

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

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

关于作者

约翰·保罗,高级主任工程师

阅读更多

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