はじめに
WindowsのAI関連を調べていると、DirectML、Windows ML、ONNX Runtime、NPU、GPU あたりの言葉が近い場所に出てきます。
この記事では、その中でも DirectMLとは何か をざっくり整理します。
先に一言でいうと、DirectMLは Windows上の機械学習処理をDirectX 12互換ハードウェアで高速に実行するための低レベルAPI です。
なお、2026年6月時点では、Microsoft Learn上でもDirectMLは「sustained engineering」、つまりサポートは継続されるが、新機能開発の中心はWindows MLへ移っている、という位置づけで説明されています。この記事もその前提で整理します。
DirectMLとは
DirectMLは、正式には Direct Machine Learning の略です。
Microsoftの説明では、DirectMLは機械学習向けの低レベルAPIで、DirectX 12スタイルのC++ APIとして提供されます。特徴は、DirectX 12互換のハードウェア上で、機械学習の演算をハードウェアアクセラレーションできることです。
ざっくり言うと、次のような役割です。
- Windowsアプリから機械学習の推論処理を実行する
- GPUなどのDirectX 12互換ハードウェアを使って高速化する
- 特定ベンダー専用のAPIではなく、Windows/DirectXの抽象化を通して扱う
- Direct3D 12のリソース、コマンドキュー、コマンドリストと近い考え方で扱える
ポイントは、DirectMLが「学習済みモデルをいい感じに全部面倒見てくれる高レベルなAI SDK」というより、推論の演算をWindowsのGPU実行基盤へ流すための低レベルな部品 だという点です。
DirectMLが担当すること
DirectMLは、機械学習モデルを構成する各レイヤーの処理を、operator と呼ばれる演算プリミティブとして実行します。
たとえば、公式ドキュメントでは次のような演算子のカテゴリが挙げられています。
- ReLU、sigmoid、tanhなどのActivation
- add、max、minなどのElement-wise演算
- 2D/3D Convolution
- Pooling
- GEMM、GRU、LSTM、RNNなどのニューラルネットワーク系演算
つまりDirectMLは、モデル全体を「魔法の箱」として扱うというより、モデルを構成する演算をGPU上で効率よく実行するためのレイヤーです。
そのぶん、直接DirectMLを使う場合は開発者側の責任も大きくなります。モデルの解釈とDirectMLのoperator/グラフへの変換、重みの読み込み、リソース割り当て、バインド、メモリ管理、同期、バリアなどは、かなりDirect3D 12に近い粒度で考える必要があります。
レイヤー単位で実行する場合は、operatorの実行順序やスケジューリングも開発者が制御します。一方、グラフとして実行する場合は、個々のoperatorの順序決定や記録をDirectMLに任せることができます。
DirectMLを直接使う場面
DirectMLを直接使うのが向いているのは、かなり低レベルに制御したい場面です。
たとえば、ゲームエンジンやリアルタイムレンダリングのパイプラインの中に推論処理を組み込みたい場合です。画像のアップスケーリング、ノイズ除去、アンチエイリアシング、スタイル変換のような処理を、既存のDirect3D 12レンダリング処理と近い場所で動かしたい場合には、DirectMLの低レベル性が活きます。
一方で、通常のアプリケーションで「ONNXモデルを読み込んで推論したい」という目的なら、DirectMLを直接叩くより、ONNX RuntimeやWindows ML経由で使うほうが自然なことが多いです。
ONNX Runtimeとの関係
DirectMLは、ONNX Runtimeの Execution Provider としても使えます。
ONNX Runtimeには、推論の実行先を切り替える仕組みがあります。CPU、CUDA、TensorRT、DirectMLなどがExecution Providerとして用意されており、DirectML Execution Providerを使うと、ONNXモデルの推論をWindows上のDirectML経由でGPU実行できます。
この場合、アプリ側はDirectMLの低レベルAPIを直接扱わず、ONNX RuntimeのAPIからDirectMLを使う形になります。
イメージとしては次のような関係です。
DirectMLを「Windows GPU向けの実行基盤」として使い、ONNX Runtimeを「モデルを読み込んで推論するためのランタイム」として使う、と考えると分かりやすいです。
Windows MLとの関係
ここが少しややこしいところです。
現在のMicrosoftのWindows AI関連ドキュメントでは、Windows向けONNX Runtimeデプロイメントの新機能開発は Windows ML 側に移っている、と説明されています。
Windows MLは、ONNX RuntimeをベースにしたWindows向けのローカルAI推論フレームワークです。NPU、GPU、CPUといった実行先を、Windowsが管理するExecution Providerを通して使えるようにする方向の仕組みです。
特にWindows 11 version 24H2以降では、NPUや特定GPU向けのハードウェア最適化Execution ProviderもWindows ML側で扱う流れになっています。
なので、2026年時点でざっくり分けるなら、次のように見るとよさそうです。
- DirectML:DirectX 12に近い低レベルな機械学習アクセラレーションAPI
- ONNX Runtime + DirectML EP:ONNXモデルをDirectML経由でGPU実行する方法
- Windows ML:Windows向けONNX推論アプリで、CPU/GPU/NPUなどの実行先を扱う入口
「DirectML = NPU用API」と考えるのは少し違う
WindowsのAI関連ではNPUの話題も多いため、DirectMLを現在のNPU向けAPIと捉えたくなるかもしれません。
DirectMLは、公式にはDirectX 12互換GPU上で機械学習ワークロードを実行する低レベルのハードウェア抽象化レイヤーとして説明されています。
公式概要には、利用可能な場合はAIアクセラレーションコア上でもモデルの各レイヤーを実行するとの記載があります。ただし、これはDirectMLが現在のWindowsにおける汎用的なNPU用APIである、という意味ではありません。
実務上は、DirectMLをDirectX 12を通じてGPUアクセラレーションを利用する低レベルAPIと捉え、NPUを含む複数の実行先を扱う場合はWindows MLとベンダー最適化Execution Providerを確認するのが安全です。
現在のWindows MLでは、CPUとDirectMLのExecution Providerが組み込まれているほか、対応する環境ではNPUや特定GPU向けのベンダー最適化Execution Providerを取得して利用できます。
Windows AI全体の流れとしては、NPUを含む複数の実行先へONNXモデルを展開したい場合はWindows MLを確認し、DirectX 12と密に連携した低レベル制御が必要な場合はDirectMLを見る、という整理が分かりやすそうです。
どれを見ればよいか
目的別にかなり雑に分けると、次のようになります。
| やりたいこと | まず見るもの |
|---|---|
| WindowsアプリでONNXモデルをGPU・NPU・CPUへ展開したい | Windows ML |
| 既存のONNX RuntimeアプリでDirectMLを明示的に使用したい | DirectML Execution Provider |
| Direct3D 12のレンダリング処理と密に連携したい | DirectML |
| NPUやベンダー最適化GPU EPをWindows側で取得・管理したい | Windows ML |
| DirectX 12互換GPUへ幅広く対応する新規アプリを作りたい | Windows ML(内蔵DirectML EP) |
DirectMLは重要な土台ですが、今からWindows向けONNX推論アプリを作る場合は「DirectMLを直接使うか」よりも、「Windows MLやONNX Runtime経由で十分か」を先に考えるのがよさそうです。
まとめ
DirectMLについて、ざっくり整理すると次のようになります。
- DirectMLは、Windows上の機械学習推論をDirectX 12互換ハードウェアで高速化する低レベルAPI
- Direct3D 12に近い考え方で、リソースや実行制御を細かく扱える
- ONNX RuntimeのDirectML Execution Provider経由で、DirectMLを間接的に使うこともできる
- 2026年時点では、DirectMLはサポート継続だが、新機能開発の中心はWindows MLに移っている
- 新規のWindows向けONNX推論アプリでは、まずWindows MLを確認し、必要に応じてONNX Runtime + DirectML EPやDirectMLの直接利用を検討するのがよさそう
個人的には、DirectMLは「Windows AIの表側の機能」というより、WindowsでハードウェアアクセラレーションされたAI推論を成立させるための低レベルな足場 と捉えると理解しやすいと感じました。








