学习ONNX交易 - 页 14

 

使用 ONNX 运行时在灵活硬件上进行优化推理



使用 ONNX 运行时在灵活硬件上进行优化推理

本教程介绍了使用 ONNX 运行时在 CPU、GPU 和 OpenVINO 上部署模型。演讲者演示了如何使用不同的执行提供程序(包括 OpenVINO)在灵活的硬件上进行推理。用于推理的代码在所有环境中基本相同,主要区别在于执行提供者。 ONNX 运行时在 CPU 和 GPU 上执行推理的速度比 PyTorch 快,并且存在用于 OpenVINO 的单独的 ONNX 运行时库。总的来说,本教程概述了如何使用 ONNX Runtime 在各种硬件选项上部署模型。

  • 00:00:00 在本节中,演讲者将介绍设置虚拟环境并使用 ONNX 运行时在 CPU、GPU 和 OpenVINO 上对 ResNet50 模型执行推理的过程。演讲者指出,如果 ONNX Runtime 检测到兼容的加速器,它将使用 GPU,否则将默认使用 CPU。用于推理的代码在所有三种环境中基本相同,主要区别在于更改了执行提供程序。演讲者展示了 ONNX 运行时在 CPU 和 GPU 上执行推理的速度比 PyTorch 快,并指出有一个单独的 ONNX 运行时库用于 OpenVINO。

  • 00:05:00 在本节中,演讲者演示了如何在 CPU 上使用不同的执行提供程序(如 OpenVINO 和 OpenVino),以使用 ONNX Runtime 在灵活的硬件上进行推理。通过将执行提供程序设置为 OpenVINO,相同的代码可提供 30 毫秒和大约 0.78 的 CPU 利用率。本教程概述了如何使用 ONNX 运行时在 CPU、GPU 和 OpenVINO 上部署模型。
 

Flink 中的机器学习推理与 ONNX



Flink 中的机器学习推理与 ONNX

