本指南介绍如何从 使用独立 ONNX 运行时 (通过 NuGet 或 GitHub 提供的Microsoft维护的跨平台运行时)迁移到 Windows ML 中包含的 ONNX 运行时。
为什么切换到 Windows ML?
-
较小的应用下载/安装大小 - 应用不需要分发大型 EP 和 ONNX 运行时
- EP 通过 Windows ML 动态下载,因此无需将它们与应用捆绑在一起
- Windows ML 中的 ONNX 运行时是一个共享的系统范围副本,因此你的应用不必将其与应用捆绑在一起
- 动态使用最新的 EP - 自动下载和管理最新的兼容硬件特定的执行提供程序,而无需应用更新
- 动态使用最新的 ONNX 运行时 - 自动更新 ONNX 运行时,而无需应用更新。 有关详细信息,请参阅 ONNX 版本 文档
Windows ML 的系统要求
- OS:Windows 应用 SDK 支持的 Windows 版本
- 体系结构:x64 或 ARM64
- 硬件:任何电脑配置(CPU、集成/离散 GPU、NPU)
步骤 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!