前面介绍了ONNX(Open Neural Network Exchange,开发神经网络交换),一种用于在各大神经网络平台中进行交换的标准和模型规范, 是原Facebook公司(现名Meta)和微软在2017年共同发布的一种与环境和平台无关的标准模型格式, 以便于让AI 模型(model)可以在不同框架之间交换和使用。
ONNX 可以看作是深度学习框架和部署段的桥梁,就像编译器的中间语言一样。
模型部署流水线一般而言, 在深度学习领域, 一个模型一般分为训练、优化和运行三个阶段, 训练阶段一般会使用更加专业的硬件GPU集群和算法,并投喂海量的数据;而后会根据运行环境的不同, 把模型权重文件进行不同精度的转换, 也就是量化(quantition);最后,就是在不同的平台上运行这些模型进行推理(inference), 这些硬件平台例如有X86、ARM64等。
在具体的部署和运行的过程中, 尤其是针对不同的硬件平台和操作系统的情况下, 如何运行onnx格式的模型呢? 除了上图里面介绍的PorTorch、飞桨PPL、OpenVINO等主流框架之外,今天介绍一个微软推出的ONNX 运行时 ONNX Runtime, 顾名思义,这就是专门用来运行onnx 模型的框架, 针对不同的硬件和操作系统,都做了相应的支持。
套用微软官方的介绍,就是:
ONNX Runtime 是一款跨平台机器学习模型加速器,具有灵活的接口来集成特定于硬件的库。ONNX Runtime 可与 PyTorch、Tensorflow/Keras、TFLite、scikit-learn 和其他框架中的模型一起使用。
作为IT巨头微软的产品, ONNX Runtime对于onnx模型的支持是全方位的, 从ONNX模型推(inference)到模型训练(training), ONNX Runtime都支持,先来看推理:
ONNX Runtime 推理框架的选择在ONNX Runtime的官网,上面的图片是一个动态的图片, 用户可以根据自己模型的实际运行情况进行选择, 可以看出, 无论是各大操作系统(Windows/Linux/Mac/Android/iOS), , 还是各种主流编程语言(Python/C++/C/Java/JS/Object C), 还是各种硬件架构(X64, X86,Arm64, Arm32,IBM Power),都是通通支持, 至于具体的硬件加速框架(Acceleration)例如之前介绍的安卓平台的NNAPI等。
看看下面的选择过程:
ONNX Runtime 支持的平台
ONNXRuntime支持的平台比较多, 连华为的CANN 框架也支持。
这里面我比较好奇的是ONNX Runtime 还支持浏览器端运行ONNX 模型, 只需要在NPM中安装如下:
npm install onnxruntime-web这个高低得安装一次,看看在浏览器端运行ONNX 模型到底怎么样。
ONNX Runtime 与 AI PC?最近火热的AI PC的概念,号称是PC的重生,总算是让微软找到了AI 在PC端的落地。
2024年5月,微软推出了Surface 的最新形态的AI PC, 全称是Windows 11 AI PC。全新的 Surface Pro 和 Surface Laptop 是全新的 Windows 11 AI PC 如下图所示:
注意在图片中的骁龙X 的标志了吗? 这就是Windows 11 AI PC强大的AI 能力的由来: 内嵌了高通的Snagdragon X 芯片。
看看微软在新闻里面,自己是怎么介绍的:
首批 Windows 11 AI PC 将搭载骁龙® X Elite和骁龙® X Plus处理器,得益于定制的高通 Oryon CPU,实现了行业领先的性能功耗比,提供了卓越的性能和电池效率。骁龙® X 系列系统级芯片(SoC)上搭载的 NPU,拥有高达每秒 45 万亿次运算(45 TOPS)的算力。高级集成高通 Adreno GPU 则提供了令人惊叹的图形渲染能力,带来身临其境的娱乐体验。
我们将 CPU、GPU 与全新的神经处理单元(NPU)的强大性能相结合,搭建了一套全新的系统架构。
也就是说, Windows 11 AI PC 是这么定义的:CPU(Intel Core Ultra) + NPU + GPU(Snagdragon X/X Elite)= AI PC
而在这其中的NPU + GPU,其实指的就是高通的骁龙X Plus 芯片。这个芯片有多强呢, 很多媒体也不吝赞美之词, 认为足以和苹果的M3 相抗衡, 这里不做太多的介绍, 只是想说明一点, QNN,就是高通推出的AI 框架。
也就是说, 我们可以通过ONNX Runtime 和QNN框架,就可以充分利用Windows 11 AI PC强大的AI 能力, 来运行ONNX 模型了, 是不是很酷?
QNN的介绍如下:
ONNX Runtime 的 QNN 执行提供程序支持在 Qualcomm 芯片组上进行硬件加速执行。它使用 Qualcomm AI Engine Direct SDK (QNN SDK) 从 ONNX 模型构建 QNN 图,该图可由受支持的加速器后端库执行。
Windows 下通过QNN 来运行ONNX 模型
QNN在Windows 下的.net cli安装:
dotnet add package Microsoft.ML.OnnxRuntime.QNN --version 1.18.1对于AI PC有兴趣的同学,可以去尝试一下哦!