该视频讨论了在机器学习推理中使用 ONNX 并将其部署在分布式计算框架 Flink 中的好处和实现。模型训练和生产推理之间的关注点分离、定义输入和输出规范的能力以及语言独立性使 ONNX 成为数据科学家的宝贵工具。该视频演示了如何将 ONNX 模型加载到 Flink 中,提供了丰富地图功能的关键组件,并解释了如何使用 jar 文件将模型与代码捆绑在一起。演讲者还谈到了 ONNX 的内存管理、批处理优化和硬件加速等注意事项,并强调了它对 Flink 中实时机器学习推理的好处。

  • 00:00:00 在视频的这一部分中,Colin Germain 使用网络攻击检测领域的玩具示例解释了实时机器学习推理的重要性。他说明了等待检测事件是如何导致重要数据泄露丢失的。此外,他还解释了为什么机器学习对于捕获外部对手使用的不同类型技术和漏洞利用的变化至关重要。最后,他强调了在 Flink 中使用分布式计算扩展解决方案的重要性。 Colin 介绍了在解决方案中起关键作用的 Onyx 模型,并解释了他们如何在 PyTorch 中使用机器学习模型,并使用 Onyx 将其序列化以将其部署到 Flink 中。

  • 00:05:00 在本节中,演讲者解释了在机器学习管道中使用 ONNX(代表开放式神经网络交换)的好处。 ONNX 允许模型训练阶段和生产推理阶段之间的关注点分离,使数据科学家可以轻松地使用 Python 开发模型,然后使用 ONNX 模型与不同的工具进行推理。 ONNX 提供了一个合约,它定义了用于机器学习的有向无环图的计算。图中的每个运算符都有一个版本,允许向后兼容并在未来持续服务。演讲者还指出了将 ONNX 模型与流框架 Apache Flink 打包在一起以便于部署的好处。

  • 00:10:00 在视频的这一部分,演讲者讨论了使用 ONNX 进行机器学习推理的好处,包括定义输入和输出规范的能力,以及对 ONNX 运行时库中所有模型版本的支持。 ONNX 的语言独立性和大多数 ML 框架转换器的可用性使得将模型导入 ONNX 变得容易,演讲者建议使用 netron 进行诊断。最后,演讲者展示了一个简单的例子,即使用带 ONNX 的 pi torch 模型进行端到端处理,无需训练。

  • 00:15:00 在本节中,演讲者讨论了用于定义计算的前向方法,以及高扭矩如何使用它来管理训练梯度的反向传播。演示了使用 add offset 类的基本示例,它将张量偏移定义的值。然后,演讲者继续讨论导出到 ONNX 以及为动态模型提供正确输入的重要性。使用 Scala 的 ONNX 运行时环境和会话将 ONNX 模型加载到内存中,这允许对模型执行推理。创建一个类来保存加载的模型以供推理使用。

  • 00:20:00 在本节中,演讲者解释了如何使用字节数组和加载方法将 ONNX 模型加载到 Flink 中。他们还演示了如何使用 rich map 函数来保存加载的模型并以干净且有组织的方式执行推理。演讲者介绍了丰富地图功能的关键组件,包括设置 ONNX 张量、定义输入和输出以及运行模型会话以获得结果。他们指出,可以修改代码以支持多个输出,使其成为适用于不同类型模型的灵活解决方案。最后,演讲者谈到了 ONNX 模型的打包方面,解释了如何将它们与包含代码的 jar 文件捆绑在一起,从而无需连接到外部端点或从不同来源下载文件。

  • 00:25:00 在本节中,演讲者讨论了 Flink 中的机器学习推理示例,该示例使用手写数字分类的经典问题,即 MNIST。他们展示了用于对 28x28 像素阵列进行分类的 PyTorch 模型,以及如何使用与之前相同的批量调整方法将其转换为 ONNX 图以用于 Flink。然后,演讲者讨论了另一个在 NLP 中使用转换器进行机器学习的示例,特别是一个较小版本的 BERT,它已经在词汇表上进行了预训练。 Transformer 模型用于预测情感、翻译等单词任务,可以进一步训练用于 Flink 中新的预测任务。

  • 00:30:00 在本节中,演示者展示了 Hugging Face Transformers 库,该库允许轻松导入预训练模型和 Python 迁移学习。虽然这些模型往往很大,但该库包含优化和量化功能以提高性能。然而,重要的是要注意预处理阶段,例如标记化,还不是图形的一部分,并且可能无法在 Scala 中访问。演示者还强调了在 Flink 中利用 Scala 语言的全部功能的好处,同时将训练依赖与生产推理分开,并有效地将这两个部分解耦。总的来说,虽然存在一些缺点,例如模型大小和预处理挑战,但该方法在利用 Flink 的功能和在 JAR 文件中部署方面具有优势。

  • 00:35:00 在本节中,演讲者指出,在 Flink 和 ONNX 中使用机器学习推理时,需要牢记一些重要的注意事项。一是在处理大型模型时要仔细管理内存,例如可能占用数百兆字节的变压器模型。此外,批量优化和硬件加速(例如使用 GPU)会影响性能。可以使用自定义 ONNX 图完成预处理,但这需要额外的工作,并且不像前面展示的那样容易。演讲者强调 ONNX 支持 Flink 中的实时机器学习,并很好地将 Python 训练代码与 Scala 生产代码分开,这对数据科学家来说是一个胜利。演讲者还解决了有关将 ONNX 与基于 TensorFlow 的模型一起使用的问题,以及为什么选择 ONNX 而不是 Java API、PyTorch 或 TensorFlow。

  • 00:40:00 在本节中,演讲者将 ONNX 作为与语言无关的图形的框架无关模式进行讨论。演讲者提到使用 ONNX 的一个有趣特性是,如果一个人正在使用 PyTorch 并想切换到 TensorFlow,他们可以使用 ONNX 作为“车辆”在两个框架之间穿梭,这显示了框架的灵活性。听众问演讲者是否用 TensorFlow 的 Scala 项目试验过 TensorFlow 模型,他对此给出了否定的回答。最后,演讲者邀请听众访问 ONNX 存储库,在 GitHub 上创建问题,或在 LinkedIn 上与他联系以获取问题,尤其是关于招聘的问题。
 

使用 ONNX 改善在线购物体验



使用 ONNX 改善在线购物体验

