学习ONNX交易 - 页 5

 

ONNX 社区日! 2022 年 6 月 24 日直播

本次活动将于 6 月 24 日星期五在全新的微软硅谷园区举行。

该活动将涵盖 ONNX 社区更新、合作伙伴和用户故事以及大量社区网络。



ONNX 社区日!

简要总结:

  • 00:00:00 - 01:00:00  YouTube 视频“ONNX 社区日!”讨论了 ONNX 社区在使用机器学习模型的开发人员的互操作性和灵活性方面的工作的更新和改进。 ONNX 社区在开放治理下工作,创建、运行和可视化三类工具支持社区参与和使用 ONNX。该视频提供了不同方面的进展报告,例如 ONNX 规范的更新、新运营商和转换器的改进。演讲者还强调了 ONNX 的好处,包括为硬件供应商提供更广泛的客户以及为用户提供多种框架和硬件加速器。 ONNX 的未来包括提供可执行规范的 ONNX 函数的概念。

  • 01:00:00 - 02:00:00  ONNX 社区日活动讨论了与 ONNX 相关的多个主题,包括 ONNX 模型动物园和 ONNX 教程,它们提供预训练的机器学习模型和演示以与 ONNX 模型一起使用。该视频重点介绍了 ONNX 预处理工作组的工作,该工作组旨在标准化数据预处理操作以改进模型部署。演讲者还讨论了神经网络量化的基础知识,以及 TensorRT 如何通过各种融合支持量化网络,包括训练后量化和量化感知训练。他们还深入研究了 ONNX 在表示低精度量化方面的局限性,并提出了一种策略来扩展其表示能力,使用裁剪来诱导量化节点和反量化节点之间的精度。最后,该视频深入研究了一个关于量化和微调的 TensorFlow 保存模型的准确性的案例研究。

  • 02:00:00 - 03:00:00  ONNX 社区日展示了许多演讲者,他们讨论了元数据在机器学习模型中的重要性以及 ONNX 中的 Java 虚拟机 (JVM) 支持。演讲者强调使用基于硬件的技术来保护数据,并强调了 ONNX 与各种机器学习库(包括 DeepJ 和 Deep Java 库)的兼容性。他们展示了字节缓冲区的使用以提高效率,并讨论了标准化元数据对于负责任和可解释的 AI 的重要性。演示文稿还介绍了成功案例,包括使用 ONNX 和 ONNX 运行时改进了一家中国银行的运行时。 ONNX 社区正在致力于元数据创建、查询和过滤,支持 ONNX 中的机器可读元数据。总的来说,这些演讲强调了 ONNX 平台的优势以及社区对其发展的承诺。

  • 03:00:00 - 04:00:00  “ONNX 社区日!”视频涵盖了与 ONNX 生态系统相关的各种更新和功能。这包括讨论模拟量化以减少量化模型和预训练模型之间的精度下降,将使用 NVIDIA 工具包训练的 TensorFlow 模型部署到使用 TensorRT 的 ONNX 图形上,以及对 ONNX 运行时的改进,例如优化的张量形状、执行提供程序和支持移动平台。此外,还讨论了对 ONNX 本身的更新,包括对 XNNpack 库的支持以及为预处理/后处理任务创建 ONNX 运行时扩展。该视频还介绍了 Optimum 库,该库专注于加速 Transformer 模型从训练到推理的过程。

  • 04:00:00 - 05:00:00  ONNX 社区日讨论了与 ONNX 运行时及其用例相关的各种主题。演讲者描述了 ONNX 运行时包、PiTorch ONNX 转换器和 PyTorch 中的自定义 Ops 的功能。他们还讨论了流程监控和商业数字化等用例,以及与模型部署和兼容性测试相关的挑战。在整个活动中,一直强调 ONNX 运行时可以帮助提高性能和减少部署规模,但兼容性和选择对于确保一致的质量和速度至关重要。

  • 05:00:00 - 06:00:00  ONNX 社区日有几位演讲者讨论了用于使用 ONNX 框架优化和部署机器学习模型的各种工具和技术。 NVIDIA 讨论了他们使用块拆分进行推理来提高图像质量和模型兼容性的方法,以及用于调试和修改模型的 ONNX 专用工具。高通解释了他们如何使用 ONNX 作为交换格式将 AI 加速器集成到他们的设计中,并介绍了他们的软件堆栈,其中包括 ONNX 运行时和各种用于优化和部署的工具。此外,几位演讲者讨论了使用模块优化、检查点和形状推理等技术优化 ONNX 模型。该活动强调了 ONNX 对于各种设备用例的多功能性和可扩展性,并鼓励为继续发展 ONNX 项目做出贡献。最后一部分重点介绍了使用 SPIP 提案简化将机器学习模型部署到 Spark 的过程,旨在为开发人员隐藏选项卡处理转换和模型初始化的复杂性。介绍了升腾人工智能生态系统及其处理器,包括为构建人工智能应用程序和服务提供 API 的软件层“Kung”。讨论了 Khan 软件堆栈,并介绍了将其添加为 ONNX 运行时的新执行提供程序的路线图。活动以圆桌讨论结束,主题包括 ONNX for Mobile and Edge、模型部署、培训和运营、转换以及运营商,随后是欢乐时光和调查反馈。

