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専用拡張を利用するモデル
にはあまり向いていません。
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アプリケーションや大規模モデルでは制限を受けることがあるため、用途に応じて使い分けることが重要です。