该视频讨论了电子商务公司如何使用 AI 来创造有影响力的洞察力,从而区分在线零售领域的输赢。演讲者提供了 Bazaar Voice 的示例,这是最大的品牌和零售商网络,提供超过 80 亿条总评论,以及他们如何使用产品匹配来分享评论。然后,演讲者描述了他们如何使用 Python 开发机器学习模型,将其导出为 ONNX 格式,并使用节点环境将其部署到无服务器函数以在 ONNX 运行时上运行推理。该解决方案允许在保持低成本的同时高速匹配数千个客户目录中的数亿种产品,从而显着节省成本并为品牌和零售商带来数百万次额外评论。演讲者最后邀请观众探索更多使用 ONNX 功能的方法,并分享他们的用例以促进未来的技术进步。

  • 00:00:00 在本节中,我们了解到商业数字化已导致电子商务公司拥有他们收集的数据规模,并使用人工智能创造有影响力的见解,作为在线零售领域输赢的区别因素。一个例子是 Bazaar Voice 每月有 10 亿购物者,这是世界上最大的品牌和零售商网络,提供超过 80 亿条总评论,以及如何通过产品匹配来推动分享评论。产品匹配是机器学习模型构建的核心功能,通过比对唯一标识符来进行,但每个月有超过百万次的产品匹配是通过人工进行的。该解决方案是使用 Python 构建的 scikit-learn 模型,并导出为 ONNX 格式,在保持性能的同时实现了最轻量级、最具成本效益的解决方案。

  • 00:05:00 在本节中,演讲者讨论了为在线购物体验实施机器学习模型的各种选项,并得出结论认为无服务器功能是最佳选择,因为它们成本低且易于实施。然后,他们解释了他们如何用 Python 开发模型,将其导出为 ONNX 格式,并使用节点环境将其部署到无服务器函数以在 ONNX 运行时上运行推理。该解决方案的模块化使其可以轻松插入任何服务,并且通过使用内存使用量和执行时间等指标,他们能够找到最佳内存大小以确保最佳性能,同时保持低成本。虽然部署大小限制和在超时限制内工作是考虑因素,但 ONNX 和 ONNX 运行时的强大功能与无服务器功能相结合,允许在数千个客户端目录中高速匹配数亿种产品,从而显着节省成本并节省 1500 万美元对品牌和零售商的额外评论。

  • 00:10:00 在这一部分中,演讲者通过邀请观众探索更多使用 ONNX 功能的方法并分享他们的用例来结束视频。作为在这个领域积极工作的人,演讲者对这些技术未来可能带我们去的地方感到好奇和被迫。
 

DSS 在线 #4:使用 ONNX 的端到端深度学习部署


DSS 在线 #4:使用 ONNX 的端到端深度学习部署

该视频讨论了端到端深度学习部署的挑战,包括管理不同的语言、框架、依赖项和性能可变性,以及团队之间的摩擦和专有格式锁定。引入开放神经网络交换 (ONNX) 作为深度学习序列化的基于协议缓冲区的格式。它支持主要的深度学习框架,并提供用于运行模型的独立工件。 ONNX ML 也作为 ONNX 规范的一部分进行讨论,该规范为传统机器学习预处理提供支持。 ONNX 的局限性是公认的,但它被视为一个快速发展的项目,得到了大型组织的大力支持,提供了跨语言、框架、运行时和版本的不同维度的真正可移植性。

  • 00:00:00 在本节中,IBM 的首席工程师 Nick Pentreath 介绍了使用 Open Neural Network Exchange 的端到端深度学习部署。机器学习工作流程中有许多步骤,包括分析数据、为模型预处理数据、训练模型、将其部署到实际应用程序中以及维护和监控它。 Pentreath 讨论了工作流如何跨越不同的团队和工具,这使得为模型提供基础设施变得至关重要。

  • 00:05:00 在本节中,演讲者讨论了对机器学习部署至关重要的三个问题:我们在部署什么、我们在哪里部署以及我们如何部署。机器学习模型的部署涉及合并训练模型之前的整套步骤,包括转换、特征提取和预处理。必须在实时环境中应用与训练期间相同的预处理步骤,因为任何差异都可能导致数据倾斜,从而导致灾难性后果。演讲者指出,即使是深度学习也仍然需要仔细的预处理和特征工程,并强调了预处理标准化带来的挑战。这些挑战包括不同框架之间的不同数据布局和颜色模式,它们可能对预测产生微妙但重大的影响。

  • 00:10:00 在本节中,视频讨论了部署端到端深度学习管道时遇到的挑战,包括管理和桥接不同的语言、框架、依赖项和性能可变性,以及团队之间的摩擦,开源框架之间缺乏标准化,以及专有格式锁定。虽然基于容器的部署确实带来了显着的好处,但它仍然需要某种服务框架在上面并且没有解决标准化问题。这就是视频建议使用开放标准将模型从不同框架导出为标准化格式的原因,这提供了模型生产者和模型消费者之间关注点的分离,使他们能够专注于各自的任务,而不必担心部署问题或在哪里模型来自。

  • 00:15:00 在本节中,演讲者讨论了开源和开放标准在深度学习部署中的重要性。他们解释了使用单一堆栈和一套标准化工具进行分析和可视化的好处,并强调了开放治理在提供可见性和避免集中控制方面的关键作用。演讲者随后介绍了开放式神经网络交换 (ONNX),这是一种基于协议缓冲区的格式,用于定义以深度学习为重点的机器学习模型的序列化。 ONNX 支持主要的深度学习框架,如 PyTorch、Caffe、TensorFlow、Keras、Apple Core ML 和 MXNet,并提供了用于运行模型的独立工件。

  • 00:20:00 在本节中,演讲者讨论了 ONNX ML(机器学习)如何成为 ONNX 规范的一部分,该规范为传统机器学习预处理以及序列和地图等其他类型提供支持。 ONNX 包含广泛的导出器社区和生态系统,这些导出器是为各种传统机器学习框架以及线性模型、树集成和梯度提升等模型编写的。为了代表所有这些,ONNX 充当模型生产者和消费者之间的标准。 ONNX 模型库包含一组跨不同领域广泛使用的标准模型,包括图像分析、分类、分割和自然语言处理,所有这些都以 ONNX 格式表示。 ONNX 运行时是 Microsoft 的一个开源项目,是一个完全兼容的运行时,支持核心深度学习和 ONNX ML 运算符。

  • 00:25:00 在本节中,演讲者讨论了 ONNX 的局限性,特别是在图像处理、高级字符串处理和哈希聚类模型等某些缺失功能方面。此外,从 Spark ML 等框架导出混合管道时也存在挑战,这需要一些自定义代码。然而,ONNX 是一个活跃的项目,正在快速发展,并得到大型组织的大力支持。它提供了跨语言、框架、运行时和版本的不同维度的真正可移植性,以开放和可移植的方式解决了深度学习管道部署的重大痛点。 ONNX 是开源和开放治理的,因此任何人都可以参与。
 

