有关概念性指南,请参阅 使用 Windows ML 运行 ONNX 模型。
可以将 Microsoft.WindowsAppSDK.ML NuGet 包中的 API 视为这两组的超集:
- Windows ML API。 Microsoft.Windows.AI.MachineLearning 命名空间中的 Windows ML API,例如 ExecutionProviderCatalog 类及其方法(即 Windows 运行时 API)。
- ONNX 运行时 API。 ONNX Runtime (ORT) 的某些 API 的 Windows ML 实现(在 Microsoft.WindowsAppSDK.ML NuGet 包中)。 有关文档,请参阅 ONNX 运行时 API 文档。例如, OrtCompileApi 结构。 有关使用这些 API 的代码示例以及文档的更多链接,请参阅 使用 Windows ML 运行 ResNet-50 模型 教程。
Microsoft.WindowsAppSDK.ML NuGet 包
Microsoft Windows ML 运行时为 Windows 应用程序中的机器学习和 AI作提供 API。
Microsoft.WindowsAppSDK.ML NuGet 包提供 Windows ML 运行时.winmd文件,用于 C# 和C++项目。
pywinrt Python wheel
Microsoft Windows ML 运行时利用 pywinrt 项目提供对同一 Windows ML API 的 Python 访问。 包名称为 winui3-Microsoft.Windows.AI.MachineLearning。 在 python 中使用 Windows 应用 SDK 需要其他包。 有关详细信息,请参阅 “使用 Windows ML 运行 ONNX 模型 ”主题。
Windows ML API
有关 API 参考文档和代码示例,请参阅 Microsoft.Windows.AI.MachineLearning 命名空间。
实现说明
Windows ML 运行时与 Windows 应用 SDK 集成,并依赖于其部署和引导机制:
- 自动发现与当前硬件兼容的执行提供程序
- 管理包生命周期和更新
- 处理包注册和激活
- 支持不同版本的执行提供程序
依赖于框架的部署
Windows ML 作为 依赖于框架 的组件提供。 这意味着你的应用必须:
- 通过添加
Microsoft.WindowsAppSDK的引用(推荐),引用主 Windows 应用 SDK NuGet 包 - 或者,引用
Microsoft.WindowsAppSDK.ML和Microsoft.WindowsAppSDK.Runtime
有关部署 Windows 应用 SDK 应用程序的详细信息,请参阅 包和部署 Windows 应用 文档。
将 ONNX 运行时与 Windows ML 配合使用
对于C++应用程序,注册执行提供程序后,直接使用 ONNX 运行时 C API 创建会话并运行推理。
对于 C# 应用程序,请直接使用 Microsoft.ML.OnnxRuntime 命名空间中的 ONNX Runtime 进行推理。
对于 Python 应用程序,请使用单独的 ONNX 运行时滚轮(onnxruntime)进行推理。 对于实验性版本,请使用索引onnxruntime-winml==1.22.0.post2中的https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/ORT-Nightly/pypi/simple包。
Python 说明
初始化 Windows 应用 SDK
初始化 Windows 应用 SDK 后,所有 Windows ML 调用都应发生。 这可以通过以下代码完成:
from winui3.microsoft.windows.applicationmodel.dynamicdependency.bootstrap import (
InitializeOptions,
initialize
)
with initialize(options = InitializeOptions.ON_NO_MATCH_SHOW_UI):
# Your Windows ML code here
注册在 Windows ML 外部进行
ONNX 运行时的设计方式是 Python 和本机环境是分开的。 同一进程中的本机注册调用不适用于 Python 环境。 因此,应直接使用 Python API 注册执行提供程序。
删除 pywinrt 的打包 vcruntime
pywinrt 项目在 winrt-runtime 包中包含 msvcp140.dll。 这可能与其他软件包冲突。 请删除此 dll 以避免此问题,并使用 vc 可再发行组件安装缺少的 vcruntime 库