WindowsでAIを動かそうとすると、よく見かけるのが CUDA と DirectML です。

NVIDIA製GPUであればCUDAが一般的ですが、AMDやIntelのGPU、あるいはCUDAを使えない環境では DirectML が選択肢になります。

そのDirectMLをPyTorchから利用するためのライブラリが torch-directml です。

この記事では、torch-directmlとは何か、必要になる場面、制限事項、インストール方法、使い方についてまとめます。


torch-directmlとは?

torch-directmlは、PyTorchからMicrosoft DirectMLを利用するためのライブラリです。

DirectMLはWindowsのDirectX 12上で動作する機械学習アクセラレーションAPIで、

  • AMD GPU
  • Intel GPU
  • NVIDIA GPU

など、DirectX 12対応GPUであれば利用できます。

つまり、CUDAが使えない環境でもGPUでPyTorchを実行できるようになります。


いつ必要になるの?

必要になるのは

「PyTorchでDirectMLを利用したい場合だけ」

です。

CPUだけで実行するなら不要ですし、CUDAが使える環境なら通常はCUDAを利用した方が高速です。

例えば

  • AMD Radeon
  • Intel Arc
  • Intel内蔵GPU

などでPyTorchをGPU実行したい場合に利用します。


ONNXを使う場合だけ必要?

これはよく誤解されます。

答えは「いいえ」です。

torch-directmlは

  • PyTorch

専用です。

一方、

ONNX RuntimeでDirectMLを利用する場合は

onnxruntime-directml

という別ライブラリを使用します。

つまり

PyTorch → torch-directml

ONNX Runtime → onnxruntime-directml

という関係になります。

両者は別物です。


インストール方法

まずPyTorchをインストールします。

pip install torch torchvision torchaudio

続いて

pip install torch-directml

をインストールします。


基本的な使い方

通常のPyTorchでは

device = torch.device("cuda")

のようにデバイスを指定します。

DirectMLでは次のようになります。

import torch
import torch_directml

device = torch_directml.device()

モデルもTensorもこのdeviceへ送ります。

model = model.to(device)
x = x.to(device)

推論例です。

with torch.no_grad():
    y = model(x)

基本的な使い方はCUDAとほぼ同じです。


import torch_directml は必要?

はい。

DirectMLを使うなら必須です。

import torch_directml

を行わないと

device = torch_directml.device()

が利用できません。

CPUやCUDAのみを利用する場合は不要です。


CUDAとの違い

DirectMLは便利ですが、CUDAほど成熟していません。

主な違いは次の通りです。

項目 CUDA DirectML
対応ライブラリ 非常に多い 少ない
速度 高速 やや遅いことが多い
対応演算 ほぼ全て 未対応あり
情報量 非常に多い 少なめ

特に最新AIライブラリはCUDA前提で作られているものが多いため、DirectMLでは動作しないケースがあります。


VRAMが足りなくなったら?

DirectMLには

「VRAMが足りなくなったら自動でCPUへ逃がす」

という機能はありません。

一般的には

Out of Memory

などのエラーになり処理が停止します。

また

torch.cuda.empty_cache()

のようなCUDA専用のメモリ管理機能も利用できません。


CPUへ自動オフロードするライブラリはある?

現時点ではありません。

CUDAでは

  • Accelerate
  • DeepSpeed

などがGPU・CPUを組み合わせて利用できますが、

これらは基本的にCUDA向けです。

DirectMLには同等の仕組みは用意されていません。

必要なら自分で

layer.to(cpu)

などを書いてCPUとGPUを切り替える必要があります。


WANやQwenは動く?

結論から言えば

「モデル次第」です。

Qwen

小さいモデル(例:Qwen 0.5B~3B程度)であれば、環境によっては動作することがあります。

一方で、7B以上のモデルではVRAM使用量が大きく、DirectMLではメモリ不足や未対応演算によって動かないケースが増えます。

WAN(Wan2.1などの動画生成モデル)

動画生成モデルは

  • 大容量VRAM
  • 高速GPU
  • CUDA最適化

を前提にしていることが多く、DirectMLでは正常に動作しない、または非常に遅くなる可能性があります。

特にComfyUIや各種生成AIツールでは、CUDA向けに最適化されたカスタム演算を利用していることが多く、DirectMLでは未対応となる場合があります。


DirectMLに向いている用途

比較的向いているのは

  • 小型LLM
  • 小規模画像認識
  • PyTorchの学習用サンプル
  • 軽い推論処理

です。

逆に

  • 大型LLM
  • 動画生成AI
  • 最新の画像生成AI
  • CUDA専用拡張を利用するモデル

にはあまり向いていません。

普通にtorch cudaで動くような推論コードはorch-directmlでも動くの?

結論としては、「そのまま動く場合も多いが、必ずではない」です。

CUDA向けの推論コードが次のような一般的なPyTorchコードであれば、変更箇所はほとんどありません。

import torch
import torch_directml

device = torch_directml.device()

model = model.to(device)
x = x.to(device)

with torch.no_grad():
    y = model(x)

つまり、

device = torch.device("cuda")

を

device = torch_directml.device()

に変更するだけで動くケースは少なくありません。

ただし、そのまま動かないケースもある

問題になるのは**「PyTorchそのもの」ではなく、「モデルやライブラリがCUDA固有の機能を使っている場合」**です。

例えば次のようなものは動かない、または修正が必要になることがあります。

  • torch.cuda のAPIを直接呼び出しているコード
  • CUDA専用のカスタムオペレーション(Custom CUDA Ops)
  • CUDA向けに最適化されたライブラリ(例:FlashAttention、xFormersの一部機能)
  • Tritonカーネルを利用するモデル
  • CUDA専用拡張を前提とした生成AIフレームワーク

こうしたコードは、device を変更するだけでは動作しません。

動きやすいもの

比較的そのまま動くことが多いのは、

  • 標準的なPyTorchのニューラルネットワーク
  • torchvisionのモデル
  • シンプルなCNNやMLP
  • CUDA固有APIを使っていないTransformer

などです。

動きにくいもの

逆に、最近の生成AIではCUDA依存が増えているため注意が必要です。

例として、

  • Stable Diffusion(特に最適化版)
  • ComfyUIの一部カスタムノード
  • FlashAttention必須のLLM
  • xFormersを前提としたモデル
  • Tritonを利用する実装

などは、そのままでは動かないことがあります。


DirectMLを利用するメリット

DirectML最大のメリットは

CUDA対応GPUを持っていなくてもGPUアクセラレーションが利用できる

ことです。

例えば

  • AMD Radeon
  • Intel Arc
  • Intel Iris Xe

などでもPyTorchをGPU実行できます。

「GPUはあるのにCUDAが使えない」という環境では非常に有力な選択肢になります。


まとめ

torch-directmlは、Windows上でPyTorchからDirectMLを利用するためのライブラリです。

主なポイントをまとめると、

  • Windows専用
  • DirectX 12対応GPUで利用可能
  • PyTorch専用(ONNX Runtimeとは別)
  • AMD・Intel・NVIDIA GPUに対応
  • import torch_directml が必要
  • CUDAほど対応範囲は広くない
  • VRAM不足時に自動CPUオフロードはできない
  • 大型LLMや動画生成AIでは制限が多い
  • 小規模なAIモデルや推論用途では有効

CUDA環境が利用できないWindows PCでは、GPUを活用できる数少ない選択肢の一つです。ただし、CUDA向けに作られた最新のAIアプリケーションや大規模モデルでは制限を受けることがあるため、用途に応じて使い分けることが重要です。