ONNX 和 ONNX 运行时与 Microsoft 的 Vinitra Swamy 和 Pranav Sharma



ONNX 和 ONNX 运行时与 Microsoft 的 Vinitra Swamy 和 Pranav Sharma

该视频讨论了开放神经网络交换 (ONNX) 格式,该格式旨在使模型在序列化和版本控制方面具有互操作性和高效性。 ONNX 由中间表示层、算子规范组成,支持不同类型的数据。 ONNX 运行时以 C++ 和汇编程序实现,提供向后兼容性,并可通过执行提供程序、自定义运算符和图形优化器进行扩展。 API 提供对平台、编程语言和执行提供程序的支持。用户可以创建会话、优化模型并将它们序列化以备将来使用。演讲者展示了 ONNX Runtime 的多功能性和效率,以及在 Android 设备上运行的能力。

  • 00:00:00 在本节中,来自 ONNX 工程团队的 Venetra 介绍了 ONNX,即开放式神经网络交换,它是 AI 模型的可互操作标准。她解释说,从 HoloLens 到 Xbox 再到 Skype,微软已经将机器学习集成到其产品套件的几乎每个方面,这导致了各种大规模部署挑战。创建 ONNX 是为了通过标准化不同框架和部署目标的模型部署过程来优化高效推理。目标是通过实施一个标准来支持来自许多框架的模型,并为所有用户提供一致的体验,无论他们是数据科学家、硬件借贷者、服务作者还是 ML 工程师。

  • 00:05:00 在本节中,Vinitra Swamy 和 Pranav Sharma 讨论了 ONNX,这是一个由包括 Microsoft、Facebook、Amazon、NVIDIA 和 Intel 等创始合作伙伴组成的联盟。 ONNX 由中间表示层和完整的运算符规范组成,尽管每个框架具有不同的运算符集,但它们以标准方式定义运算符。将模型转换为 ONNX 的代码并不冗长,转换可以在推理和互操作性方面为用户节省很多。此外,ONNX 的设计原则可实现深度学习和机器学习模型的互操作性。用户可以通过转到 ONNX 模型库、模型创建服务或转换器开始使用 ONNX。

  • 00:10:00 部分讨论了 ONNX 的组件和设计,ONNX 是一种模型格式,旨在使其具有互操作性和向后兼容性,同时支持高效的序列化和版本控制。该格式由模型、带节点的计算图和运算符规范组成。支持的数据类型包括标准张量类型和两种非张量类型、序列和映射。运算符规范包含输入、输出、约束和示例。为 relu 运算符给出了运算符规范的示例。

  • 00:15:00 在视频的这一部分,Vinitra Swamy 和 Pranav Sharma 讨论了开放神经网络交换 (ONNX) 格式支持的不同版本和运算符。他们解释说,ONNX 有超过 156 个深度学习规范操作和 18 个传统机器学习操作,它们可以在不同的操作员之间互操作。此外,用户可以使用 ONNX 框架为其模型创建自定义操作。他们还强调了版本控制的重要性,版本控制在三个不同的级别上完成——中间表示层、偏移量和各个操作符。最后,他们讨论了 ONNX Runtime,它是 ONNX 的开源高性能推理引擎。它是跨平台的,设计为向后兼容,使其适合在生产环境中部署。

  • 00:20:00 在本节中,重点是 ONNX Runtime 的架构以及模型如何在其中运行。向后兼容性和性能是 ONNX Runtime 的主要关注点,它是用 C++ 和汇编程序的一些部分实现的。 ONNX 运行时通过使用称为“执行提供程序”的东西来支持硬件加速器。分区算法使模型能够在混合执行阶段运行,各个执行提供者可以进一步优化子图以获得更好的性能。最后,ONNX Runtime 充当解释器,遍历图中的所有节点以执行模型。

  • 00:25:00 在本节中,演讲者讨论了 ONNX 和 ONNX Runtime 中的执行模式,即顺序模式和并行模式。用户可以控制他们想要为每种执行模式配置的线程数,结果通过 API 发送出去。演讲者指出,不同的设备可能不会共享相同的内存,因此内存复制节点是根据执行的优化插入的。他们还讨论了图分区过程,用户必须在该过程中指定应运行图的执行提供者的优先列表。然而,在下一个版本中,将有一个称为智能分区的新阶段,ONNX 将在其中找出放置图的最佳方式以及如何有效地运行它。演讲者还谈到了执行提供者,它们是硬件加速器之上的软件抽象。两种类型的执行提供者是基于内核的和基于运行时的,后者是一个黑盒子,执行提供者为我们运行部分图。

  • 00:30:00 在本节中,演讲者讨论了 ONNX Runtime 的设计原则,强调了其通过执行提供程序、自定义运算符和图形优化器等选项的可扩展性。它们还提供一系列受支持的平台、编程语言和执行提供商,包括 Tensor RT、Direct ML 和 OpenVINO。演讲者解释了会话的高级构造以及在调用运行函数之前创建会话对象的线程安全方法。他们还讨论了优化模型所需的时间如何取决于模型的大小及其优化机会。

  • 00:35:00 在本节中,演讲者讨论了会话的创建以及运行选项和会话选项的使用,以及序列化优化模型以供将来使用的能力。他们还解释了注册自定义运算符的过程,并为那些不喜欢使用 C# 的人提供了使用 Python 的选项。 ONNX Runtime 1.0 版本已经发布,确保未来 API 不会中断,
    兼容性回到 CentOS 7.6。还讨论了 ONNX Go Live Tool,这是一种用于转换和调整模型以获得最佳性能的开源工具。本节以使用 ONNX 的 Microsoft 服务示例作为结尾,包括 Office 缺失确定器模型的性能提升 14 倍,以及认知服务中使用的光学字符识别模型的性能提升 3 倍。

  • 00:40:00 在本节中,演讲者讨论了 ONNX 运行时 API,它处于预览模式并允许在 Android 设备上运行 ONNX 运行时。他们还提到了培训支持,目前处于探索阶段,旨在了解 ONNX 运行时是否可用于调整已创建的模型。演讲者随后演示了在 YOLOv3 对象检测模型上使用 ONNX 运行时,展示了 ONNX 运行时的通用性、高效性,并且对于需要良好性能或需要支持跨不同框架的模型的情况非常有用。

  • 00:45:00 在视频的这一部分,演示者通过使用大型复杂模型识别图像及其各自的类来演示 ONNX 运行时。他们还在 Onnx Ecosystem Converter 上展示了一个快速演示,允许用户在 Jupyter Notebook 中上传和转换来自不同框架的模型。他们将文档分类模型从 Apple 的机器学习框架 CoreML 转换为 ONNX,并验证其准确性。他们指出,将模型转换为 ONNX 是一次性成本,而且是一个高效的过程。

  • 00:50:00 在本节中,演讲者总结了他们在视频中介绍的内容,包括使用 ONNX 和 ONNX Runtime 的好处、从不同框架转换为 ONNX 的各种方法,以及 ONNX 在其 26 个领域中越来越多的采用公司。他们感谢听众的聆听,并表达了继续进行问答环节的兴奋之情。
 

