技术指南

ONNX 和模型互操作性

ONNX(开放神经网络交换)是一种用于表示机器学习模型的开放标准格式,以便它们可以在框架和运行时之间自由移动。

概述

ONNX(开放神经网络交换)是一种用于表示机器学习模型的开放标准格式,以便它们可以在框架和运行时之间自由移动。它允许您在一种工具(如 PyTorch)中训练模型,并将其部署在另一种环境中,而无需重写它。

ONNX 和模型互操作性是一个技术构建块,会大规模影响模型质量、基础设施成本、延迟和可靠性。

深入探讨

不同的框架(PyTorch、TensorFlow、scikit-learn)以不兼容的格式存储模型,这使得部署很痛苦。 ONNX 由 Microsoft 和 Facebook 于 2017 年推出,现在由 Linux 基金会管辖,它通过定义通用文件格式和一组标准化运算符(如 Conv、MatMul、Relu)来解决这个问题,这些运算符将模型描述为计算图。您将经过训练的模型导出到 .onnx 文件,任何兼容的运行时都可以加载它。然后,ONNX 运行时在不同的硬件上高效地执行图形,应用算子融合和量化等优化,并将计算路由到 CPU、NVIDIA GPU(通过 TensorRT)或专用加速器等后端。这将模型训练与部署分离。

技术洞察

ONNX 模型是一个序列化的计算图:节点是从版本化运算符集 (opset) 中提取的运算符,边携带具有定义的形状和类型的张量。导出器跟踪或编写模型的脚本来捕获此图。在推理时,ONNX 运行时将图划分为“执行提供者”(CPU、CUDA、TensorRT 等),每个提供者处理其最支持的运算符,并应用图级优化(例如常量折叠和节点融合)来加快速度。

掌握 ONNX 和模型互操作性

ONNX(开放神经网络交换)是一种用于表示机器学习模型的开放标准格式,以便它们可以在框架和运行时之间自由移动。它允许您在一种工具(如 PyTorch)中训练模型,并将其部署在另一种环境中,而无需重写它。 ONNX 和模型互操作性是一个技术构建块,会大规模影响模型质量、基础设施成本、延迟和可靠性。为了建立深入的理解,请将 ONNX 和模型互操作性视为一个操作模型,而不是单个功能:定义所需的结果,澄清假设,并将系统可以可靠地执行的操作与仍需要专家判断的操作分开。

在实践中,使用 ONNX 和模型互操作性的强大团队根据可靠性和成本优化架构、数据和基础设施选择。他们记录明确的成功标准,根据实际数据和工作流程进行测试,并根据观察到的失败模式而不是一次性基准测试胜利进行迭代。这就是理论理解转变为跨产品、政策和运营的持久能力的地方。

多年来,架构决策决定着性能和运营成本。与此同时,优化一个基准测试可以隐藏更广泛的系统弱点。最具弹性的方法是将实验速度与治理规则结合起来:运行试点、捕获证据、发布决策日志,并随着模型行为、用户期望和监管要求的发展不断更新保障措施。

战略影响

多年来,架构决策决定着性能和运营成本。

多年来,架构决策决定着性能和运营成本。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。

技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。

技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。

更好的工程选择可以减少生产中的可靠性事故。

更好的工程选择可以减少生产中的可靠性事故。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。

ONNX 和模型互操作性的未来

ONNX 正在巩固自己作为模型部署通用语言的地位,特别是在边缘和跨平台服务方面。预计大型语言模型和转换器的运算符覆盖范围更广,对量化和低位推理的更严格支持,以及与硬件供应商运行时的更深入集成。随着专用 AI 芯片生态系统的发展,像 ONNX 这样的供应商中立格式变得更有价值,让团队无需重新设计模型即可交换硬件,并且 ONNX Runtime 继续扩展到移动和 Web(通过 WebAssembly)目标。

现实世界的实施

将 PyTorch 图像分类器导出到 ONNX,并在不依赖 Python 的 C++ 生产服务器上使用 ONNX 运行时运行它。

通过 ONNX Runtime Web (WebAssembly) 将模型部署到移动设备或浏览器以进行设备上推理。

使用 NVIDIA TensorRT 作为 ONNX 运行时执行提供程序来加速导出的变压器,以降低延迟。

将 ONNX 模型量化为 int8 以缩小其大小并加速边缘 CPU 上的推理。

实施模式

ONNX 和模型互操作性实践

将 PyTorch 图像分类器导出到 ONNX,并在不依赖 Python 的 C++ 生产服务器上使用 ONNX 运行时运行它。

将 PyTorch 图像分类器导出到 ONNX 并在不依赖 Python 的 C++ 生产服务器上使用 ONNX 运行时运行它 团队在预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

ONNX 和模型互操作性实践

通过 ONNX Runtime Web (WebAssembly) 将模型部署到移动设备或浏览器以进行设备上推理。

通过 ONNX Runtime Web (WebAssembly) 将模型部署到移动设备或浏览器以进行设备上推理 当团队预先定义质量阈值、为边缘情况保留人工升级路径并跟踪一段时间内的生产力提升和错误成本时,通常会获得更好的结果。

ONNX 和模型互操作性实践

使用 NVIDIA TensorRT 作为 ONNX 运行时执行提供程序来加速导出的变压器,以降低延迟。

使用 NVIDIA TensorRT 作为 ONNX 运行时执行提供程序来加速导出的变压器,以实现更低的延迟 当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

ONNX 和模型互操作性实践

将 ONNX 模型量化为 int8 以缩小其大小并加速边缘 CPU 上的推理。

将 ONNX 模型量化为 int8 以缩小其大小并加快边缘 CPU 的推理速度 当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

风险与防护栏

!

优化一项基准测试可以隐藏更广泛的系统弱点。

!

基础设施和维护成本常常被低估。

!

随着系统变得更加复杂,安全性和可观察性差距可能会扩大。

实施路线图

1

在实施之前定义延迟、质量和成本目标。

在实施之前定义延迟、质量和成本目标。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

2

在实际负载和数据条件下进行基准测试。

在实际负载和数据条件下进行基准测试。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

3

仪器监控错误、漂移和用户影响。

仪器监控错误、漂移和用户影响。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

4

在扩展之前准备回滚和事件响应路径。

在扩展之前准备回滚和事件响应路径。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

不断探索