详细的时间线摘要:
  • 00:15:00 在您喜欢的框架中创建模式,然后将您的模型导出为其他框架和工具可以使用的通用格式。这为使用机器学习模型的开发人员提供了更大的互操作性和灵活性。此外,ONNX 对于希望为机器学习模型创建优化运行时的硬件供应商来说是有益的,因为他们现在可以专注于支持 ONNX 定义的通用运算符集,而不必支持多个不同的框架。

  • 00:20:00 在本节中,演讲者讨论了使用 ONNX 的好处,它可以让用户访问多个框架和硬件加速器,并为硬件供应商提供更广泛的客户。 ONNX 的开发是由社区在开放治理下完成的,这意味着没有一家公司可以控制它。演讲者还重点介绍了工作组,包括架构和基础设施、运营商转换器、模型区、教程和一个新的预处理工作组。演讲者接着概述了 ONNX 模型的工具、创建、运行和可视化三类,并提供了过去六个月的一些统计数据,例如 PR、贡献者、明星和每月下载量的增长,加强社区对 ONNX 的参与和使用。

  • 00:25:00 在本节中,演讲者讨论了自上次社区更新以来 ONNX 社区中发生的发布和更新。 ONNX 1.11 于今年早些时候发布,引入了新的算子并更新了一些算子,包括 ONNX 模型中心,它允许用户从不同的模型库中拉取预训练模型。此外,还引入了诸如 compose 实用程序和函数构建器之类的实用程序,以及错误修复和基础架构改进。最近引入了 ONNX 1.12,其中包含更多新运算符、形状和推理增强功能以及对 python 3.10 的支持。演讲者还讨论了 ONNX 路线图流程和 12 个路线图请求,这些请求被选择用于进一步推进并分配给工作组。这些请求包括实施用于数据预处理的新运算符、用于 ONNX 的 C API 等。

  • 00:30:00 在视频的这一部分,演讲者讨论了在满足更多结构化量化信息流经模型和张量的需求方面取得的进展。与 ONNX 运营商的端到端管道提案正在进一步完善,因为它被确定为长期拦截。到目前为止,转换器已经取得了一些进展,更高功能的操作得到了支持。演讲者还谈到了不同的领域,例如需要更多的志愿者,因为这是一个社区项目,以及要求公司让更多的人参与进来。演讲者列出了不同的资源,例如网站、GitHub、Slack 频道和 ONNX 日历。

  • 00:35:00 在本节中,演讲者讨论了 ONNX 的最新更新和改进。最近发布了两个版本,其中包含各种更新,例如改进的芯片对操作员的影响以及更稳定地处理错误和可选输入。此外,演讲者还强调了新增的两个重要版本:Model Composer 和 Function Builder。模型转换器也变得更加稳定,团队计划在未来为混合版本提供更好的支持。总的来说,不可能列出贡献者所做的所有改进,但他们继续致力于改进 ONNX。

  • 00:40:00 Operator SIG 的 Rama 总结了 ONNX 规范的最新变化和更新。 Operator SIG 的重点是发展构成 ONNX 规范的运算符集,添加新的运算符并阐明它们的规范。在最近的两个版本中,引入了新的运算符,例如网格采样和层归一化。现有运算符(如分散运算符)已更新以支持重复索引,同时一些运算符已扩展以提供对类型(如 b float 16 和可选类型)的支持。 Rama 还提到计划推动一些新的运营商很快成为功能。

  • 00:45:00 在本节中,演讲者讨论了 ONNX 的未来计划,以及在拥有紧凑的规范和支持规范中需要更多操作的新型模型之间的权衡。这一挑战的解决方案是 ONNX 功能的概念,它为操作提供可执行规范并允许在冲突的需求之间取得平衡。演讲者提到计划通过将它们提升为函数并使用名为 ONNX-Crypt 的子集在 Python 中进行创作来减少原始运算符的集合。给出了函数示例,例如 Jello 激活函数和 dropout op,以说明控制流的使用如何使自然和紧凑地指定它们的语义变得更加容易。

  • 00:50:00 在本节中,Kevin Chen 介绍了转换器 sig 的最新情况以及自上次会议以来所做的工作。他讨论了前端转换器更新,包括 PyTorch、TensorFlow 和 sk-learn 到 ONNX 转换器。对于 PyTorch 转换器,最新版本支持最多 ONNX 偏移量 16 的 ONNX 导出,并且添加了新功能,例如能够将神经网络模块专门导出为 ONNX 本地函数。 Chen 还介绍了后端转换器更新,例如 ONNX centrality 和 ONNX TensorFlow 转换器。最后,Chen 展示了转换器签名的路线图并鼓励人们参与进来。

  • 00:55:00 在本节中,演讲者讨论了 SK 学习到 ONNX 转换器、ONNX 检测器密钥转换器和 ONNX TensorFlow 转换器的更新和改进。建议用户更新至最新版本,以提升模型转换时的用户体验。转换棒的路线图包括改进社区驱动的工具、标准化实用程序功能以及改进操作员和抵消支持等目标。鼓励用户加入 Slack 上的 ONNX 转换器频道或订阅 ONNX 转换器 SIG 邮件列表以参与社区并提供反馈。

  • 01:00:00 Microsoft 的 Jackie 介绍了 ONNX Model Zoo 和 ONNX Tutorials。 ONNX Model Zoo 是预训练的、最先进的机器学习模型的集合,主要由 ONNX 社区贡献。动物园目前有 168 个模型,包括 40 个 ONNX 模型和 35 个基于视觉的 ONNX 模型,用于图像分类和目标检测。 ONNX 教程提供了在不同场景和平台的实践中演示 ONNX 的文档和笔记本。自上次研讨会以来,Model Zoo 已经有了多项改进,包括来自英特尔的新量化模型和通过常规 CI 测试增加的测试覆盖率、修复损坏的测试数据集以及与团队 Hugging Face 合作创建用于演示模型的 Web 界面。

  • 01:05:00 演讲者讨论了使用 ONNX 的教程和演示的可用性,包括一个网站,该网站只需编写几行 Python 代码即可轻松处理图像和 ONNX 模型。他们还讨论了 ONNX Model Zoo 的未来路线图,计划让更多模型由 ORT 运行并纳入更多贡献,包括量化模型和训练示例模型。此外,他们还强调了 ONNX 预处理工作组的工作,该工作组专注于简化数据预处理以供 ONNX 模型使用。

  • 01:10:00 在视频的这一部分,演讲者讨论了数据预处理管道中缺乏标准化的问题,强调了 Pillow 和 OpenCV 等流行库在图像预处理方面的差异。在不同平台上部署模型时,这些差异可能会导致准确性问题。演讲者介绍了 ONNX 小组标准化数据预处理操作以避免歧义并改进模型部署的目标。该小组一直致力于开发基础设施以在模型中包含数据预处理,例如组合实用程序的开发和用于批处理的序列图运算符。 ONNX 小组还在研究标记模型的预处理部分以供后端识别的方法。此外,该小组还提议对调整大小运算符进行扩展,包括可选的抗锯齿过滤器和保持纵横比策略。

  • 01:15:00 演讲者讨论了建议的中心裁剪或路径操作的实施,它提供了更高级别的抽象并依赖于现有的 pad 和 slice 运算符。他们鼓励观众加入他们的 Slack 频道和月度会议来分享想法。以下介绍由 Joaquin Anton 提供,他回顾了 ONNX 预处理工作组的目标并分享了他们最近所做的工作。来自意大利的 Marvin 也介绍了自己以及作为自然语言处理领域的开发者和数据科学家的工作。

  • 01:20:00 演讲者讨论了在开始处理项目之前检查 ONNX 文档的重要性。他们解释说,并非所有模型都可以轻松地为 ONNX 进行转换或优化,重要的是要确保在所使用的框架中实现项目所需的操作功能。此外,演讲者反对最佳性能选项将始终优化模型的假设,因为有时这些选项实际上会降低准确性。总的来说,重要的是要仔细考虑项目的架构并检查 ONNX 文档和工具(如 ONNX 优化器)以避免错误并确保在云或设备上成功部署。

  • 01:25:00 在本节中,来自 Nvidia 的 Jiraj Perry 讨论了神经网络量化的基础知识以及 TensorRT 如何通过各种融合支持量化网络。他解释说,量化是使用线性或非线性缩放技术将连续值转换为一组离散值的过程,它可以提供更快的推理和更低的内存占用。但是,可能需要权衡准确性。 Jiraj 还提到了不同的量化方案以及量化参数或 q 参数的重要性。然后,他介绍了训练后量化 (PTQ) 和量化感知训练 (QAT) 以及它们如何确定 q 参数。

  • 01:30:00 在本节中,视频讨论了训练后量化 (PTQ) 和量化感知训练 (QAT)。 PTQ 涉及在校准数据集上运行预训练模型并收集逐层统计数据以确定每层的动态范围以计算量化参数。 QAT 在所需层引入 qdq 节点,并针对少量 epoch 微调图形以学习模型或量化参数。 PTQ 通常速度更快并且对最终精度的控制较少,而 QAT 速度较慢但提供更多的精度控制。该视频还强调了 Google 的 TF Mod 工具包与 NVIDIA 的基于 TF Mod 构建的 TF2 量化工具包在方法上的差异。

  • 01:35:00 在本节中,演讲者讨论了 Nvidia 的量化工具包和 tf mod 在 qdq 节点放置位置方面的差异。 Nvidia 的工具包将 qdq 节点放置在网络中某一层的输入和权重处,而 tf mod 建议将它们放置在某一层的权重和输出处。演讲者还介绍了 TensorRT 如何通过层融合优化模型,例如逐点融合卷积和池化融合,以及 qdq 节点的专用融合。此外,TensorRT 的图形优化器执行 qdq 传播以移动 q 和 dq 节点,以确保图形的最大部分在摄入量中运行。提出的融合示例包括平均池量化和元素明智的加法融合。最后,演讲者检查残差块中的量化融合。

  • 01:40:00 在本节中,演讲者解释了在身份分支中添加 qdq 节点的重要性,以便在重新加载操作时从 Tensor RT 获得最佳性能。生成的融合看起来像权重和输入的 dq 个节点被传播到广告之外,并在添加层之后与 q 个节点融合。演讲者强调原始图中需要 qdq 节点以获得模型的最佳性能,并警告说不正确使用它们会导致模型性能不佳。演讲者最后邀请大家讨论如何在 TensorFlow 工具包中插入 qdq 节点。

  • 01:45:00 在本节中,演讲者承认幻灯片导航存在技术困难,并向听众保证该问题将很快得到解决。然后,在获得量化和微调的 TensorFlow 保存模型后,他们继续讨论关于准确性的案例研究。请观众在短暂休息前提出任何问题。

  • 01:50:00 在本节中,演讲者讨论了量化的概念以及如何使用它来表示量化神经网络中的低精度。量化是两个函数的组合:将浮点值映射到整数值的量化函数和将整数值映射回浮点表示的量化函数。这两个函数的组合称为伪量化。此过程允许将表示映射到仅整数表示。均匀量化的使用,尤其是精度降低的情况下,允许在 RF 足球平台上每秒进行 17 亿次采样,延迟时间小于 3 微秒。

  • 01:55:00 在本节中,演讲者讨论了 ONNX 在表示低精度量化方面的局限性,尤其是低于 8 位,并提出了一种策略来扩展 ONNX 的表示能力,方法是利用裁剪在量化节点和反量化节点之间引入精度.此策略添加了一个额外的裁剪功能,该功能支持整数边界,并且不影响与现有库和工具的追溯兼容性。但是,此策略仅扩展到量化线性允许作为运算符进行的范围内,并且它对不同类型的舍入有一些限制。演讲者还提到了他们在指数方言 (tuonex) 量化方面所做的努力,该方言表示仅在一个节点中进行伪量化,同时扩展到具有输入广播、二进制量化选项等的更广泛的场景集。这种格式被用作他们在 fpgas 上部署工作的一部分,他们的工具(例如 q ONNX 和 nqcdq)与现有的量化库集成,并已在 fpga 社区中得到采用。

  • 02:00:00 在本节中,来自 Mithril 的 Daniel 讨论了他们如何开发一种名为“Blind AI”的解决方案,该解决方案允许在利用硬件保护数据的安全区域中部署 ONNX 模型。通过使用基于硬件的技术,该解决方案提供隔离区内存内容的隔离和加密,从而防止任何来自外部的倾销尝试。数据在 enclave 内部被解密,任何恶意的内部人员都无法访问数据,这在隐私和安全方面对数据所有者来说是一个巨大的优势。 Blind AI 是一种易于上手的开源解决方案,AI 提供商可以毫不费力地维护和销售该解决方案。

  • 02:05:00 在本节中,演讲者讨论了部署具有进度保证的 AI 模型的能力,使用 Python SDK 安全地上传模型并发送数据进行分析,而无需第三方访问数据。 ONNX 的表现力也很突出,这使其能够涵盖各种用例,包括行李检查、分析医疗文件和面部识别。演讲者还展示了实践中使用的不同模型及其在飞地内外的速度,由于它提供的保护而增加了合理的延迟。此外,ONNX 需要最少的代码库,出于安全原因使其更好,并且能够加强每个操作员,确保安全的 enclave 使用。演示文稿以关于他们的 GitHub 的信息以及他们如何涵盖各种场景以及深入研究技术安全细节的机会作为结尾。

  • 02:10:00 在本节中,演讲者讨论了在 ONNX 中启用机器可读 AI 元数据的提议,其中涉及跟踪模型的来源和其他相关特征,以确定它如何随时间移动以及在给定特定用例的情况下如何演变。该提案最初于 2020 年 10 月提交给 ONNX 指导委员会,现在该团队希望进一步扩展该提案,将元数据的创建、查询和可视化作为模型中心端到端设计的一部分,动物园。演讲者强调了元数据作为负责任和可解释的 AI 的关键推动因素的重要性,并强调了它在缩小故障模式和识别 AI 系统痛点方面的作用。

  • 02:15:00 在 ONNX 社区日演讲的这一部分,演讲者讨论了元数据在模型中的重要性,以及使用 RDF 作为机器可读性和标准化方法来表示元数据的潜力。他们解释了这种方法如何帮助建立实体之间的关系、保持透明度和跟踪来源,回答有关导致模型准确性低于预期的原因的问题。演讲者还讨论了使用 SPARQL 查询元数据的强大功能,并解释了具有 RDF 格式元数据的模型如何提供简单模型卡无法提供的信息。

  • 02:20:00 在本节中,演讲者讨论了 Furnace 控制词汇表,这是一套使数据和数字资产可访问、可互操作和可重用的指导原则。 Furnace 的原则由语义网社区确定,包括公平性、可信赖性和可持续性。可以使用 Furnace 本体查询 RDF 编码的元数据,以发现适合 NLP 任务的模型,识别模型的创建者和大小,并跟踪模型的碳足迹以对其进行分类和排序。 RDF 及其查询语言 Sparkle 的可扩展性允许在考试机构选择的词汇表之外进行无限扩展。这可以实现对负责任的 AI 和混合精度电流的跟踪。

  • 02:25:00 在本节中,主持人讨论了 ONNX 社区日的查询和过滤功能。它们展示了元数据作者如何通过使用元数据标签来识别使用包含私人或个人信息的数据集训练的模型。演示者还演示了扩展过滤功能如何使用户能够以混合精度查询模型。他们强调模型配置文件的可视化和可解释的 AI 技术,以有效地显示元数据。演示者呼吁采取行动,考虑围绕模型创建和使用的具体设计,涵盖整个元数据创建、查询和从集线器工作流过滤,并支持 ONNX 中的机器可读元数据。他们目前正在准备稻草人实施和探索元数据创建技术。

  • 02:30:00 在本节中,Oracle 实验室的 Adam Pocock 讨论了使用 ONNX 支持 Java 虚拟机 (JVM) 的重要性。虽然大多数 ML 应用程序是用 Python 以外的语言编写的,例如 Java,但将机器学习引入这些语言至关重要。 ONNX 运行时 Java API 由 Oracle 实验室开发,用于将机器学习融入 Java 和其他语言,具有性能影响最小和易于部署等特性。 Adam 还提供了一个代码示例来演示 Java API 与其他 API 之间的相似之处。

  • 02:35:00 在本节中,演讲者讨论了如何使用 ONNX 张量(字节流的字节缓冲区表示)来提供数据和运行模型。尽管可以在 Java 中使用常规数组,但演讲者建议使用字节缓冲区,因为它们的零复制路径可以提高处理数据的效率。演讲者还指出,Java 的多维数组不是机器学习的最佳选择,因为它们不是扁平的并且涉及大量指针追逐。演讲者进一步讨论了升级到更新版本的 Java、添加新功能以及构建以匹配 ONNX 运行时树的计划。此外,演讲者还介绍了一个从 Java 编写 ONNX 模型的开源库,它在 JVM 上的任何地方都可用。

  • 02:40:00 在本节中,演讲者讨论了 ONNX 工具集与 DeepJ 等新机器学习库的兼容性,以及它如何与 ONNX 运行时集成以提供一流的性能。 DeepJ 在各种深度学习库上创建了一个抽象层,抽象了所有必要的库,并提供了几个运算符后端供机器学习引擎使用,例如 Apache MixTape、Tensorflow、PyTorch、ONNX、Pedal 等。他们还在探索如何标准化此工具集中的元数据,以发出标准元数据格式,同时继续扩展运算符枚举。

  • 02:45:00 在本节中,演讲者讨论了 Deep Java 库的优势,该库包括一组预训练模型,涵盖图像分类、对象检测、情感分析和动作识别等任务。该图书馆已做好服务准备,并通过了严格的测试,以尽可能最佳的速度和内存控制执行,正如它与 DHL 成功使用半年多而没有任何错误所证明的那样。此外,演讲者还分享了几个用例,其中使用 ONNX 和 ONNX 运行时来实现显着的性能提升并减少延迟。一个成功的案例是一家中国银行能够将其 OCR 模型在单个图像上的运行时间从 1 秒减少到不到 400 毫秒。此外,演讲者介绍了混合引擎概念,允许同时加载两个引擎并提供它们之间的平滑过渡。

  • 02:50:00 在本节中,演讲者解释了一种使用直接缓冲区将指针从 Python 直接发送到 ONNX 运行时的方法,这避免了数据复制并提高了性能。他们还引入了 ND 管理器,这是一种在 DeepDraw 库中实现的树状架构,可提供更具成本效益的内存集合。演讲者讨论了客户如何在不更改一行代码的情况下从使用 PyTorch 过渡到 ONNX 运行时。随后,来自 Hype Factors 的演讲者谈到了他们的媒体情报公司,以及他们如何选择以 JVM 为基础构建基础设施,以获得开发人员体验、可重用组件的生态系统和高可扩展性。

  • 02:55:00 在本节中,演讲者讨论了他们媒体分析网站的技术方面,包括使用 JVM 为网站的大部分功能提供支持,以及迁移到一个主要丰富所有进来的数据的系统。每天有数十亿次 GPU 推理,该产品的功能在很大程度上依赖于机器学习和模型管理,这已成为保持一切正常运行的重要组成部分,导致流程变得至关重要。数据包含各种格式,包括 HTML 和 PDF,他们跟踪其运行时间以动态丰富数据,包括命名实体识别、显着性、情感等。一路上遇到了很多挑战,包括转换错误和 DTL 中罕见的内存泄漏,这需要一段时间才能解决。
 