Jan-Benedikt Jagusch Christian Bourjau:使用 ONNX 让机器学习应用变得快速和简单



Jan-Benedikt Jagusch Christian Bourjau:使用 ONNX 让机器学习应用变得快速和简单

在这段关于机器学习和部署的视频中,演讲者讨论了将模型投入生产的挑战,尤其是挑选和部署模型的困难。他们介绍了 ONNX,一种用于导出机器学习模型的通用文件格式,并解释了它如何帮助解耦训练和推理,从而使部署更快、更高效。他们提供了一个使用 scikit-learn 的现场演示,解释了如何将机器学习管道转换为 ONNX 格式。他们还讨论了 Docker 容器在部署机器学习模型方面的局限性,并强调了改用 ONNX 的好处。他们谈到了加密模型以提高安全性的主题,并解决了 ONNX 的可用性问题,ONNX 仍然是一个年轻的生态系统,有一些神秘的错误消息。

  • 00:00:00 在视频的这一部分,演示者讨论了使用 ONNX 将模型训练与推理分离的重要性。主持人指出,55% 的开始使用机器学习的公司未能将其模型投入生产,并认为通过将模型投入生产来自动化业务流程是大部分价值所在。然而,他们也注意到部署模型比最初看起来要复杂得多,这就是为什么他们将讨论 ONNX 如何帮助克服这一挑战。他们还介绍了机器学习项目通常如何启动、开发,然后与部署要求发生冲突的过程。

  • 00:05:00 在本节中,演讲者讨论了将机器学习模型投入生产所面临的挑战,特别关注挑选和部署模型的困难。他们探讨了使用未完成的包(如 pickle)传输模型时出现的问题,以及必须如何安装正确的环境和依赖项才能在生产中成功加载模型。他们还解决了模型在生产中使用速度太慢的问题,从而导致对模型进行更改和优化。最后,他们讨论了对导出模型的通用文件格式的需求,从而可以轻松使用任何运行时进行部署。

  • 00:10:00 在本节中,演讲者讨论了使用训练工具将训练与预测时间分离的概念,以将机器学习模型导出为通用文件格式,例如 ONNX,以便释放用于部署的工具.他们解释说 ONNX 是“描述整个模型的标准化方法,包括特征工程并将其存储为二进制格式。”他们还指出,对于那些拥有不同类型机器学习模型的人来说,ONNX 是一个不错的选择,而不仅仅是神经网络。然而,他们强调,要使用 ONNX,机器学习模型必须被描述为一个计算图,其节点是运算符,边是流经该图的数据,并且 ONNX 是强类型的,具有类型信息和形状。

  • 00:15:00 在本节中,演讲者讨论了 ONNX 的细节,它定义了一组必须使用的运算符,以确保与格式的兼容性。在这次演讲时,有 175 个运算符,包括更复杂的运算符,如线性回归器和真正的集成回归器。 ONNX 还指定了存储每个运算符所需的数据,使整个文件自包含,不需要其他依赖项。演讲者强调,有向无环图中可表示的任何东西都可以转换为 ONNX,而不仅仅是机器学习模型。此外,整个管道可以转换为 ONNX,只要每个步骤都可以表示为自己的有向无环图。

  • 00:20:00 在本节中,演讲者演示了如何使用 numpy 操作创建简单的输入器和回归器,这可以很容易地定义为 onyx 运算符的图形。通过用图本身替换 scikit-learn 图中的每个节点,scikit-learn 可以转换为 onix 格式。虽然 PyTorch、TensorFlow、Light GBM 和 XGBoost 等成熟的机器学习框架已经有可用的转换器,但必须为自定义估算器和转换器编写自定义转换器。然而,学习曲线陡峭但可行,自定义代码适合套牌至关重要。演讲者还提供了使用训练数据和来自 scikit-learn 的管道的现场演示,然后将其转换为 onix 格式。

  • 00:25:00 在本节中,Jan-Benedikt Jagusch 和 Christian Bourjau 解释说 ONNX 是强类型的,需要来自所提供数据的初始信息。为了简化这个过程,他们通过将 pandas 数据类型映射到 ONNX 数据类型,轻松地从 pandas 数据帧转换类型。然后,ONNX 模型完全独立,从管道的预测逻辑中提取出来。数据工程团队只需将其转储到一个文件中,并使用 ONNX 运行时来分析数据,这是唯一的依赖项,无论数据模型是从 TensorFlow、Python 还是其他地方序列化的。 ONNX 运行时提供 Python 绑定,可将预测速度提高十倍。单行预测速度也是优先考虑的,因为它在在线环境中是必不可少的,仅需 170 毫秒,这与 Scikit-learn 类似。

  • 00:30:00 在本节中,演讲者讨论了使用 ONNX 将训练环境与部署环境分离的好处。他们解释说,通过将模型导出为 ONNX 的通用文件格式,用户可以使用为实际部署提供必要性能特征的运行时来解释他们的模型。演讲者还解决了有关使用 Docker 容器的问题,强调了可扩展性和灵活性方面的局限性。他们建议研究 onyx,因为它能够提供性能和灵活性,除了改进部署之外还具有存档模型的潜力。

  • 00:35:00 在本节中,演讲者讨论了使用 Docker 部署机器学习模型的局限性,并强调了将模型序列化到 ONNX 的好处。虽然 Docker 可以提供 REST API,但在某些情况下,生成的工件包含许多层,因此难以加载模型的数学公式。另一方面,将模型序列化为 ONNX 提供了人类可读且易于加载的纯模型本质。演讲者警告说,虽然 ONNX 有很多好处,但它并不是适用于所有用例的完美解决方案,并且需要一些开销来转换自定义估算器和转换器。此外,生态系统还相对较新,用户可能需要花时间修复问题或通读 GitHub 问题。最后,演讲者简要提到了在 GPU 上部署 ONNX 模型的可能性,这在技术上可以通过默认的 ONNX 运行时实现。

  • 00:40:00 在本节中,演讲者讨论了加密 ONNX 模型以防止意外使用或逆向工程的可能性。他们提到,虽然可以从模型中读取系数,但如果它很复杂,就会变得困难,因为 ONNX 不保留操作员和管道信息。 ONNX 在一定程度上通过混淆来提供安全性,但它没有加密。但是,他们提到可以将文件编译成机器代码以进行混淆和进一步提高安全性。演讲者还解决了将具有 I/O 的预处理步骤放在数据库中的问题,这将要求所有数据都在 ONNX 图形内部实例化器的数据库中。最后,他们讨论了 ONNX 的可用性问题,因为错误消息可能很含糊,但他们乐观地认为,鉴于 ONNX 的年轻化和企业支持,生态系统将会得到改善。
 

