Important
Windows ML ランタイム API は現在実験的であり、運用環境での使用はサポートされていません。 この API を試しているアプリは、Microsoft Store に公開してはいけません。
このトピックでは、ランタイム API を使用するようにネイティブ C++ プロジェクトを構成し、IWinMLRuntime のインスタンスを作成する方法について説明します。 モデルの読み込み、テンソルのバインド、推論には、Windows ML Runtime API を使用してモデルの実行を続行します。
Prerequisites
-
Microsoft.Windows.AI.MachineLearningパッケージでサポートされているWindowsバージョン。 Windows ML のデプロイ要件を参照してください。 - Visual Studio 2022 以降で、C++ によるデスクトップ開発のワークロードが有効になっている。
- ネイティブ C++ コンソール プロジェクト。
-
実験版
2.7.2021-experimentalMicrosoft.Windows.AI.MachineLearning NuGet パッケージ。 - これらのページのサンプル コードについては、C++20 と Microsoft.Windows.CppWinRT NuGet パッケージが必要です。
Note
C++20 と C++/WinRT は、ランタイム API ではなく、これらのドキュメント サンプルの要件です。 ランタイム API は、ネイティブ COM スタイルの ABI であり、そのアプリの言語要件に基づき、生の COM、WRL、WIL、または別の COM ヘルパーを使用して C または C++ から使用することもできます。
CPU 実行ターゲットはベースライン パスです。 GPU と NPU の可用性は、デバイス、プラットフォーム機能、およびアプリにインストールされている実行バックエンドによって異なります。
ネイティブ NuGet の復元を構成する
ネイティブ Visual C++ プロジェクトには NuGet ターゲット モニカーが必要であるため、パッケージの復元でネイティブ Windowsアセットが選択されます。 最初の.vcxprojインポートの前に、Microsoft.Cpp.* ファイルの先頭付近に次のプロパティ グループを追加します。
<PropertyGroup Label="NuGet">
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<NuGetTargetMoniker>native,Version=v0.0</NuGetTargetMoniker>
<NuGetTargetPlatformIdentifier>Windows</NuGetTargetPlatformIdentifier>
<NuGetTargetPlatformVersion>$(WindowsTargetPlatformVersion)</NuGetTargetPlatformVersion>
</PropertyGroup>
NuGet パッケージの管理PackageReferenceまたは を使用して Microsoft.Windows.AI.MachineLearning パッケージをインストールします。 これらのページでサンプルをビルドするには、 Microsoft.Windows.CppWinRT をインストールし、 C++ 言語標準 を ISO C++20 Standard (/std:c++20) に設定します。 Windows ML パッケージは、ランタイム ヘッダー、インポート ライブラリ、自己完結型 DLL を提供します。C++/WinRT には、サンプル コードでのみ使用されるwinrt::com_ptr、winrt::check_hresult、および<winrt/base.h>便利な機能が用意されています。
CMake とデプロイのオプションについては、「自己完結型インストール」を参照してください。
ランタイムを初期化する
main.cpp を次のコードに置き換えます。
// Copyright (C) Microsoft Corporation. All rights reserved.
#include <Windows.h>
#include <winrt/base.h>
#include <WinMLRuntime.h>
#pragma comment(lib, "windowsapp.lib")
int wmain()
{
winrt::com_ptr<IWinMLRuntime> runtime;
winrt::check_hresult(WinMLCreateRuntime(
__uuidof(IWinMLRuntime),
runtime.put_void()));
return 0;
}
Release|x64 など、パッケージの資産に一致するアーキテクチャ向けにビルドします。 ビルドが成功すると、NuGet の復元によってランタイム ヘッダーとインポート ライブラリが見つかり、必要な DLL が実行可能ファイルの横にコピーされたことが示されます。