ONNX 社区日! 2022 年 6 月 24 日直播

本次活动将于 6 月 24 日星期五在全新的微软硅谷园区举行。

该活动将涵盖 ONNX 社区更新、合作伙伴和用户故事以及大量社区网络。



ONNX 社区日!

简要总结:

  • 00:00:00 - 01:00:00 YouTube 视频“ONNX 社区日!”讨论了 ONNX 社区在使用机器学习模型的开发人员的互操作性和灵活性方面的工作的更新和改进。 ONNX 社区在开放治理下工作,创建、运行和可视化三类工具支持社区参与和使用 ONNX。该视频提供了不同方面的进展报告,例如 ONNX 规范的更新、新运营商和转换器的改进。演讲者还强调了 ONNX 的好处,包括为硬件供应商提供更广泛的客户以及为用户提供多种框架和硬件加速器。 ONNX 的未来包括提供可执行规范的 ONNX 函数的概念。

  • 01:00:00 - 02:00:00 ONNX 社区日活动讨论了与 ONNX 相关的多个主题,包括 ONNX 模型动物园和 ONNX 教程,它们提供预训练的机器学习模型和演示以与 ONNX 模型一起使用。该视频重点介绍了 ONNX 预处理工作组的工作,该工作组旨在标准化数据预处理操作以改进模型部署。演讲者还讨论了神经网络量化的基础知识,以及 TensorRT 如何通过各种融合支持量化网络,包括训练后量化和量化感知训练。他们还深入研究了 ONNX 在表示低精度量化方面的局限性,并提出了一种策略来扩展其表示能力,使用裁剪来诱导量化节点和反量化节点之间的精度。最后,该视频深入研究了一个关于量化和微调的 TensorFlow 保存模型的准确性的案例研究。

  • 02:00:00 - 03:00:00 ONNX 社区日展示了许多演讲者,他们讨论了元数据在机器学习模型中的重要性以及 ONNX 中的 Java 虚拟机 (JVM) 支持。演讲者强调使用基于硬件的技术来保护数据,并强调了 ONNX 与各种机器学习库(包括 DeepJ 和 Deep Java 库)的兼容性。他们展示了字节缓冲区的使用以提高效率,并讨论了标准化元数据对于负责任和可解释的 AI 的重要性。演示文稿还介绍了成功案例,包括使用 ONNX 和 ONNX 运行时改进了一家中国银行的运行时。 ONNX 社区正在致力于元数据创建、查询和过滤,支持 ONNX 中的机器可读元数据。总的来说,这些演讲强调了 ONNX 平台的优势以及社区对其发展的承诺。

  • 03:00:00 - 04:00:00 “ONNX 社区日!”视频涵盖了与 ONNX 生态系统相关的各种更新和功能。这包括讨论模拟量化以减少量化模型和预训练模型之间的精度下降,将使用 NVIDIA 工具包训练的 TensorFlow 模型部署到使用 TensorRT 的 ONNX 图形上,以及对 ONNX 运行时的改进,例如优化的张量形状、执行提供程序和支持移动平台。此外,还讨论了对 ONNX 本身的更新,包括对 XNNpack 库的支持以及为预处理/后处理任务创建 ONNX 运行时扩展。该视频还介绍了 Optimum 库,该库专注于加速 Transformer 模型从训练到推理的过程。

  • 04:00:00 - 05:00:00 ONNX 社区日讨论了与 ONNX 运行时及其用例相关的各种主题。演讲者描述了 ONNX 运行时包、PiTorch ONNX 转换器和 PyTorch 中的自定义 Ops 的功能。他们还讨论了流程监控和商业数字化等用例,以及与模型部署和兼容性测试相关的挑战。在整个活动中,一直强调 ONNX 运行时可以帮助提高性能和减少部署规模,但兼容性和选择对于确保一致的质量和速度至关重要。

  • 05:00:00 - 06:00:00 ONNX 社区日有几位演讲者讨论了用于使用 ONNX 框架优化和部署机器学习模型的各种工具和技术。 NVIDIA 讨论了他们使用块拆分进行推理来提高图像质量和模型兼容性的方法,以及用于调试和修改模型的 ONNX 专用工具。高通解释了他们如何使用 ONNX 作为交换格式将 AI 加速器集成到他们的设计中,并介绍了他们的软件堆栈,其中包括 ONNX 运行时和各种用于优化和部署的工具。此外,几位演讲者讨论了使用模块优化、检查点和形状推理等技术优化 ONNX 模型。该活动强调了 ONNX 对于各种设备用例的多功能性和可扩展性,并鼓励为继续发展 ONNX 项目做出贡献。最后一部分重点介绍了使用 SPIP 提案简化将机器学习模型部署到 Spark 的过程,旨在为开发人员隐藏选项卡处理转换和模型初始化的复杂性。介绍了升腾人工智能生态系统及其处理器,包括为构建人工智能应用程序和服务提供 API 的软件层“Kung”。讨论了 Khan 软件堆栈,并介绍了将其添加为 ONNX 运行时的新执行提供程序的路线图。活动以圆桌讨论结束,主题包括 ONNX for Mobile and Edge、模型部署、培训和运营、转换以及运营商,随后是欢乐时光和调查反馈。