用于边缘和云端混合推理的 ONNX Runtime Azure EP



用于边缘和云端混合推理的 ONNX Runtime Azure EP

ONNX Runtime 团队发布了他们进入混合世界的第一步,使开发人员能够通过 Azure EP 使用单一 API 进行边缘计算和云计算,这消除了设备连接问题,并允许开发人员切换到他们优化的云模型,节省成本并减少延迟。这一新功能允许开发人员更新应用程序逻辑并选择通过 Azure EP 采用的路径,从而提供更多功能和功能。该团队演示了儿童服务器和对象检测模型的部署,以及如何测试端点和简单配置 Onnx Runtime Azure。演示者还讨论了在本地和远程处理之间切换的能力以及潜在的用例,包括低性能模型与高性能模型。 ONNX Runtime Azure EP 可以使用部署所需的包轻松预加载和配置,有助于简化软件的使用。

  • 00:00:00 在本节中,Azure EP 被介绍为 ONNX 运行时团队迈向混合世界的第一步,使开发人员能够将单一 API 用于边缘计算和云计算。通过这样做,开发人员将不必担心设备连接性,并且可以切换到他们已经优化并在那里使用的云模型,从而节省成本和延迟。这一新功能允许开发人员更新应用程序逻辑并选择通过 Azure EP 采用的路径,从而为他们提供更多功能和能力。总体而言,ONNX 运行时团队很高兴看到来自开发人员社区的内容以及这项新功能的实现方式。

  • 00:05:00 在本节中,新 ONNX 运行时 (ORT) 1.14 版的贡献者 Randy Schrey 演示了该版本附带的一些很酷的功能。首先,他展示了一个名为 Azure 机器学习的端点,它充当模型的服务器端。他还讨论了用于提供端点的 Triton 服务器(由 Nvidia 划分)及其令人印象深刻的性能和稳定性。 Schrey 展示了如何部署儿童服务器并概述了它的外观,包括指定模型的名称、版本和位置。他还强调了部署 Triton 服务器时必须遵循的文件夹结构,并展示了描述模型如何获取输入和输出的配置文件。

  • 00:10:00 在本节中,演讲者讨论了用于部署对象检测模型的文件夹结构,并解释了 Triton 服务器如何找到要部署的模型。他们还回答了有关在 Azure 上使用模型的问题,并提到了 Trtis 在 Azure 上的当前局限性,指出它仅支持 Triton 服务器作为其服务器端。然后,演讲者讨论了测试端点、简单安装 Onnx Runtime Azure 的过程,以及他们如何使用 Onnx Runtime Azure 在边缘和云上进行混合推理,以便从客户端使用在线端点。演讲者提供了一个脚本并解释了使用 Onnx Runtime Azure 加载和使用模型所需的一些配置。

  • 00:15:00 在本节中,演示者演示了如何使用 ONNX Runtime Azure EP 在边缘和云端进行混合推理。他们展示了如何配置身份验证密钥和运行推理,以及通过更改代码中的单个参数在本地和远程处理之间切换的能力。他们讨论了潜在的用例,例如在性能较低和性能较高的模型之间进行选择,并指出虽然当前的预览版需要 Triton 推理服务器,但计划在未来支持所有类型的部署服务器。

  • 00:20:00 在本节中,解释了 ONNX Runtime Azure EP 可以预加载并使用部署所需的包轻松配置。此功能有助于简化软件的部署和使用。
 

