Harukaのnote

Linuxやプログラミング,写真,旅行等の記録帳

Windows11 + Radeon GPU + WSL2 + pyenv +PoetryでPyTorchを使う方法

DirectMLを使うとPyTorchでRadeon GPUが使えるという話を耳にしたので試してみました。 以下のサイトを参考に、Windows11 + Radeon GPU + WSL2 + pyenv +PoetryでPyTorchの環境を作成しました。 Anacondaはcondaとpipが混ざるのが嫌で普段使わないので、 公式には記載がないpyenv + poetryを試しました。ニッチな環境すぎるので自分のメモ程度に残します。 learn.microsoft.com

WSLの準備

WSLを事前に最新版にしてストアからUbuntuをインストールし、セットアップを完了します。

$ wsl --update

Pyenv

Pyenvは以下のページを参考にインストールします。 haruka0000.hatenablog.com

今回はPython 3.9で環境を作るので3.9.16をインストールします。

$ pyenv install 3.9.16

作業フォルダに移動し、pyenvのvirtualenvで環境を作り、有効化します。

$ pyenv virtualenv 3.9.16 test
$ pyenv local test

# Poetry

Poetryはpipでインストールします。

$ pip install --upgrade pip && pip install poetry

torch_directml

torch_directmlをpoetry経由でインストールします。以下のようなpyproject.tomlファイルを作成します。 [tool.poetry.dependencies]には公式(conda版)でインストールしていたパッケージを記載しています。 torchはCUDAを使わないのでCPUの方でいいらしく、[[tool.poetry.source]]にCPU版のソースを指定しています。 CUDAも使いたい場合は普通のtorchを入れたらいいみたいです。

# pyproject.toml
[tool.poetry]
name = "Project Name"
version = "0.1"
description = "プロジェクトの説明"
authors = ["自分の名前"]

[tool.poetry.dependencies]
python = ">=3.9,<3.10"
torch = {version = "2.0.0", source = "torch_cpu"}
torch-directml = "^0.2.0.dev230426"
opencv-python = "^4.8.0.74"
wget = "^3.2"
tqdm = "^4.65.0"
pyyaml = "^6.0"
tensorboard = "^2.13.0"
matplotlib = "^3.7.2"
pandas = "^2.0.3"

[[tool.poetry.source]]
name = "torch_cpu"
url = "https://download.pytorch.org/whl/cpu"
priority = "explicit"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

以下のコマンドでtomlファイルに従ってパッケージをインストールします。

$ poetry install

GPUの確認

最後にGPUが読み込まれているかを確認します。 以下のファイルをtest.py等の名前で作成してください。

# test.py
import torch
import torch_directml

for n in range(torch_directml.device_count()):
  device = torch_directml.device(n)
  print(device, torch_directml.device_name(n))
$ python test.py

認識されたGPUの名前と製品名が表示されます。
privateuseone:0 AMD Radeon RX 6700S
privateuseone:1 AMD Radeon(TM) Graphics

以上で終わりです。 なかなかスムーズに環境構築はできましたが、実際に学習や推論はしていないのでどの程度使えるかはわからないです。 今度、時間があれば試してみたいと思います。