详细的时间线摘要:

  • 03:00:00 在本节中,一位演讲者讨论了他们在 ONNX 生态系统方面的经验以及他们在使用它时面临的挑战。他们谈到需要匹配驱动程序并设置监控以确保系统保持平稳运行。他们还提到了他们未来的计划,即通过 GPU 加速测试来提高 GPU 效率、添加更多模型以及提高系统的整体健壮性。演讲者邀请就此用例提出任何问题和讨论,并借此机会感谢大家。该视频将在午餐后继续播放 NVIDIA 演讲。

  • 03:25:00 抱歉,此文字记录摘录与“ONNX 社区日”无关!视频。你能提供另一个视频片段让我总结一下吗?

  • 03:30:00 在视频的这一部分,演讲者讨论了如何模拟量化并存储最终的 q 参数,以减少量化模型和预训练模型之间的精度下降。执行量化感知训练的一种方法是使用 TensorFlow 模型优化工具包或 Nvidia 构建的工具包,它提供诸如使用层名称和类属性量化层以及基于模式的量化等功能。演讲者指出,Nvidia 的工具包使用一种对称量化变体,它使用一个扩展为 GPU 上的 QAT 模型提供最佳性能。

  • 03:35:00 在本节中,我们将了解使用 TensorRT 将使用 NVIDIA 的 TF2 量化工具包训练的模型部署到 ONNX 图上的过程。该工作流程包括使用 NVIDIA 的工具包对预训练的 TensorFlow 2.0 模型进行量化,针对少量 epoch 对其进行微调,然后使用 TF2ONNX 转换器将其转换为 ONNX 图。然后使用 TensorRT 的 API 从 ONNX 图中生成 TensorRT 引擎。我们看到,量化感知训练提供了一种以较低精度部署深度神经网络的替代方案,并且由于模型参数微调,与 ptq 模型相比,qrt 模型在推理过程中可能不太容易出现精度下降。最后,使用 ResNet 模型进行的实验表明,INT8 精度与 FP32 基线精度相当,并且延迟比 FP32 模型快 10 倍以上。

  • 03:40:00 在本节中,Ryan Hill,一位自创建以来一直致力于 ONNX 运行时的软件工程师,将介绍 ONNX 运行时的特性和用法。 ONNX runtime 是 ONNX 模型的运行时,完全跨平台并且具有许多编程语言的语言绑定。微软在其所有主要产品组(如 Windows、Office 和 Azure)中都使用它,同时有超过 160 个模型在生产中使用 ONNX 运行时。 Hill 在最近的版本中经历了显着的新特性,包括将操作内核用作数学库的能力以及完全在内存中提供外部初始化程序的能力。性能改进包括添加转置优化器、优化堆分配以及减少布局转换的需要。

  • 03:45:00 在本节中,演讲者讨论了对 ONNX 运行时所做的改进,包括优化的张量形状和内联向量类,从而减少了堆分配并提高了性能。他们还解释了执行提供程序的好处,使 ONNX Runtime 能够在各种硬件可能性上以最佳方式执行,包括作为后备选项的完整 CPU 实现。此外,他们还强调了为支持移动平台而进行的更新以及为移动开发人员改进的可用性,包括在运行时使用 NHWC 转换以及添加具有完整 ONNX Runtime 构建的 Android 和 iOS 包。最后,他们介绍了 ONNX Runtime Web,它由与 ONNX Runtime 相同的核心代码库和较小的二进制文件支持,并讨论了名为 ONNX Runtime Common 的 JavaScript 库的介绍。

  • 03:50:00 在本节中,演讲者讨论了 ONNX 的更新,包括对 XNNpack 库的支持以及 1.12 版本中即将推出的 OpenGL 支持。他们还解决了数据预处理和后处理以及创建 ONNX 运行时扩展方面的挑战,这些扩展提供了一个专注于模型预处理工作的可共享自定义操作库。这些扩展包括潜在的功能,例如将文本转换为大写或小写以及将正值和负值分离为单独的张量。当前的库主要集中在自然语言处理以及视觉和文本领域,但预计这将随着新需求的确定而发展。他们还介绍了来自 Hugging Face 的 Jeff,他讨论了 ONNX 与 Optimum 库的集成以加速 Transformers 模型。

  • 03:55:00 在本节中,演讲者讨论了变压器模型的强大功能,以及 Tesla、Gmail、Facebook 和 Bing 等大公司如何使用它们每天进行数十亿次预测。他们解释说,Hugging Face 的目标是通过易于访问的预训练模型和工具让世界上的每家公司都可以访问这些模型并使用它们。他们还讨论了他们专注于建立一个共享和改进可能的社区,他们的图书馆有超过 1300 名开源贡献者,并且可以访问超过 50,000 个针对每种机器学习任务和语言的微调模型。演讲者随后介绍了他们的库 Optimum,该库专注于加速 Transformers 模型从训练到推理的过程,解决随着模型参数增加而带来的计算、内存和带宽资源挑战。


  • 04:00:00 在本节中,演讲者讨论了 Optimum 工具包中的 ONNX 运行时包及其加速变压器模型训练和推理的能力。他们引入了名为 ORT Trainer 的新训练器类,它允许用户获得深度速度的原生集成,并在训练吞吐量方面实现高达 40% 的加速。对于推理,主要有三个类:ORT Optimizer、RT Quantizer 和 RT Model for Task。通过这些类,用户可以简化模型中的图形、优化权重,并受益于 ONNX 运行时提供的所有硬件加速。演讲者还提到了通过这些最佳加速推理管道类实现序列到序列模型优化的协作努力。

  • 04:05:00 在本节中,两位主持人讨论 ONNX 社区,重点讨论 ONNX 模型的优化和转换过程。第一位演示者介绍了最佳库,它允许用户优化和量化他们的模型,增加吞吐量并减少延迟,同时保持模型的准确性。第二位演讲者讨论了 PiTorch ONNX 转换器的架构和流程,解释了将 PiTorch 模型转换为 Torch 中间表示、使用图形优化和转换为 ONNX IR 的步骤。他们还强调了一些有趣的功能,例如支持以 QTQ 格式导出量化模型,以及捕获 ONNX 模型中的 Python 控制流循环和 ifs 作为 ONNX 循环和 ONNX if 节点。

  • 04:10:00 在本节中,演讲者讨论了在 PyTorch 中导出自定义 Ops 的各种方法,包括编写自定义 Torch autogr aph 函数以及定义前向和后向方法。演讲者解释了如何利用 API 注册自定义符号函数,以告诉导出器如何将其导出为标准 ONNX 操作或自定义域中的任何自定义操作。然后他们引入了 ONNX Local Function 功能,允许用户指定某个 Torch 模块类或节点类型作为后端的功能,以便在没有指定内核的情况下仍然能够运行模型。最后,演讲者提到团队将继续专注于支持更多模型并改善诊断故障的体验。

  • 04:15:00 在本节中,讨论了一个用例,其中重复使用现有摄像头系统来检测进入移动机械附近危险区域的员工。使用用于检测人员的开源 ONNX 模型和用于实时分析和事件处理的 SAS 的 Sasebo 流处理工具,开发了一种可以每秒处理数百万个事件并扩展到更大系统的解决方案。该解决方案还通过图形工作室和 Jupyter notebook 提供,供数据科学家开发模型,并且 ONNX 运行时已集成到 Sasebo Stream Processing 中。为了确保弹性,建议采用模块化解决方案,将图像处理分为多个步骤,并使用 Kafka 作为缓冲队列。

  • 04:20:00 在本节中,演讲者描述了一个计算机视觉处理模型,该模型已使用 Kubernetes 作为部署机制部署在边缘。该模型包括一个摄取过程,每个摄像头都有一个 pod,一个用于视频数据的 Kafka 总线,以及一个使用计算机视觉模型创建结果的处理 pod。然后将结果发送到第三个 pod,该 pod 处理来自客户的额外传感器数据,以了解被记录的设备是否处于活动状态。此外,演讲者解释说,该架构目前正在其客户的一个设施中投入生产,并且 ONNX 运行时集成确保了最佳的价值实现时间,这要归功于公开可用的预训练模型和客户资产的重用。架构弹性是另一个关键优势,并且得益于 Kubernetes 和 Kafka。

  • 04:25:00 在本节中,Bazaar Voice 的 Matthew 讨论了商业数字化以及品牌和零售商如何转移到互联网上无限的货架空间。凭借电子商务公司拥有的数据规模,使用人工智能创造有影响力的洞察力可以改变游戏规则。 Matthew 以 Bazaar Voice 为例说明了这一点,它每月管理和处理超过 10 亿购物者的数据,并为品牌和零售商提供超过 80 亿条总评论。通过专注于跨目录共享产品评论,产品匹配的概念发挥了关键作用。 Matthew 解释了如何构建机器学习模型以通过比较唯一的产品标识符来执行产品匹配,但任何剩余部分都是手动完成的。要实施可产生真正业务价值的解决方案,理想的方法是采用轻量级、经济高效且可保持性能的解决方案。

  • 04:30:00 在本节中,演讲者讨论了部署机器学习模型的不同选项,包括虚拟服务器、云 ML 平台和无服务器功能,例如 Azure Cloud Functions 或 AWS Lambdas。在评估了每个选项的优缺点后,演讲者和他们的团队决定开发一个导出为 ONNX 格式的 scikit-learn 模型,使用 Python 构建它,将其部署到无服务器功能,并使用节点环境在 ONNX 上运行推理运行。演讲者还提到 ONNX 有助于减少模型的部署大小,但强调了在无服务器函数的超时和部署大小限制内工作的挑战,以及 Python 包的成本和大小限制。

  • 04:35:00 在本节中,Adobe Nikhil Calro 的高级软件工程师讨论了针对视频和音频工作流程的高性能机器学习所涉及的独特挑战。这些挑战包括资源限制、数据强度和计算量大的要求。为解决这些问题,Adobe 使用技术和管道的组合来加速工作流,包括 ONNX 运行时以支持 Windows 中的机器学习工作流和 Direct ML 执行提供程序以在 Windows 平台上加速 GPU。 Calro 还指出,Adobe 的机器学习工作流程旨在让创作者能够将更多时间花在创作过程上,减少花在冗余和重复性任务上的时间。

  • 04:40:00 在本节中,演讲者讨论了 Adobe 的 Creative Cloud 应用程序如何将整个 Windows 生态系统作为单一平台,并且必须在支持 Windows 的所有主要 IHV(例如 Nvidia、Intel 和 AMD)之间提供特性和功能对等。他们选择了 DirectML 执行提供程序来启用供应商特定的硬件,例如 Nvidia GPU 上的张量核心,因为它为其他异步计算工作流留下了免费的硬件。他们还通过在 ONNX 运行时之上构建框架并尝试将推理请求组装到批处理工作流中以减少与 GPU 的资源争用并最大限度地减少驱动程序开销来进行额外的性能优化。他们举了一个场景编辑检测工作流的例子,这是一个资源极其密集的工作流,但他们能够在大约 10 秒或六倍的实时时间内端到端地运行从解码到推理的整个管道。

  • 04:45:00 在本节中,演讲者讨论了 ORT 和 Direct ML 执行提供商提供的性能支持如何使使用现代高端 GPU 在 GPU 渲染期间启用基于机器学习的工作流成为可能。他们计划将他们的流水线转换为看起来更像右边的流水线,最大限度地减少到 CPU 的传输,并尽可能多地将内容保留在 GPU 或 GPU 可寻址硬件上。随着他们的更多 GPU 计算过渡到 DX12,这将变得更加容易,从而在他们的 OP 中消除与 OpenCL 和 CUDA 相关的开销到 DX12。

  • 04:50:00 在本节中,Topaz Labs 的软件开发人员 Alexander Zang 讨论了在台式机和笔记本电脑上部署图像模型的挑战。他解释说,这种部署的关键部分是适应现有的工作流程,无需手动配置即可获得预期的性能,并提供高质量的图像模型。 Alexander 解释说,与服务器部署不同,桌面部署缺乏对系统的控制,尤其是来自不同供应商的不同 GPU 具有不同级别的内存和响应能力限制。他对此的解决方案是依靠 ONNX 提供的每个硬件供应商的不同推理库。这种方法允许 Topaz Labs 创建模型架构,供不同的推理库使用,同时节省手动工作。

  • 04:55:00 在本节中,演讲者讨论了与模型转换相关的挑战以及在训练模型之前测试兼容性问题的必要性。强调了模型规范中的歧义问题,以及测试不同库的性能和一致性的需要。演讲者还解释了执行多次转换的原因,指出使用更通用的界面会导致额外的加载步骤和转换成本,从而影响其应用程序的性能。最后,解释了选择适当配置和处理运行时推理管道的过程,强调了兼容性和选择的必要性,同时确保桌面的一致质量和速度。



  • 05:00:00 在本节中,NVIDIA 的一位演讲者介绍了他们处理 ONNX 模型兼容性和提高跨桌面系统图像质量的方法,方法是将图像分成块并通过推理运行它们,最大限度地提高吞吐量并可能在多个设备和库上运行在平行下。演讲者还解决了确保新模型架构可以添加并在所有库中表现良好的困难,这可能需要大量的工作和时间。然后他们继续讨论两个工具,ONNX Craft Surgeon,一个允许您创建和修改 ONNX 模型的 python 库,以及 Polygraphy,一个用于调试深度学习模型的工具包。演讲者解释了这些工具的工作原理,以及如何使用它们来构建像构建 tf 图一样简单的模型。

  • 05:05:00 在本节中,演讲者介绍了 ONNX 工具,其中包括 Python API 和各种命令行工具,这些工具提供了许多用于操作 ONNX 模型的功能。演讲者重点介绍了 ONNX 特定的工具,例如检查模型,它显示了 ONNX 模型的文本表示,以及 surgeon sanitized subtool,它简化和折叠了模型中的常量。 surgeon extract 允许用户从模型中提取子图以对其进行调试,而 model bisector debug reduce 的工作方式与 git bisect 类似,但适用于 ONNX 模型,允许用户找到最小的失败模型来诊断系统中的错误。

  • 05:10:00 在本节中,演示者讨论了使用 Calligraphy debug reduce 工具来调试可能存在运行时问题的模型。通过减小模型大小并测试每个中间模型,开发人员可以识别代码中的问题区域并简化调试过程。演示者还解释了 Qualcomm 如何通过使用 ONNX 作为一种可用于各种设备(从耳塞到笔记本电脑再到汽车系统)的交换格式来与社区合作。通过使用 ONNX 定位模型,开发人员可以创建与 Qualcomm 支持的所有设备兼容的模型。

  • 05:15:00 在本节中,演讲者讨论了处理需要不同模型、实现和时序要求的各种设备架构所面临的挑战。他举了一个例子,说明为手机中的深度传感器和摄像头构建的相同算法和技术现在如何用于安全智能门铃和汽车内外监控摄像头。然后,他强调了可扩展性的重要性,并使用运行 Inception V3 模型的示例比较了 CPU、GPU 和 AI 加速器上处理机器算法之间的差异,其中在 AI 加速器上运行该模型每秒可以提供多达一千次推理,释放 CPU 用于其他有用的任务。

  • 05:20:00 在本节中,高通公司的一位代表解释了他们如何将人工智能 (AI) 加速器集成到他们的硬件中以提高性能和可扩展性。通过使用专门构建的 AI 加速器,他们可以处理 AI 工作负载,而不会消耗额外的能源或降低通常因使用 CPU 或 GPU 而导致的速度变慢。此外,他们的 ONNX 交换格式使他们能够跨不同设备和垂直领域编译和执行机器学习模型,从而为公司节省时间并提高可移植性。他们还创建了一个统一的软件堆栈和库,支持各种操作系统并隐藏硬件细节,使客户更容易使用他们的硬件。

  • 05:25:00 在本节中,演讲者介绍了高通围绕 ONNX 开发的软件堆栈。他们构建了一个完整的解决方案,其中包括 ONNX 运行时,以及负责根据设备用例将模型路由到 CPU 或 GPU 的委托系统。演讲者讨论了他们开发的许多工具,包括编译器、分析器、分析器和网络架构搜索工具的支持。演讲者强调了 ONNX 的可扩展性和多功能性,以及它如何用于各种设备用例,包括相机算法、智能扬声器和 XR 设备。

  • 05:30:00 在本节中,演讲者解释了 ANITA 编译器的开发过程,该编译器用于在 Mair 中提供参考方言,以便轻松跨不同架构优化并将模型部署在各种环境中。演讲者还强调了他们为支持自定义加速器而引入的框架,这使他们能够选择上传哪些运算符并轻松打开/关闭加速器。演讲者还概述了如何在 ONNX Mlir 中部署优化,其中 ONNX 模型逐渐降低为中间表示。

  • 05:35:00 在本节中,演讲者讨论了 ONNX 编译器以及如何使用多种方言进行 CPU 和加速器优化。高级优化包括图级优化,而在较低级别,优化应用于CPU和加速器操作。演讲者举例说明了编译器中加速器框架的工作原理,其中使用加速器比在 CPU 上运行快 11 倍。他们还提到他们如何专注于深度学习算子优化,并将支持在线机器学习算子以及 CPU 等其他加速器。最后,他们对贡献者表示感谢,并邀请更多的贡献者继续发展 ONNX 项目。下一位来自 Preferred Networks 的演讲者介绍了 PFVM,这是他们使用 ONNX 的中间表示的神经网络编译器。

  • 05:40:00 在本节中,编译团队的一名成员讨论了 ONNX 在模块优化中的用例,特别是关于其稳定且记录良好的中间表示。团队通过与客户运营商一起扩展ONNX,使用ONNX以多种优化路径优化模型,例如添加设备信息以优化设备更改和内存。演讲者还讨论了形状推断在模块优化中的重要性,并介绍了三个优化案例。第一种情况涉及通过将多个按元素运算符融合到单个融合组运算符中来减少在 CUDA 上执行的计算图中的内核范围开销。

  • 05:45:00 如果模型是由神经架构搜索等程序生成的,pass 将包含许多不必要的运算符。这就是形状推断和图形简化等优化派上用场的地方。形状推断对于确定相邻的逐元素运算符是否可以融合在一起至关重要,而图形简化可以从反向传递中删除不必要的运算符。这两种优化都可以显着减少所需的计算量并提高模型的整体效率。

  • 05:50:00 在本节中,演讲者讨论了检查点技术,该技术可减少执行模块时的内存使用量。通过修改计算图,可以进一步减少内存使用,但代价是增加了延迟。演讲者强调了了解张量大小以估计内存使用量的重要性,并说明了在处理未知维度时自动检查点的局限性。此外,演讲者还讨论了未知维度对优化机会的影响,并概述了对 ONNX 形状推断所做的改进。具体来说,ONNX 1.10 中符号推理的引入极大地改进了通过数据传播进行的形状推理。

  • 05:55:00 在本节中,演讲者讨论了 ONNX 中的形状推断,解释了对于静态情况,形状信息可以从顶部全局传播,但对于动态情况需要更多支持。演讲者展示了一个 ONNX 图的示例,其中需要估计重塑的形状,但目前未知。他们建议为动态情况实施更多的形状推理函数,并询问是否有必要支持像连接两个不同大小的张量这样的情况。演讲者还简要提到了 md4 超级计算机的优化,它只接受静态形状和没有动态分支的模型,并使用静态信息进行调度和优化。接下来,来自华为的代表分享了一段预先录制的演讲,内容是将 ONNX 的强大功能引入 Spark 进行推理。

  • 06:00:00 本节重点介绍 SPARK 改进提案,俗称 SPIP,旨在简化机器学习模型部署到 spark 的过程,并将其与第三方 DL 框架集成。本提案面向需要在 Spark 上部署 DL 模型的数据工程师或开发人员。最终目标是将tab处理转换和模型初始化的复杂性隐藏在模态UDF中,使用户能够轻松完成大数据的ONNX推理。介绍了华为自家的AI处理器Ascend,并说明要在Ascend平台上完成SPARK和ONNX流水线,首先要在ONNX运行时引入Ascend支持。

  • 06:05:00 在本节中,演讲者讨论了 Ascend AI 生态系统及其支持的不同处理器。 Ascend 310只支持AI推理,而Ascend 710和910同时支持训练和推理。此外,该生态系统提供了一个名为“Kung”的软件层,为开发者提供 API 以轻松构建 AI 应用程序和服务。然后,演讲者重点介绍了 Khan、Ascend 生态系统中的当前软件堆栈以及最新版本 Khan 5.0。他们解释了 Khan 的不同层以及它如何为开发人员提供运算符库、优化引擎和框架适配器。演讲者随后讨论了将 Khan 添加为 ONNX 运行时的新执行提供程序的路线图,允许用户直接在 Ascend 硬件上运行 ONNX 模型。

  • 06:10:00 在视频的这一部分,ONNX 社区日以现场与会者的圆桌讨论结束。圆桌会议包括六个不同的主题,与会者可以在大记事本上书写。主题是根据与会者提交的内容选择的,包括用于移动和边缘的 ONNX、模型部署和机器学习量化、培训和操作、转换以及操作员。 ONNX 运行时团队也可以加入对话。圆桌会议结束后,与会者享用了美食和饮品,度过了愉快的时光,并被鼓励填写调查表以提供反馈。
 

