从独立 ONNX 运行时迁移到 Windows ML 的 ONNX 运行时

本指南介绍如何从 使用独立 ONNX 运行时 (通过 NuGet 或 GitHub 提供的Microsoft维护的跨平台运行时)迁移到 Windows ML 中包含的 ONNX 运行时。

为什么切换到 Windows ML?

  • 较小的应用下载/安装大小 - 应用不需要分发大型 EP 和 ONNX 运行时
    • EP 通过 Windows ML 动态下载,因此无需将它们与应用捆绑在一起
    • Windows ML 中的 ONNX 运行时是一个共享的系统范围副本,因此你的应用不必将其与应用捆绑在一起
  • 动态使用最新的 EP - 自动下载和管理最新的兼容硬件特定的执行提供程序,而无需应用更新
  • 动态使用最新的 ONNX 运行时 - 自动更新 ONNX 运行时,而无需应用更新。 有关详细信息,请参阅 ONNX 版本 文档

Windows ML 的系统要求

步骤 1:检查 ONNX 版本兼容性

请参阅 Windows ML 文档中提供的 ONNX 运行时版本 ,以确保 Windows ML 具有应用所需的 ONNX 运行时版本。 根据需要对模型或代码进行任何更新。

步骤 2:检查支持的 EP

请参阅 Windows ML 文档中支持的执行提供程序 ,以确保 Windows ML 支持应用所需的执行提供程序。 根据需要对模型或代码进行任何更新。

步骤 3:检查 Windows 应用 SDK 要求

Windows ML 支持 Windows 应用 SDK 中依赖于框架的部署选项和独立部署选项。 有关 Windows 应用 SDK SDK 中的部署选项的更多详细信息,请参阅 Windows 应用 SDK 部署概述 。 根据需要对应用进行任何更新。

步骤 4:切换到 Windows ML 的 ONNX 运行时

删除应用当前正在使用的 ONNX 运行时的副本。

然后,按照 Windows ML 文档入门 的步骤 1作,了解如何安装 Windows 应用 SDK(其中包含 Windows ML)。

重要

使用Microsoft.ML.OnnxRuntime.Tensors APIs 的 C# 项目必须手动引用版本为 9.0.0 或更高的 System.Numerics.Tensors NuGet 包。 如果没有此 NuGet 包引用,代码将遇到以下运行时错误: Could not load file or assembly 'System.Numerics.Tensors, Version=9.0.0.0

安装 Windows ML 后,C# 和 Python 开发人员应能够编译其应用。 Windows ML 中的 ONNX API 与独立 ONNX 运行时中的 ONNX API 相同。 有关详细信息,请参阅 在 Windows ML 中使用 ONNX API

对于C++开发人员,有两种选择...

  • 更新 ONNX 运行时标头的使用,以使用目录中包含的 winml/ Windows ML ONNX 运行时标头。
  • 或者,将 WinMLEnableDefaultOrtHeaderIncludePath 属性设置为 true,使 ONNX 运行时标头路径与之前使用的独立 ONNX 运行时相同。

有关这两个选项的详细信息,请参阅 “使用 ONNX API ”。

步骤 5:通过 Windows ML 初始化 EP

请参阅 使用 Windows ML 文档初始化执行提供程序 ,了解如何使用 Windows ML 动态初始化(下载和注册)EP。

步骤 6:运行应用!

你的应用现在应该在本地使用 Windows ML!