ONNX 模型:优化推理 您所在的位置:网站首页 ms和ml ONNX 模型:优化推理

ONNX 模型:优化推理

2023-10-21 12:57| 来源: 网络整理| 查看: 265

你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

ONNX 和 Azure 机器学习:创建和加速 ML 模型 项目 06/01/2023

了解如何使用 Open Neural Network Exchange (ONNX) 来帮助优化机器学习模型的推理。 推理或模型评分是将部署的模型用于预测(通常针对生产数据)的阶段。

优化用于推理(或模型评分)的机器学习模型非常困难,因为需要调整模型和推理库,充分利用硬件功能。 如果想要在不同类型的平台(云/Edge、CPU/GPU 等)上获得最佳性能,实现起来会异常困难,因为每个平台都有不同的功能和特性。 如果模型来自需要在各种平台上运行的多种框架,会极大增加复杂性。 优化框架和硬件的所有不同组合非常耗时。 这就需要一种解决方案,在首选框架中训练一次后能在云或 Edge 上的任意位置运行。 此时 ONNX 便派上了用场。

Microsoft 和合作伙伴社区创建了 ONNX 作为表示机器学习模型的开放标准。 许多框架(包括 TensorFlow、PyTorch、SciKit-Learn、Keras、Chainer、MXNet、MATLAB 和 SparkML)中的模型都可以导出或转换为标准 ONNX 格式。 模型采用 ONNX 格式后,可在各种平台和设备上运行。

ONNX 运行时是一种用于将 ONNX 模型部署到生产环境的高性能推理引擎。 它针对云和 Edge 进行了优化,适用于 Linux、Windows 和 Mac。 它使用 C++ 编写,还包含 C、Python、C#、Java 和 JavaScript (Node.js) API,可在各种环境中使用。 ONNX 运行时同时支持 DNN 和传统 ML 模型,并与不同硬件上的加速器(例如,NVidia GPU 上的 TensorRT、Intel 处理器上的 OpenVINO、Windows 上的 DirectML 等)集成。 通过使用 ONNX 运行时,可以从大量的生产级优化、测试和不断改进中受益。

ONNX 运行时用于大规模 Microsoft 服务,例如必应、Office 和 Azure AI。 性能提升取决于许多因素,但这些 Microsoft 服务的 CPU 平均起来可实现 2 倍的性能提升。 除了 Azure 机器学习服务外,ONNX 运行时还在支持机器学习工作负荷的其他产品中运行,包括:

Windows:该运行时作为 Windows 机器学习的一部分内置于 Windows 中,在数亿台设备上运行。 Azure SQL 产品系列:针对 Azure SQL Edge 和 Azure SQL 托管实例中的数据运行本机评分。 ML.NET:在 ML.NET 中运行 ONNX 模型。

获取 ONNX 模型

可通过以下几种方式获取 ONNX 模型:

通过 Azure 机器学习(参见本文底部的示例)或自动机器学习功能训练新的 ONNX 模型 将现有模型从其他格式转换为 ONNX(请参阅 教程) 从 ONNX 模型 Zoo 获取预先定型的 ONNX 模型 通过 Azure AI 自定义视觉服务生成自定义 ONNX 模型

许多模型(包括图像分类、对象检测和文本处理)都可以表示为 ONNX 模型。 如果遇到无法成功转换的模型的问题,请在所用的相应转换器的 GitHub 中提出问题。 可以继续使用现有的格式模型,直到问题得到解决。

在 Azure 中部署 ONNX 模型

使用 Azure 机器学习,可以部署、管理和监视 ONNX 模型。 使用标准部署工作流和 ONNX 运行时,可以创建在云中托管的 REST 终结点。 请参阅本文末尾的 Jupyter 笔记本示例,亲自试用。

安装 ONNX 运行时并与 Python 配合使用

ONNX 运行时的Python 包可用于 PyPi.org(CPU 和 GPU)。 安装之前,请阅读系统要求。

若要安装适用于 Python 的 ONNX 运行时,请使用以下命令之一:

pip install onnxruntime # CPU build pip install onnxruntime-gpu # GPU build

若要在 Python 脚本中调用 ONNX 运行时,请使用:

import onnxruntime session = onnxruntime.InferenceSession("path to model")

模型附带的文档通常会指示有关使用模型的输入和输出。 还可使用可视化工具(如 Netron)查看模型。 ONNX 运行时还可以查询模型元数据、输入和输出:

session.get_modelmeta() first_input_name = session.get_inputs()[0].name first_output_name = session.get_outputs()[0].name

若要推理模型,请使用 run,并传入要返回的输出列表(如果需要所有输出,则保留为空)和输入值的映射。 结果是输出列表。

results = session.run(["output1", "output2"], { "input1": indata1, "input2": indata2}) results = session.run([], {"input1": indata1, "input2": indata2})

有关完整的 Python API 参考,请参阅 ONNX 运行时参考文档。

示例

有关创建和部署 ONNX 模型的示例 Python 笔记本,请参阅 how-to-use-azureml/deployment/onnx。

阅读使用 Jupyter 笔记本探索此服务一文,了解如何运行笔记本。

有关其他语言的使用示例,请参阅 ONNX 运行时 GitHub。

更多信息

详细了解 ONNX 或参与项目:

ONNX 项目网站 GitHub 上的 ONNX 代码

详细了解 ONNX 运行时或参与项目:

ONNX 运行时项目网站 ONNX 运行时 GitHub 存储库


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有