ONNX:过去、现在和未来 - Jim Spohrer,IBM 和 Prasanth Pulavarthi,Microsoft



ONNX:过去、现在和未来 - Jim Spohrer,IBM 和 Prasanth Pulavarthi,Microsoft

在“ONNX:过去、现在和未来”视频中,IBM 的 Jim Spohrer 和 Microsoft 的 Prasanth Pulavarthi 讨论了开源 AI 框架 ONNX 的发展和未来。他们强调了通过 ONNX 提供的交换格式标准化 AI 模型部署的重要性,从而实现跨不同深度学习框架的无缝优化。此外,他们还讨论了 ONNX 运行时与各种硬件加速器协同工作的能力的最新发展,并提供了开始使用 ONNX 的技巧和资源。演讲者回答观众关于 ONNX 的能力、商业部署和即将到来的认证计划的问题,同时敦促观众参与 ONNX 社区。

  • 00:00:00 在本节中,来自 IBM 的 Jim Spohrer 和来自 Microsoft 的 Prasanth Pulavarthi 进行了自我介绍,并概述了开源 AI 框架 ONNX 的过去、现在和未来。 ONNX 作为一种标准化的交换格式,允许不同的工具跨各种深度学习框架进行互操作和优化推理。演讲者敦促观众通过在 ONNX 网站上查看新闻和入门信息以及加入 GitHub 和 Gitter 上的社区来参与 ONNX 社区。他们还重点介绍了最近的虚拟社区会议,ONNX 合作伙伴在会上讨论了他们的项目以及他们如何以创新方式使用 ONNX。

  • 00:05:00 在本节中,演讲者讨论了 ONNX 社区的发展及其作为人工智能和机器学习领域众多开源项目中的一种交换格式的重要性。他们在 pull requests、contributors、stars、forks、published papers 和 model zoo 等方面突出了 ONNX 社区的进步,并鼓励更多的组织和个人参与进来。演讲者还介绍了 Microsoft 的 ONNX 及其在各种产品中的使用,强调在 AI 和 ML 解决方案的多样化领域中需要像 ONNX 这样的标准化格式。他们提供有关如何使用 ONNX 的提示,并欢迎听众提问。

  • 00:10:00 在本节中,演讲者讨论了开发人员在尝试将 ML 模型部署到生产环境时面临的常见问题,例如高推理延迟、在边缘和物联网设备上运行模型,以及需要在不同的设备上运行相同的模型硬件和操作系统。为了解决这些问题,演讲者介绍了 ONNX 格式和 ONNX 运行时,它允许开发人员以通用格式表示来自各种框架的模型,并在不同的平台和加速器上高效地运行它们。以 Microsoft 的语音服务为例,说明 ONNX 如何提高生产中的敏捷性和性能。

  • 00:15:00 在本节中,演讲者讨论了使用 ONNX 运行时如何在敏捷性、性能和准确性方面带来好处。他们提到了 Microsoft 的认知服务示例,例如语音到文本和计算机视觉,以及具有身体跟踪功能的设备 Azure Connect。 ONNX 的可移植性方面也很突出,因为它允许跨不同平台和硬件加速器使用相同的模型和应用程序代码,从而节省时间和定制工作。此外,演讲者还谈到了 Windows ML,它使用 ONNX 运行时作为模型的通用格式,使得在 Windows 操作系统中进行机器学习推理变得容易。

  • 00:20:00 在本节中,Jim Spohrer 和 Prasanth Pulavarthi 讨论了 ONNX 运行时的一些最新发展和成就。它最重要的特性之一是它能够与不同类型的硬件加速器一起工作,例如 GPU 或 VPU。它还提供跨语言支持,允许用户将在 pythonic 环境中训练的模型转换为 C#。使用 ONNX 运行时的公司的一个例子是 ISV,它使用 scikit-learn 在 python 中训练他们的财务模型,但在 C# 中使用 ONNX 运行时进行生产。此外,ONNX runtime 最近优化了 BERT 和 GPT2 等 transformer 模型的推理和训练,为用户带来了显着的加速和成本节约。

  • 00:25:00 在本节中,演讲者提供有关如何开始使用 ONNX 和 ONNX 运行时的信息。可通过 URL 访问的 Model Zoo 提供了各种预训练模型供下载并开始与 ONNX 运行时一起用于视觉、语言和即将推出的语音模型。此外,演讲者鼓励模型为 Model Zoo 做出贡献。来自其他框架的现有模型也可以转换或导出为 ONNX 格式。 PyTorch、Keras、TensorFlow 和 Scikit-Learn 等框架具有 ONNX 导出功能,ONNX 运行时可以安装在 Windows、Linux 和 Mac 上,支持多种编程语言。

  • 00:30:00 在本节中,演讲者讨论了硬件加速以及如何通过称为执行提供程序的 API 集成不同的硬件加速器。 ONNX 运行时具有高度优化的 CPU 实现和 CUDA 实现,Nvidia 和 Intel 等硬件供应商已与 ONNX 合作,将他们的优化与 ONNX 运行时集成。这确保任何 ONNX 模型都可以在完全支持整个 ONNX 规范的情况下运行,即使特定加速器不支持特定操作也是如此。演讲者鼓励观众试用 ONNX 并分享 ONNX 社区中可用的资源,包括开放治理、SIG 和工作组。

  • 00:35:00 在本节中,演讲者讨论了 ONNX 项目的开放治理结构,该结构由不同的特殊利益集团 (SIG) 和工作组组成。他们解释说,SIG 和工作组会定期开会,一切都是公开的,会议都发布在 AI 日历上的日历上。此外,开放治理结构描述了如何选择贡献者和批准者,他们分别获得对不同决策的投票权或拥有合并权限。最后,演讲者鼓励人们通过加入不同的渠道和小组、注册邮件列表和参与讨论来参与 ONNX 项目。

  • 00:40:00 在本节中,演讲者回答了各种听众关于 ONNX 主题的潜在书籍出版物、ONNX 运行时的日志记录功能以及用于减少机器学习训练时间的方法等主题的问题。他们还提到了一些基于 ONNX 的模型在各种场景中的商业部署,例如 Azure 认知服务、办公模型和 Bing 搜索引擎。

  • 00:45:00 在本节中,演讲者讨论了 ONNX 模型在 Microsoft 之外的商业部署,并提到金融公司和其他组织在 Azure 上使用了许多生产级模型。他们还回答了观众关于 ONNX 的问题,包括它是否支持 CNTK(是的,他们有 ONNX 导出)以及您是否需要有关硬件加速工具的知识(不需要,因为 ONNX 运行时提供了一个抽象层)。他们还谈到了在训练中使用 ONNX 与在训练后转换为 ONNX 相比的好处,并解释说 ONNX 运行时可以加快训练过程,从而产生更快的转换器模型。最后,他们表示愿意了解潜在的认证计划以及人们使用 ONNX 的不同方式。

  • 00:50:00 在本节中,演讲者回答了有关 ONNX 支持所有管道类型的能力的问题。虽然由于一些现有的差距不是 100%,但通常支持常见的模型类型,用户可以参考 ONNX Converter GitHub 以获取支持的管道列表,或者自己尝试看看他们的管道是否可以完全转换。然后,演讲者通过感谢与会者并鼓励他们加入 ONNX 社区来结束会议。
 

Onnx-mlir:用于 ONNX 模型的基于 MLIR 的编译器 - 最新状态



Onnx-mlir:用于 ONNX 模型的基于 MLIR 的编译器 - 最新状态

Onnx-mlir 是 ONNX 模型的编译器,它使用 MLIR 和 LLVM 进行优化和代码生成,支持 CPU 和自定义加速器。来自 IBM Research 的 Dong Lin 强调了全面测试的重要性,并强调了该框架在在线评分服务和模型服务框架中的使用。 Onnx-mlir 具有多种 CPU 和加速器方言,并在不同级别进行了优化,并已证明使用 IBM 加速器可将信用卡欺诈检测模型加速 11 倍。该项目欢迎社区做出贡献,以优化重要的运算符并支持利基 ML 运算符和 GPU 等其他加速器。

  • 00:00:00 在本节中,来自 IBM Research 的 Dong Lin 讨论了 ONNX-MLIR,这是一种用于 ONNX 模型的编译器,它使用 MLIR 和 LLVM 进行高级优化和低级代码生成。该编译器旨在为 MLIR 中的 ONNX 方言提供参考,并使优化不仅方便 CPU,也方便自定义加速器。它很容易与其他基于 MLIR 的编译器集成,并且它支持不同的编程语言,例如 Python、C++ 和 Java。 Dong Lin 还强调了仔细测试编译器的重要性,他提到它已用于在线评分服务和模型服务框架,并且新引入了对自定义加速器的支持。

  • 00:05:00 在本节中,演讲者讨论了 ONNX-MLIR 编译器,它可以优化和支持新的加速器。编译器针对 CPU 和加速器具有多种方言,并在各个级别进行了优化。演讲者展示了该框架使用 IBM 加速器将信用卡欺诈检测模型加速 11 倍的能力,但无法透露更多细节。他们强调了他们对社区贡献以发展开源项目的兴趣,因为他们旨在优化重要的运算符,支持利基机器学习运算符和其他加速器(如 GPU)。
 

PFVM - 一种使用 ONNX 作为其中间表示的神经网络编译器



PFVM - 一种使用 ONNX 作为其中间表示的神经网络编译器

