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 の概念を参照してください。