使用 ONNX-TensorRT 的量化感知训练模型的 INT8 推理




使用 ONNX-TensorRT 的量化感知训练模型的 INT8 推理

NVIDIA 的深度学习软件工程师 Dheeraj Peri 解释了量化的基础知识以及 TensorRT 如何通过各种融合来支持量化网络。他们专注于使用 TensorFlow 2.0 框架训练的模型以及如何执行训练后量化 (PTQ) 和量化感知训练 (QAT)。解释了部署使用 Nvidia TF2 量化工具包和 ONNX-TensorRT 训练的模型的过程,并提供了各种 ResNet 模型的准确性和延迟结果。总体而言,演示了从 TensorFlow 到通过 ONNX-TensorRT 部署 TensorRT 的端到端 QAT 工作流程。

  • 00:00:00 在本节中,NVIDIA 的深度学习软件工程师 Dheeraj 讨论了量化的基础知识以及 TensorRT 如何通过各种融合支持量化网络。他解释说,量化是使用线性或非线性缩放技术将连续值转换为离散值集的过程。他们专注于使用 TensorFlow 2.0 框架训练的模型以及如何执行训练后量化 (PTQ) 和量化感知训练 (QAT)。 Dhiraj 还强调了 NVIDIA 的量化工具包和 TF mod 工具包之间的差异,其中节点在卷积层中的位置不同。

  • 00:05:00 在本节中,解释了部署使用 Nvidia TF2 量化工具包和 ONNX-TensorRT 训练的模型的过程。该过程涉及使用 Nvidia 工具包对预训练的 TensorFlow 2.0 模型进行量化,对其进行少量 epoch 微调以模拟量化过程,然后将模型转换为 ONNX 格式。然后使用 ONNX 图使用 TensorRT API 生成 TensorRT 引擎。提供了各种 ResNet 模型的准确性和延迟结果,并且观察到量化感知训练模型 (QAT) 在推理过程中显示出比训练后量化 (PTQ) 模型更好的准确性。与 PTQ 模型相比,QAT 模型显示出相似的延迟,但这取决于 QDQ 节点的放置及其融合。总体而言,演示了从 TensorFlow 到通过 ONNX-TensorRT 部署 TensorRT 的端到端 QAT 工作流程。
 