在此视频中,Preferred Networks 的 Zijian Xu 介绍了 PFVM,这是一种使用 ONNX 作为模块优化中间表示的神经网络编译器。他讨论了 PFVM 如何将导出的 ONNX 作为输入,对其进行优化,并使用第三方 API 在指定的后端执行模型。 Genji 描述了优化的重要性,包括与客户运营商一起扩展 ONNX、形状推断和图形简化。他还解决了当前 ONNX 编译器的局限性,包括在动态情况下需要更多支持,并建议实施更多推理功能。 Zijian Xu 强调了减少内核范围开销和内存使用以加快计算速度的重要性,并建议利用机器上可用的静态信息进行调度和整形推理。

  • 00:00:00 在本节中,Preferred Networks 的 Zijian Xu 讨论了 PFVM,这是一种使用 ONNX 作为其中间表示的神经网络编译器。他介绍了公司并解释了他们如何使用深度学习来解决现实世界的问题。然后他专注于 ONNX 进行模块优化而不是模块部署。他解释说,PFVM 作为编译器和运行时,将导出的 ONNX 作为输入,对其进行优化,并使用第三方 API 在指定的后端执行模型。 Genji 描述了优化过程,讨论了他们如何与客户运营商扩展 ONNX 以进行设备和内存优化。他还讨论了形状推断在模块优化中的重要性,并介绍了三种情况的优化。第一种情况是逐元素融合。

  • 00:05:00 在视频的这一部分,演讲者讨论了减少内核范围开销对于在 CUDA 上执行计算图时加快计算速度的重要性。他们建议将逐元素运算符融合到单个融合组运算符中以减小内核范围,但要注意并非所有运算符都能成功融合在一起。有必要在梯度融合组之前检查算子是否可以广播。演讲者还强调了形状推断和图形简化对于优化神经网络模型的重要性。最后,他们解决了模型是否包含不必要的运算符的问题,并回应说一些优化对于更快的计算是必要的。

  • 00:10:00 在本节中,演讲者讨论了由第一代或神经网络和神经架构搜索等程序生成的模型如何可能包含不必要的运算符。他们使用左侧计算图使用大量内存来计算节点 5 的示例来证明优化的重要性。通过修改计算图,可以在减少内存使用的情况下实现相同的输出。 PFVM 可以执行自动检查点以减少内存使用量,但它需要知道张量大小才能准确估计内存使用量。演讲者强调了形状参考的重要性,以及未知尺寸如何限制大多数整形框架中的优化机会。

  • 00:15:00 在本节中,演讲者讨论了当前最先进的 ONNX 编译器的局限性,包括无法执行元素传输和自动检查点等某些任务,以及需要更多支持动态案例。演讲者建议为动态案例实施更多的推理功能,并征求用户的反馈,以确定是否支持两个张量的连接等案例。演讲者还讨论了利用 elements core 和 mn4 等机器上可用的静态信息进行调度和整形推理的好处。
 

YVR18-332 TVM 编译器堆栈和 ONNX 支持



YVR18-332 TVM 编译器堆栈和 ONNX 支持

YVR18-332 视频讨论了 TVM 编译器堆栈,这是一个社区主导的深度学习堆栈,支持一系列硬件和前端,包括 ONNX。演讲者讨论了 TVM 如何在立体声级别优化模型,使开发人员能够探索搜索空间并找到最佳配置。他们还讨论了 TVM 提供的自动优化,包括循环转换和 GPU 加速。演讲者谈到了 TVM 路线图,其中包括启用 8 位支持和图形级别的自动调整。此外,他们还讨论了 ONNX TV 接口以及为所有生态系统统一标准接口的必要性。最后,视频暂停吃午饭。

  • 00:00:00 在本节中,演讲者介绍了 TVM 编译器堆栈及其如何通过 GBM 支持 ONNX。 TVM 是一个从类级别到癌症级别的深度学习堆栈,是由华盛顿大学的研究人员领导的社区项目,并得到了多家公司和组织的贡献。 TVM 编译器堆栈支持包括 CPU、GPU、FPGA 在内的多种硬件,并计划启用 ASIC 支持,并带有用于硬件设计验证的模拟器。该堆栈还支持各种前端,包括 MXNet、ONNX 和 TensorFlow,并具有称为 NVM 的计算类 IR 实现,具有一系列优化选项。

  • 00:05:00 在本节中,演讲者讨论了 TVM 编译器堆栈和 ONNX 支持。他们解释说,TVM 编译器堆栈可以在立体声级别进行大量优化,例如循环转换和 GPU 加速,并且 ONNX 是添加到自动 TVM 中的新功能。演讲者还解释了 TVM 远程部署机制为加拿大小姐赢得的文凭,该机制允许用户在其主机设备上编译模型并将其远程部署到目标设备。此外,他们还讨论了 TVM 引入的自动优化,可以减少开发人员的繁琐工作,并且
    旨在探索搜索空间并找到最佳配置。

  • 00:10:00 在本节中,演讲者讨论了 TVM 编译器堆栈和对 ONNX 的支持。他们提到,TVM 编译器堆栈采用了最先进的调优算法,包括孤立的极端梯度提升算法,以提供更好的性能。他们还强调了允许自动优化并可以利用以前的工作来优化搜索空间的开源项目。然后演讲者谈到了TVM如何用于Vita开放加速器及其三个主要部分。他们解释了如何使用 TVM 进行调度优化并使用 VPS RPC 进行远程部署。最后,他们提供了 TVM 的路线图,其中包括启用 8 位支持和图形级别的自动调整,同时还计划启用 Xilinx 的 Ultra 9 棒和亚马逊的 F1 实例。

  • 00:15:00 在本节中,演讲者讨论了 TVM 编译器堆栈以及它计划如何升级到 NVM v2,称为 Relay。 Relay的实现需要选择一个pod控制流来完善类型系统,控制如何让compile server系统变得更好。演讲者解释了 Relay 在支持 ONNX 时如何适应 TVM 编译器堆栈。 ONNX定义了三个主要部分,即计算图模型和构建算子,以及标准数据库。为了支持 ONNX ml 扩展,TVM 前端在 DVM 中实现了一个前端。但是,将 ONNX 转换为 NM VM 符号图可能会导致一些不匹配问题。而且社区正在讨论在TVM社区使用ONNX还是Relay作为Graph IR,唯一的方法就是共同努力合并Relay,以供以后的模型转换使用。

  • 00:20:00 在本节中,演讲者讨论了用于框架集成的 ONNX TV 接口,它是在不同加速器上进行神经网络推理的标准接口。该接口包括 Pod 运行时发现、执行后端的选择以及 ONNX 算子的长期发现。演讲者建议社区应该讨论如何统一所有生态系统的标准接口。此外,演讲者还谈到了 TVM 编译器堆栈,以及它如何将手工编码的实现纳入其搜索空间。不过这个机制目前还没有很好的想法,欢迎大家出出主意和讨论。

  • 00:25:00 在本节中,讨论的主题是 TVM 编译器堆栈及其对 ONNX 的支持。明确了 ONNX 既有描述格式又有运行时 API,ONNX 平等体系正在扩展,而不仅仅是开放交换格式。目标是统一 API,使上层应用程序可以调用单一标准 API 进行运行时推理,使这方面的开发人员更容易。没有进一步的问题,视频暂停到午餐时间。
 

.NET MAUI Community Standup - ONNX Runtime with Mike Parker



.NET MAUI Community Standup - ONNX Runtime with Mike Parker

在此视频中,特邀发言人 Mike Parker 介绍了 ONNX 运行时,这是一种开源跨平台工具,可跨多个硬件平台实现机器学习优化和加速。 Parker 解释了使用 ONNX 运行时的重要性,并展示了如何在 .NET MAUI 项目中使用它来使用 MobileNet 对象分类模型对图像进行分类。主持人和 Parker 讨论了在设备上运行机器学习模型的好处以及避免后端基础设施成本的能力。此外,该团队还共享有用的资源,包括 Parker 关于此主题的博客以及他们与 Al Blount 的合作伙伴关系以提供 .NET MAUI 和 Xamarin 支持。

  • 00:00:00 在 .NET MAUI 社区站会的这一部分,团队介绍了现代客户端应用程序客户咨询团队的成员 Mike Parker,他分享了他对 ONNX Runtime 的了解,ONNX Runtime 是一种用于优化的机器学习工具跨多个硬件平台加速模型。他解释了 ONNX Runtime 如何开源和跨平台,允许开发人员使用各种框架和硬件来开发机器学习应用程序。他还展示了 .NET 社区如何在他们的项目中利用 ONNX Runtime。

  • 00:05:00 在这一部分中,主持人介绍了自己和他们的嘉宾 Mike,他加入并与他们讨论了 Onnx Runtime。主持人提到他们将首先查看来自 Microsoft 和社区的一些博客,然后再继续讨论来自 .NET MAUI 和相邻存储库的一些 PR,他们对此感到很兴奋。最后,他们会将讨论转交给 Mike Park 来讨论 Onnx Runtime 库、他如何在 Xamarin 中使用它们,以及他关于该主题的写作和播客。主持人还提到今天是 .NET 20 周年,.NET MAUI Preview 12 已经发布。他们还警告用户注意重大更改,并提到 Dave 一直在与社区图书馆维护人员合作。

  • 00:10:00 在本节中,演讲者讨论了 .NET 的统一工作以及在 Xamarin 过渡到 MAUI 时重新编译和更新 iOS 库和依赖项的必要性。该团队目前正在研究一种方法,以将这些更改用于任何绑定到本机库和 NuGet 包的项目,并且他们向用户保证将提供指导。此外,该团队讨论了 VS Mac 2022 预览版 5 中缺少 MAUI 支持,并解释说他们正在努力解决这个问题,但必须优先考虑首先使用新的 UI SAC 在 .NET 6 运行时上重建所有 Xamarin 工作。最后,团队宣布了 Facebook SDK 绑定的更新,并提到了更新和维护其他第三方库(如 Google 库)的工作。

  • 00:15:00 在本节中,Xamarin 团队讨论了它维护的组件,这些组件曾经是一个主要焦点,但现在正在缩小到对支持最关键的部分。如果用户在过渡到 .NET 6 期间依赖于这些组件,该团队鼓励他们联系他们。他们还讨论了 Maui Hello World 教程和 .NET Maui 源代码剖析博客系列。此外,突出显示了 Andreas 关于 Z Index 和 UI 自定义的博客,展示了使用 Z Index 将元素堆叠在一起。

  • 00:20:00 在本节中,演示者展示了人们使用 .NET MAUI 重新创建的一些博客文章和设计。这些博客包括在 Xamarin Forms 中重新创建登机牌设计,讨论使用 Xamarin Forms 进行状态机开发,组织您的 .NET MAUI 启动文件,深入研究处理程序的体系结构,以及一个关于 Xamarin Forms 到 JavaScript 双向通信的博客一个 WebView 。这些演示文稿展示了如今对设计的关注程度,使 Xamarin Forms/MAUI 更具可扩展性和实用性,以及如何更有效地使用 JavaScript 和绑定。

  • 00:25:00 在文字记录的这一部分,主持人讨论了社区对 .NET MAUI 的最新贡献,包括 5.0 Xamarin 论坛服务和新文档的发布。他们鼓励贡献者提供有关 repo 参与的反馈,并在社区工具包中提及芯片控件的可用性,尽管它不直接在框中。主持人还提到了最近添加的阴影,这是 MAUI 的一项新功能,并建议通过修改他们的机器人来使其更加活跃。

  • 00:30:00 在本节中,Mike Parker 提供了有关 .NET MAUI 预览版状态的更新,重点介绍了预览版 13 取得的进展。有很多绿色和许多新功能,包括标签格式文本、跨度、和跨越手势,这些都在填补平台的空白。社区还共享了一个名为“Galadriel”的新附加属性,它可以在 Xamarin Forms Shell 中向选项卡和菜单项简单添加徽章。此外,.NET MAUI 团队一直致力于提高平台的启动性能,结果令人鼓舞,该应用程序在具有配置 AOT 的 Pixel 5 上的启动时间为 576 毫秒。

  • 00:35:00 在本节中,.NET MAUI Community Standup 讨论了在 Xamarin Forms 和 .NET MAUI 上构建 UI 的 C# 标记扩展的可用性,它为 UI 开发提供了更流畅的语法。他们还讨论了 onnx 运行时,这是一种可移植模型,可以使用单个 API 集在不同平台上运行推理,例如面部识别和照片标记。 onnx 运行时在 GitHub 上可用,可用于 Xamarin 和移动应用程序。使用 onnx 运行时的过程包括加载模型、准备输入、运行推理以及将输出处理为可用格式。

  • 00:40:00 在视频的这一部分,Mike Parker 解释了他们如何使用 Xamarin Forms 应用程序中的 ONNX 运行时来使用 MobileNet 对象分类模型对图像进行分类。他强调了遵循模型文档和标准化 RGB 值的重要性。 Parker 还提到了一个名为 Netron 的有用应用程序,它允许可视化输入和输出的大小、形状以及输入和输出的名称。该应用程序只是一个加载和运行模型的按钮,并在警报中显示顶部标签。 Parker 指出,所有这些都在设备上发生而不涉及云,这很酷。

  • 00:45:00 在本节中,演讲者讨论了在设备上运行机器学习模型的好处,包括无需连接即可运行的能力以及避免后端基础设施成本。他们还谈到了他们使用基于云的 Microsoft Azure Vision API 的经验,以及他们如何能够使用 ONNX 运行时实现更快的处理时间。此外,他们还解释了如何通过用单个 ONNX 模型替换特定于平台和特定于模型的代码来简化团队入职应用程序体验。最后,他们讨论了准备模型、使用 Azure 自定义视觉服务以及创建允许 ONNX 与 Xamarin 一起工作的 Nougat 包的过程。

  • 00:50:00 在视频的这一部分,Mike Parker 讨论了他们使用 ONNX 运行时的工作,并调整了他们的本机互操作性代码以支持具有 AOT 的平台,例如 iOS。他还继续描述了可以使用该技术的现实场景,包括简化工作流程和提高应用程序的可访问性。然而,他指出,对于那些没有传统数据科学背景的人来说,使用预建模型可能会让人不知所措,因此他建议对要合并的模型进行选择。最后,共享了一些有用的资源,包括 Mike 关于此主题的博客。

  • 00:55:00 在本节中,主持人讨论了 Mike Parker 的可用性并介绍了 Al Blount,他可以为需要 Xamarin Forms 和 .NET Maui 帮助的公司提供支持。他们还简要讨论了 Mike 的团队目前在升级到 Maui 方面的工作,但还不能分享任何细节。主持人结束视频感谢观众的加入,并宣布即将举行 .NET 20 周年生日派对。
 

