Windows ML ランタイム API の概要

Important

Windows ML ランタイム API は現在試験段階であり、運用環境での使用はサポートされていません。 この API を試しているアプリは、Microsoft Store に公開しないでください。

Important

Windows ML ランタイム API は現在、C++ および Python で使用できます。C# は現在サポートされていません。C# からこれらの API を使用することに関心がある場合は、Windows ML GitHub リポジトリに issue を投稿してお知らせください。

Windows ML ランタイム API は、Windows専用に構築されたネイティブの C/C++ ローカル AI 推論フレームワークです。 Windows ML ランタイム API を使用すると、モデルの読み込み、CPU、GPU、または NPU 実行ターゲット (特定の DXCore アダプターまたは D3D12 デバイスを含む) の選択、そのターゲットへのテンソルのバインド、モデルとプロセッサのステージをパイプラインに構成、パイプラインのコンパイル、パイプラインを実行し、出力テンソルを生成することができます。

オプションのテキスト生成 API と音声認識 API は、アプリが提供するモデルを介して、これらの同じランタイム オブジェクトを上位レベルのワークフローに構成します。「Windows ML を使用して独自の言語モデルでテキストを生成する」および「Windows ML を使用して独自の Whisper モデルで音声を認識する」を参照してください。

ランタイム API と ONNX ランタイム

アプリがWindowsのみを対象とする場合で、さらに現在試験段階の API を使ってもよいなら、ランタイム API を使用してください。 ハードウェアの選択 (特定の DXCore アダプターまたは D3D12 デバイスを含む)、テンソルの常駐、マルチステージ パイプライン配置、コンパイルを明示的に制御できます。

それ以外の場合、アプリを他のプラットフォームで実行する必要がある場合、または既にクロスプラットフォームの ONNX ランタイム セッション コードが動作している場合は、代わりに Windows ML に含まれる ONNX ランタイム API を使用してください。

コア オブジェクト モデル

概念 主要 API Description
Runtime IWinMLRuntime WinMLCreateRuntimeによって返されるインターフェイス。モデル ファイルの読み込み、実行ターゲットの作成、パイプライン ビルダーの作成を行います。
Model IWinMLModel ファイルまたはバッファーから読み込まれた不変で不透明なモデル成果物。 IWinMLModelSchema を通じて、宣言されたスキーマを反映します。
実行ターゲット IWinMLExecutionTarget ステージの構築とテンソルの作成に使用される CPU、GPU、または NPU 配置トークン。
パイプライン ビルダー IWinMLPipelineBuilder モデルステージとプロセッサ ステージを追加し、それらを接続して、準備されたパイプラインを構築します。
パイプライン IWinMLPipeline バインドされたテンソルを実行し、出力テンソルを生成する、準備された、すぐに実行可能なグラフ。
段階 IWinMLStage 位置入力バインドと出力バインドとその解決された実行ターゲットを所有するパイプライン内のステップ。
テンソル IWinMLTensor ステージの入力と出力にバインドされた型指定された多次元データ。
テキスト生成/音声認識 Windows ML テキスト生成 API と音声認識 API 群 呼び出し元が所有するランタイム オブジェクトに対して、型指定されたセッション、ストリーム、結果を使用して構成される上位レベルのワークフロー。

バックエンドと実行ターゲットを選択する

LoadModelFromFile は、モデル成果物のファイル拡張子からバックエンドを選択します。 アプリでは、ファイルを読み込むバックエンドに関係なく、同じランタイム オブジェクト (モデル、実行ターゲット、パイプライン ビルダー、ステージ、バインド、 Run ) が使用されます。

モデルファイル Backend ハードウェアアクセラレーション
.onnx、.ort ONNX ランタイム Windows が Windows ML EP カタログを通じてインストールし、最新の状態に維持する実行プロバイダー (EP)
.gguf llama.cpp アプリローカル CPU モジュールと、アプリと共にデプロイする NVIDIA GPU 用のオプションの CUDA モジュール。 CPU と CUDA は、Windows ML がこのリリースで検証する唯一の llama.cpp バックエンドです。

IWinMLRuntimeで作成された実行ターゲットは、ハードウェア クラス (CPU、GPU、または NPU) を表します。 ターゲットを再利用してステージを構築し、テンソルを作成します。1 つのターゲットを再利用すると同じターゲット アフィニティが表されますが、個別のターゲットを使用すると、ターゲット間の転送境界が明示的になります。 パイプライン ビルダーの Build メソッドが実行されると、ランタイムは各ステージをそのターゲットに対応する実行バックエンドに配置し、ターゲットとバックエンドの互換性を確定します。

デバイスを自分で列挙しないハードウェアクラスの場合は、CreateExecutionTarget を呼び出す際に、WINML_EXECUTION_TARGET_KIND と WINML_EXECUTION_TARGET_PREFERENCE を引数として指定します。これらは、そのクラスの候補 (統合型 GPU とディスクリート型 GPU など) の順位を表します。 ERROR_NOT_FOUNDとERROR_NOT_SUPPORTEDを同様に扱い、別のクラスにフォールバックします。

ComPtr<IWinMLExecutionTarget> target;
HRESULT hr = runtime->CreateExecutionTarget(
    WINML_EXECUTION_TARGET_KIND_NPU,
    WINML_EXECUTION_TARGET_PREFERENCE_EFFICIENCY,
    target.GetAddressOf());
if (hr == HRESULT_FROM_WIN32(ERROR_NOT_FOUND) ||
    hr == HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED))
{
    THROW_IF_FAILED(runtime->CreateExecutionTarget(
        WINML_EXECUTION_TARGET_KIND_GPU,
        WINML_EXECUTION_TARGET_PREFERENCE_PERFORMANCE,
        target.GetAddressOf()));
}
else
{
    THROW_IF_FAILED(hr);
}

CreateCpuExecutionTarget は、CPU の種類を要求することと同じです。 CreateExecutionTargetFromAdapter と CreateExecutionTargetFromD3D12 は、ランタイムに選択させるのではなく、ターゲットを特定の DXCore アダプターまたは D3D12 デバイスにバインドします。 インストールされている 実行プロバイダー (EP) に依存する ONNX モデルの場合、オプションの ONNX Runtime 互換性サーフェスを使用すると、既に登録したプロバイダーをピン留めできます。 各バックエンドは、これらのターゲットを異なる方法で処理します。たとえば、.gguf モデルで使用される llama.cpp バックエンドは、GPU ターゲットを有効にするために少なくとも部分的な GPU オフロードが必要であり、NPU ターゲットやプロバイダーの固定はサポートしていません。 バックエンドごとの完全なターゲット解像度マトリックス、GGUF モデルの実行手順については、Windows ML Runtime API の概念を参照してください。

次のステップ