1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EVO-X2(Ryzen AI Max+ 395 / Radeon 8060S)Windows で PyTorch(ROCm SDK 7.1.1)を動かす手順メモ(2025/12)

Posted at

LinuxではAMDのグラフィックボードでPytorchが動くようになってきています。では、Windowsではどうでしょう? 実際のところ、Windows上ではROCmが部分対応の状況でまだ制約があるようです。それでも、ごく簡単な学習までは動いたので、その手順を記します。

この手順は AMD Software: PyTorch on Windows Edition 7.1.1 を前提に、Python venv で PyTorch(ROCm SDK 7.1.1)を導入し、動作確認(テスト #1〜#4)まで行うまとめです。


0. 前提(重要)

  • ドライバー要件:PyTorch on Windows 7.1.1 では Graphics driver 25.20.01.17 が必須
  • Python:ROCm Windows wheels は Python 3.12(cp312)前提
  • DataLoader:安定性のため、まず pin_memory=False をデフォルト推奨
    • pin_memory は転送高速化(pinned memory)に有効だが、環境によっては終了時の挙動に影響することがあるため、まず安定側で固める

1. 既存の AMD ドライバー / AMD Software を外す(推奨)

1-1) 通常のアンインストール

  • Windows 設定 → アプリ → インストールされているアプリから AMD Softwareをアンインストール
  • 再起動

1-2) 問題が残る場合は AMD Cleanup Utility

  • AMD Cleanup Utility を使う(セーフモード推奨
  • 実行後に再起動

2. AMD Software: PyTorch on Windows Edition 7.1.1 をインストール

確認の目安:AMD Software の「Settings → System → Software」等で Driver Version を確認。


3. Python 3.12 + venv を作成

PowerShell 例:

py -3.12 -m venv .venv
.\.venv\Scripts\activate
python -V   # 3.12.x を確認
python -m pip install -U pip

4. PyTorch(ROCm SDK 7.1.1)を pip で導入

ROCm docs の「Install PyTorch via PIP」に沿って導入します。

# ROCm SDK components
pip install --no-cache-dir `
  https://repo.radeon.com/rocm/windows/rocm-rel-7.1.1/rocm_sdk_core-0.1.dev0-py3-none-win_amd64.whl `
  https://repo.radeon.com/rocm/windows/rocm-rel-7.1.1/rocm_sdk_devel-0.1.dev0-py3-none-win_amd64.whl `
  https://repo.radeon.com/rocm/windows/rocm-rel-7.1.1/rocm_sdk_libraries_custom-0.1.dev0-py3-none-win_amd64.whl `
  https://repo.radeon.com/rocm/windows/rocm-rel-7.1.1/rocm-0.1.dev0.tar.gz

# torch / torchvision / torchaudio (PyTorch 2.9 + ROCm SDK 7.1.1)
pip install --no-cache-dir `
  https://repo.radeon.com/rocm/windows/rocm-rel-7.1.1/torch-2.9.0+rocmsdk20251116-cp312-cp312-win_amd64.whl `
  https://repo.radeon.com/rocm/windows/rocm-rel-7.1.1/torchaudio-2.9.0+rocmsdk20251116-cp312-cp312-win_amd64.whl `
  https://repo.radeon.com/rocm/windows/rocm-rel-7.1.1/torchvision-0.24.0+rocmsdk20251116-cp312-cp312-win_amd64.whl

4-1) インストール後の簡易確認(推奨)

python -c "import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"

注意:torchvision / torchaudio の導入時に pip が依存解決で CPU版 torch を上書きしてしまうケースが報告されています。
期待:2.9.0+rocmsdk... / 実際:2.9.1+cpu のように変わる場合は再導入を検討。


5. 動作確認(テスト #1〜#4)

テスト #1:GPU認識

python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"

期待例:

  • True
  • AMD Radeon(TM) 8060S Graphics

テスト #2:行列積(GEMM)

rocm_test2.py

import time, torch

assert torch.cuda.is_available()
x = torch.randn(4096, 4096, device="cuda", dtype=torch.float16)
torch.cuda.synchronize()
t0 = time.time()
y = x @ x
torch.cuda.synchronize()
print("ok", y.shape, "sec", time.time() - t0)

テスト #3:Conv2d

rocm_test3.py

import torch
import torch.nn as nn

m = nn.Conv2d(64, 128, 3, padding=1).cuda().half()
x = torch.randn(32, 64, 64, 64, device="cuda", dtype=torch.float16)
y = m(x)
torch.cuda.synchronize()
print(y.shape)

テスト #4:CIFAR-10 学習(スモーク:短め)

  • 初回は CIFAR-10 の ダウンロードが走るため遅く見えることがあります
  • 終了しない問題が出た場合は、データセットで pin_memory=True していないか確認。 pin_memory=False で運用

rocm_test4.py

import time
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

device = "cuda" if torch.cuda.is_available() else "cpu"
print("device:", device)
if device == "cuda":
    print("gpu:", torch.cuda.get_device_name(0))

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5)),
])

train_ds = datasets.CIFAR10(root="./data", train=True, download=True, transform=transform)
test_ds  = datasets.CIFAR10(root="./data", train=False, download=True, transform=transform)

# 安定優先:pin_memory=False
train_loader = DataLoader(train_ds, batch_size=128, shuffle=True, num_workers=0, pin_memory=False)
test_loader  = DataLoader(test_ds,  batch_size=128, shuffle=False, num_workers=0, pin_memory=False)

model = nn.Sequential(
    nn.Conv2d(3, 32, 3, padding=1), nn.ReLU(),
    nn.Conv2d(32, 64, 3, padding=1), nn.ReLU(),
    nn.MaxPool2d(2),
    nn.Conv2d(64, 128, 3, padding=1), nn.ReLU(),
    nn.MaxPool2d(2),
    nn.Flatten(),
    nn.Linear(128*8*8, 256), nn.ReLU(),
    nn.Linear(256, 10),
).to(device)

opt = optim.Adam(model.parameters(), lr=1e-3)
crit = nn.CrossEntropyLoss()

# train (short)
model.train()
t0 = time.time()
for step, (x, y) in enumerate(train_loader, start=1):
    x, y = x.to(device), y.to(device)
    opt.zero_grad(set_to_none=True)
    out = model(x)
    loss = crit(out, y)
    loss.backward()
    opt.step()
    if step % 50 == 0 or step == 1:
        acc = (out.argmax(1) == y).float().mean().item()
        print(f"epoch 1 step {step} loss {loss.item():.4f} acc {acc*100:.1f}%")
    if step >= 350:  # 短めに切る(必要なら外す)
        break

if device == "cuda":
    torch.cuda.synchronize()
print(f"train done: {time.time()-t0:.1f}s")

# eval (short)
model.eval()
correct = 0
total = 0
with torch.no_grad():
    for step, (x, y) in enumerate(test_loader, start=1):
        x, y = x.to(device), y.to(device)
        out = model(x)
        pred = out.argmax(1)
        correct += (pred == y).sum().item()
        total += y.numel()
        if step >= 50:
            break
print(f"eval (first 50 batches): acc {100.0*correct/total:.2f}%")
print("OK")

6. 参考リンク(公式・一次情報中心)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?