[虚拟聚会] 可互操作的 AI:C++ 中的 ONNX 和 ONNXRuntime(M. Arena,M. Verasani)



[虚拟聚会] 可互操作的 AI:C++ 中的 ONNX 和 ONNXRuntime(M. Arena,M. Verasani)

该视频讨论了使用不同框架训练机器学习算法所面临的挑战,导致缺乏互操作性,并介绍了旨在为深度学习模型创建通用格式的 ONNX 和 ONNXRuntime。 ONNX 将神经网络转换为静态计算图,从而在推理过程中优化性能。 ONNXRuntime 允许将任何框架转换为 ONNX 格式,并提供可用于针对任何硬件平台的加速库。该视频展示了使用 ONNX 和 ONNXRuntime 的示例,并讨论了它们在 C++ 中的使用,并提供了更好地理解项目及其文档的建议。

Marco Arena 和 Matteo Verasani 还讨论了在 C++ 中使用 ONNX 和 ONNXRuntime 进行机器学习模型的好处,强调了框架的灵活性及其在不牺牲性能的情况下轻松转换来自不同框架的模型的能力。他们提供了将模型转换为 ONNX 格式的示例,并演示了将 ONNXRuntime 用于推理模式,展示了经典 Python 模型的性能改进。此外,他们还讨论了他们在嵌入式系统方面的工作以及在 GPU 上对 ONNXRuntime 进行基准测试的潜在好处。演讲者还提到了未来的虚拟聚会,并表示希望为与会者提供更多的交流机会。

  • 00:00:00 在视频的这一部分,演讲者讨论了在使用不同的框架为各种用例训练机器学习算法时出现的问题,导致缺乏互操作性。当在一个团队中工作时,这可能是一个挑战,在这个团队中,成员可能对不同的框架具有不同水平的专业知识。为了解决这个问题,演讲者介绍了 ONNX 和 ONNXRuntime,它们通过将网络转换为通用格式来实现框架之间的互操作性。然后,ONNXRuntime 允许将转换后的模型部署在任何目标硬件上,包括 CPU、GPU 和 FPU。

  • 00:05:00 在本节中,演讲者讨论了 ONNX(开放神经网络交换)项目,该项目旨在成为深度学习模型的通用格式,允许不同框架之间的互操作性。该项目由社区驱动并得到众多公司的支持,重点是将不同的模型类型和框架转换为单一的生产格式。 ONNX 将神经网络转换为静态计算图,它与动态图的不同之处在于它们在训练前进行了预初始化。虽然静态图的计算效率更高,但动态图为不同的输入大小提供了更大的灵活性。

  • 00:10:00 在本节中,演讲者讨论了 ONNX 如何提供静态计算图,这在推理过程中非常有用。虽然 Python 等其他框架具有动态计算图,但 ONNX 提供了在训练和开发阶段已经受控的静态图,从而可以实现更优化的性能。此外,Microsoft 的 ONNX 运行时工具允许将任何框架转换为 ONNX 格式,并提供可用于针对任何硬件平台的加速库,使其成为推理和生产的有用且多功能的工具。

  • 00:15:00 在视频的这一部分,演讲者谈论了他们使用 ONNX 和 ONNX Runtime 实现 AI 互操作性的经验。他们解释了他们如何在 Python 中创建 PyTorch 模型,将其转换为 ONNX 格式,并使用 ONNX Runtime 进行部署,从而允许他们编写管道并针对不同的平台,例如 GPU 或 Android 设备。他们还展示了与其他推理引擎相比使用 ONNX Runtime 的性能改进,结果速度提高了 4 倍。他们突出了 ONNX 的灵活性,允许他们转换在其他框架(如 Matlab)中创建的模型,以便将它们与 ONNX Runtime 一起使用,而无需重新编写部署管道。

  • 00:20:00 在本节中,演讲者讨论了在 C++ 中使用 ONNX 和 ONNXRuntime 的过程。他们解释说,模型必须先转换为 ONNX 格式,然后才能在 ONNXRuntime 上运行。虽然 TensorFlow 序列化不是 ONNXRuntime 原生的,但有开源库可用于转换。他们还回答了有关编写转换过程脚本的可能性以及 ONNX 与 C++ 相比的改进水平的问题。他们指出,需要进一步的基准测试和分析。 ONNXRuntime 存储库是开源的,由 Microsoft 提供支持,为用户提供一系列信息、指南和示例。

  • 00:25:00 在本节中,视频讨论了 ONNXRuntime 的功能,其复杂程度从简单到复杂。绿色列包含足以完成更简单的机器学习任务的基本功能,而洋红色列包含稍微复杂一些的功能,例如执行提供程序和分析支持。红色列代表更复杂任务的高级功能,例如添加 ONNX 自定义运算符或执行交易调整的能力。演示者还提供了指向 C++ 和 Python 中 ONNXRuntime 的两个演示存储库的链接。

  • 00:30:00 在本节中,演讲者介绍了 C++ 中的 ONNX 和 ONNXRuntime。他们解释说,应该在程序中创建一个环境来管理交易池和建立正在考虑的模型的会话。会话的特性也可以自定义,默认设置可以使用会话运行。此外,ONNXRuntime 将通过在执行会话之前实施所需的预处理来管理数据来优化模型。该工具还可以执行检查任务,例如查询输入和输出的数量、数据类型和名称。最终,用户可以以所需的格式创建他们的输入和张量。

  • 00:35:00 在视频的这一部分,演讲者讨论了如何创建一个对象,该对象在 CPU 上分配张量并将它们传输给执行提供者。说话者创建输入和输出张量,将输入值和张量的形状作为参数传入缓冲区。然后通过将输出值传递给 OnnxRuntime 库来创建输出的张量。演讲者解释了使用名称来启动推理的重要性,因为它允许灵活地更改输入的顺序。该演示展示了如何在屏幕上打印输出值的简单示例。

  • 00:40:00 在本节中,演讲者为那些想要更好地了解 ONNX 项目及其文档的人提供建议。他们建议查看“C 部分”以访问 ONNX 更好的文档部分,并详细介绍他们在 ONNX 中检查数据的经验。演讲者还解释说,虽然 ONNX 运行时库可通过其他包管理器获得,但他们建议重新编译这些库,因为架构和提供商各不相同,并展示了他们如何编译相同的代码以创建两个针对 CPU 或 GPU 的 ONNX 运行时包。

  • 00:45:00 在本节中,演讲者通过在 C++ 中使用 DLL 的示例讨论了 ONNX 运行时。添加到代码中的会话选项因客户端的偏好而异,它会尝试以指定的顺序使用添加的提供程序。演讲者提供了系统如何占用 RAM 和 GPU 使用情况的示例应用程序。以在 1,000 个图像数据集上进行预训练的初级游戏 AI 重新网络为例。该系统有其后处理和预处理要求。

  • 00:50:00 在这部分视频中,演讲者讨论了使用 Python 进行图像预处理以及使用扩展源来简化流程。将图像调整为最佳大小并在归一化之前转换为浮点数。归一化过程涉及将值除以平均值并执行标准偏差。神经网络的后处理涉及简单的 softmax 归一化。演讲者还演示了如何使用 ONNX 运行时以最少的代码打开、处理和输出图像。用于从文本文件中读取类的类非常简单,并且使用了一些实用程序来避免不必要的样板代码。

  • 00:55:00 在本节中,演讲者讨论了使用 C++ 中的 ONNXRuntime 测量神经网络推理时间的过程。他解释说,他已将推理部分添加到之前讨论的网络中,并使用系统时钟测量了推理时间。然后,他继续演示如何在 ONNXRuntime 中使用自定义记录器进行分析。演讲者还简要讨论了与摩德纳大学合作开发的独立移动网络及其预处理和后处理所涉及的复杂性。

  • 01:00:00 在本节中,演讲者讨论了检测器的输出并展示了它如何在熊和信号等物体上绘制边界框。他们还提到了 ONNXRuntime 的使用以及它如何允许会话选项和调整,包括启用性能优化分析。可以详细检查生成的跟踪文件,以查看初始化模型并在图像上运行它需要多长时间,包括使用了哪些运算符以及选择了哪个提供程序。他们还提到了 ONNX 在运行之前优化图形的能力,这可以提高性能并缩短加载模型所需的时间。

  • 01:05:00 在本节中,演示者讨论了通过启用或禁用优化来优化模型,这可能会影响模型在不同目标之间的可移植性。他们探索了不同级别的优化以及每种优化如何影响模型的性能。演示者表明,启用并行执行模式可能允许模型利用多个线程,但在某些情况下可能不会对性能产生重大影响。他们还提到了使用实用程序并行处理多个图像的可能性。最后,演示者指出优化可以对模型的性能产生显着影响,优化模型的加载时间减少就是证明。

  • 01:10:00 在本节中,Marco Arena 和 Marco Verasani 讨论了在 C++ 中使用 ONNX 和 ONNX 运行时的好处。一个主要优势是能够拥有接受 ONNX 作为格式的单层推理,从而允许在使用不同框架创建模型时具有可移植性和灵活性。此功能在不同团队可能使用各种框架并且生产需要标准推理管道的情况下特别有用。此外,在 C++ 中使用 ONNX 运行时可以为深度学习模型带来更快、更优化的运行时性能。总的来说,ONNX 生态系统为微调和优化深度学习模型的性能提供了许多选择和机会。

  • 01:15:00 在本节中,演讲者讨论了在 C++ 中使用 ONNX 和 ONNXRuntime 进行机器学习模型的好处,因为它允许框架具有灵活性,并且可以在不牺牲性能的情况下轻松地在框架之间进行转换。他们还提到 ONNXRuntime 在 Linux 上受支持,并演示了如何使用 Python 和 Jupyter notebooks 进行原型设计和将模型导出为 ONNX 格式。他们以一个小教程为例,展示了如何将模型从其他框架转换为 ONNX,并强调了 Netron 工具在可视化模型计算图方面的作用。演讲者鼓励观众提出问题并分享有关该工具的知识。

  • 01:20:00 在本节中,演讲者讨论了使用 C++ 中的 ONNXRuntime 将模型转换为 ONNX 格式并在推理模式下运行它的过程。他们演示了如何创建计算图并定义输入和输出维度,以及如何使用时间来衡量模型在 CPU 和 GPU 上的性能。他们还展示了流行的自然语言处理模型 BERT 的使用,该模型利用 transformer 运算符并在 Hugging Face 库中实现。演讲者强调了安装正确的软件包对于将 ONNXRuntime 与 CPU 或 GPU 结合使用的重要性。

  • 01:25:00 在视频的这一部分中,演示者演示了如何在 Python 中将 BERT 模型转换为 ONNX 格式。该过程涉及定义模型的输入并使用“torch.onnx.export”函数转换模型。主持人解释说,ONNX 向每个版本添加了运算符,这强调了需要使用特定模型所需的运算符来处理正确版本的 ONNX。动态轴也被强调为允许动态输入/输出形状的重要特征,例如自然语言处理中的可变序列长度。最后,演示者展示了 Python 和 ONNX 在对模型执行推理时的性能比较。

  • 01:30:00 在虚拟聚会的这一部分,演讲者分享了他们在 C++ 中使用 ONNX 和 ONNXRuntime 的工作演示。它们展示了在通过 ONNXRuntime 运行的经典 Python 模型的推理中看到的性能改进。他们还演示了一种称为“网络查看器”的工具,它允许用户查看模型的静态计算图并查看正在执行的操作,包括预期的输入和输出类型。该工具还显示用于转换的 ONNX 版本和转换过程中使用的偏移量。演讲者要求观众提供反馈,并提供一个链接供与会者发表评论。

  • 01:35:00 在本节中,Marco Arena 和 Matteo Verasani 讨论了他们的嵌入式系统平台研究工作,包括 GPU、FGA 和 CPU。他们在这些嵌入式系统上运行了四个用于对象检测的神经网络,并根据功耗和推理速度分析了结果。他们还讨论了对嵌入式系统使用单级检测器的重要性,并提供了指向 ONNX 和 ONNXRuntime 存储库的链接。他们提到了在 GPU 上对 ONNXRuntime 进行基准测试的潜在好处,并表示有兴趣邀请 Microsoft 的 ONNXRuntime 团队参与未来的活动。最后,他们邀请观众参加他们即将举行的在线活动和未来的聚会。

  • 01:40:00 视频的这一部分讨论了寻找不再参加面对面聚会的理由,以及他们如何幸运地从与会者那里获得在线会议的让步。他们还根据 Malattia、Verasani 以及 ONNX 和 ONNX Runtime 存储库展示的材料,讨论了他们的虚拟聚会系列即将推出的计划,其中包括删除 Python 部分并专注于演示的初始部分。还为那些寻找有关该主题的更多信息的人提供了链接和官方资源。最终,他们表示希望加入更多的社交时间,并为那些有兴趣在晚饭后留下来的人保持聊天开放,但他们承认在线聚会的局限性。
 

[CppDay20] 可互操作的 AI:C++ 中的 ONNX 和 ONNXRuntime(M. Arena,M.Verasani)



[CppDay20] 可互操作的 AI:C++ 中的 ONNX 和 ONNXRuntime(M. Arena,M.Verasani)

机器学习和深度学习算法的使用越来越多,需要可以在不同平台上部署这些算法的工具。 ONNX 工具提供了不同框架和平台之间的互操作性,允许开发人员将他们的算法从一个框架转换到另一个框架并将它们部署在不同的设备上,即使他们不熟悉特定的框架或平台。 ONNX Runtime 是一种推理引擎,可以在推理阶段利用自定义加速器来加速模型,并且可以针对各种硬件平台。演讲者演示了 ONNX 和 ONNX Runtime 在 C++ 编程中的使用,并举例说明了线性回归和神经网络模型。他们还讨论了使用 ONNX 和 ONNX Runtime 在微调网络执行、优化加载时间和执行顺序图像方面的好处。

  • 00:00:00 在视频的这一部分,演讲者讨论了机器学习和深度学习算法在各种应用中的使用越来越多,以及对可以在不同平台上部署这些算法的工具的需求。他们引入了一个名为 ONNX 的工具,它提供了不同框架和平台之间的互操作性。他们解释了开发人员如何使用 ONNX 将他们的算法从一个框架转换到另一个框架并将它们部署到不同的设备上,即使他们不熟悉特定的框架或平台。演讲者以将Python算法转换为ONNX格式,再转换为Core ML框架部署在苹果设备上为例。他们强调了 ONNX 在使深度学习和机器学习算法更易于访问和部署在各种平台上的作用。

  • 00:05:00 在本节中,演讲者讨论了 ONNX 和 ONNX 运行时,它们是允许互操作 AI 的工具。 ONNX 支持在不同的深度学习框架(例如 PyTorch 和 Tensorflow)之间传输模型,而无需了解每个框架。 Microsoft 提供的 ONNX Runtime 是一种推理引擎,可以在推理阶段利用自定义加速器来加速模型。它能够针对各种硬件平台,并且不需要用户在 C++ 中创建自己的推理引擎。

  • 00:10:00 在本节中,演讲者讨论了将 ONNX 格式用于机器学习模型的好处,以及它为不同训练框架提供的互操作性。他们解释了开发深度学习算法、将其转换为 ONNX 格式以及使用 ONNX 运行时推理引擎在不同平台和编程语言上运行模型的管道。演讲者还展示了性能图表,显示与 PyTorch 和 scikit-learn 等其他框架相比,使用 ONNX 运行时算法的性能有了显着提高。最后,Marco 接手并谈论在 C++ 编程中使用 ONNX 运行时引擎。

  • 00:15:00 在本节中,演讲者讲述了他们在机器学习框架之间的互操作性方面的经验,并介绍了 ONNX 项目作为实现这一目标的重要努力。他们提到,在框架之间转换模型时,他们没有遇到很多转换问题,但是当 ONNX 格式或 ONNX Runtime 格式不支持运算符时,就会出现主要问题。演讲者还回答了有关转换问题的问题,并解释了 ONNX 不支持的运算符可能会导致转换问题。

  • 00:20:00 在本节中,演讲者讨论了他们将 TensorFlow 转换为 ONNX 的经验,并提到他们没有遇到太多转换问题。他们还讨论了在 C++ 中操作张量时的调试和故障排除,并提到了使用其他库(如 extensor 或 Python)来执行此操作。他们介绍了 ONNX 的入口点 onx.ai,它允许用户选择他们想要的架构和编程语言,并演示了 ONNXRuntime 在 C++ 中的使用。他们提到 GPU 的代码是相同的,唯一的区别是库链接。

  • 00:25:00 在本节中,演示者展示了使用 ONNXRuntime 在模型上加载、检查和运行推理的演示。他首先为底层 API 创建一个环境,其中包含自定义日志或线程等可选功能。然后,他创建一个会话,表示要在特定模型上运行的推理,该模型可以从路径或字节流加载。他演示了如何使用分配器检查模型的信息,例如输入和输出的数量和名称。他指出,这个演示展示了原始库,在现实生活中,将使用包装器来避免管理字符串和其他复杂性。

  • 00:30:00 在本节中,演讲者讨论了一个简单的线性回归模型,以及如何在不使用名为 CreateTensor 的外部 API 复制数据的情况下将输入传递到网络。演讲者强调了在文档不清楚时转到 c++ api 下面的 c api 的重要性。此外,他们还讨论了运行推理会话时可用的各种选项,包括部分输出检索和自定义输出名称。最后,他们注意到输出值存储在一个向量中,并且与之前分配的张量相同。

  • 00:35:00 在本节中,演讲者讨论了使用函数获取张量可变数据在 C++ 中访问数据,以及由于类型擦除而需要指定所使用的类型。提供的示例显示了如何使用此方法将值打印到标准输出。演讲者还提到需要小心分配张量和输出缓冲区以及如何使用预分配的输出缓冲区。然后讨论转向使用 GPU 执行提供程序运行线性模型,使用 Microsoft ML ONNXRuntime GPU 包作为针对 CPU 运行 ONNXRuntime 的默认选择。最后,演讲者简要介绍了视觉网络的两个演示项目:一个名为 ResNet 的分类器和一个名为 MobileNet 的检测器。演示代码与前面的示例类似,演讲者重点介绍了这些网络中涉及的预处理和后处理。

  • 00:40:00 在本节中,演示者演示了如何使用 ONNXRuntime 通过外部计时器分析神经网络的执行情况。通过在会话创建期间添加分析选项,ONNXRuntime 可以生成一个 JSON 文件,其中包含在每个阶段花费的执行时间以及已执行的图中所有运算符的爆炸。这个工具可以提供额外的细节,比如模型是在 CPU 还是 GPU 上运行,或者它是顺序执行还是并行执行。分析有助于微调网络的执行并检查它是否在另一个加速器上运行。

  • 00:45:00 在本节中,演讲者演示了优化对使用 C++ 中的 ONNX 和 ONNXRuntime 的模型加载时间和执行时间的影响。禁用优化会导致执行时间显着延长,而启用优化会导致加载时间更长。但是,可以保存平衡优化和加载时间的模型的优化版本。演讲者向听众展示如何使用不同的可用选项优化模型并保存它。此外,演讲者还简要介绍了并行执行并演示了它如何显着减少一批图像的处理时间。

  • 00:50:00 在本节中,演讲者讨论了顺序图像的执行以及全局线程池中的争用,导致每张图像的执行时间更长。他们还提到使用分析工具来改进单个输入的时间测量以及每个图像执行的所有运算符的爆炸式增长。演讲者解释了 Extensor 库用于张量操作的用法,类似于 Python 的 numpy,用于在更简单的 ResNet 分类器中进行图像预处理。还提到了基础、中级和高级级别的 ONNX 运行时区别,具有自定义运算符、内存区域和分配器等高级功能。还讨论了交易支持和 Python 示例,并提供了演示和幻灯片的链接。

  • 00:55:00 在本节中,演示者讨论了他们对对象检测算法进行的基准测试,重点关注对嵌入式设备有用的单级检测器。他们针对 FPGA、GPU 和 CPU 进行了基准测试,发现 NVIDIA 设备、英特尔酷睿 E7 CPU 和 FPGA 是某些类型操作的最佳平台。他们还提到在 ONNX 中有一些对训练模型的支持,尽管只是在 Python 中。当被问及他们是否会考虑在生产中使用 ONNXRuntime 时,他们表示他们已经在测试和过渡到生产中使用它。他们指出,微软也在许多项目中使用它,包括 Windows ML,并且它已经开发了三年。
 

使用 ONNX Runtime 和 Hugging Face 加速机器学习



使用 ONNX Runtime 和 Hugging Face 加速机器学习

视频“使用 ONNX Runtime 和 Hugging Face 加速机器学习”讨论了 Hugging Face 的 Optimum 库的创建,该库侧重于通过轻松应用 ONNX 运行时来加速 Transformer 模型从训练到推理的过程。该库简化了转换器库和硬件加速之间的桥梁,为生产性能创建了一个易于使用的工具包。通过应用 ONNX Runtime 提供的优化,用户可以受益于所有硬件加速,从而加快推理管道。 Hugging Face 社区内的协作正在使用这些加速推理管道类实现序列到序列模型优化,一个端到端示例表明,使用 Optimum 库可以使吞吐量增加 44% 或延迟减少,同时保留原始模型精度的 99.6%。

  • 00:00:00 在本节中,来自 Hugging Face 的 Jeff 讨论了该公司的目标,即通过易于访问的预训练模型和工具,让世界上每家公司都能使用 Transformer 模型的强大功能。他解释说,迁移学习和注意力是你所需要的一切纸改变了机器学习领域,在自然语言处理任务中实现了突破性的性能,并在机器学习的每一种模式中产生了最先进的结果。 Jeff 介绍了 Optimum 库,该库旨在通过轻松应用 ONNX 运行时来加速转换器模型,使工程师和软件开发人员更容易在生产中使用这些模型。

  • 00:05:00 在本节中,演讲者讨论了 Hugging Face Optimum 库的创建,该库专注于加速 transformer 模型从训练到推理的过程。该库提供了一个用于硬件加速的参考工具包,其中包含专用于生产性能的高级 API。 Optimum 中的 Onnx Runtime 包提供了 DeepSpeed 的本地集成,这是一种加速训练的方法。 Optimum 还提供 Ort Optimizer 来简化图形模型,Rt Quantizer 来优化权重,并针对特定的执行提供程序来利用特定于硬件的优化。总体而言,Optimum 简化了转换器库和硬件加速之间的桥梁,为生产性能创建了一个易于使用的工具包。

  • 00:10:00 在本节中,演讲者讨论了使用 ONNX 运行时和 Hugging Face 的优化库优化机器学习模型。通过从 Auto Model for Task 切换到 RT Model for Task,用户可以轻松应用 ONNX Runtime 提供的优化并受益于所有硬件加速,从而加快推理管道。 Hugging Face 社区也在合作使用这些加速推理管道类来实现序列到序列模型优化。博客文章中概述的端到端示例表明,使用 Optimum 库可以使吞吐量增加 44% 或延迟减少,同时保持原始模型精度的 99.6%。
原因: