Windows ML ランタイム API の C++ プロジェクトを設定する

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 が実行可能ファイルの横にコピーされたことが示されます。

次のステップ