ONNX 模型的实用训练后量化



ONNX 模型的实用训练后量化

该视频讨论了如何实施量化以将 TensorFlow 模型的大小缩减为 ONNX 量化模型。 ONNX 模型的尺寸明显更小,并且可以在 CPU 上更快地执行。作者提供了有关如何实现动态量化以及如何检查 CPU 速度的代码片段和说明。

该视频展示了量化机器学习模型以使其更快更轻的过程,同时承认这可能会导致准确性下降。将 ONNX 和 TensorFlow 模型与量化模型进行比较,发现后者更快、更轻。然而,量化模型并没有像其他模型那样从 GPU 的使用中受益。然后评估量化模型的准确性,发现只有轻微下降。还讨论了可视化 ONNX 模型的过程,并演示了 Loot Rodas Neutron 应用程序的使用。整个过程导致模型大小从 1 GB 减少到 83 MB,而准确性损失最小。

 

QONNX:在 ONNX 中表示任意精度量化 NN 的提议



QONNX:在 ONNX 中表示任意精度量化 NN 的提议

演讲者讨论了低精度量化,并以其在无线通信中的应用为例。他们提出了 QONNX,这是一种在 ONNX 中表示任意精度量化神经网络的方言。 QONNX 简化了量化表示,将其扩展到更广泛的场景,并为不同类型的舍入和二进制量化提供了选项。它被用于在 FPGA 上部署,并被集成到 Brevitas Python 量化库中,NQCDQ 将被集成到下一个版本中。

  • 00:00:00 在这一节中,演讲者谈到了低精度量化的概念,即8位以下的量化。演讲者提供了一个示例,说明如何在无线通信的调制分类任务中使用低精度量化,通过量化感知训练实现高吞吐量和减少延迟。演讲者解释了均匀量化的基本原理,并建议使用裁剪作为量化节点和反量化节点之间的整数边界上的额外函数来扩展 ONNX 对低精度神经网络的表示能力。然而,演讲者承认这种方法有局限性,包括仅限于具有 8 位输出的量化线性运算符以及无法采用不同类型的舍入。

  • 00:05:00 在本节中,演讲者介绍了 QONNX,这是一种在 ONNX 中表示任意精度量化神经网络的方言。 QONNX 通过将一系列用于伪量化的操作合并到一个节点中来简化量化表示,同时还将其扩展到更广泛的场景集。它为不同类型的舍入、广播位输入和二进制量化提供选项。作为快速机器学习工作的一部分,该格式正被用于在 FPGA 上部署,各种工具可用于处理与 ONNX 运行时和预训练低精度模型集成的 QONNX。 QONNX 已经集成到 Brevitas Python 量化库中,NQCDQ 将集成到下一个版本中。
原因: