はじめに
Pythonの pytorch を WSL2 でCUDAありで使う設定を2回行いました。何とか、動いているのですが、どうして動いているのか、未だによく理解していない。^^;
が、それでも忘れないうちにメモしておきます。内容については、理解が間違っている可能性は多いにある のですが、それでもヒントにはなるかもなので。
内容
いろいろごちゃごちゃやったので、どれが正しいか分からないのですが、基本的に以下が必要条件のような気がしています。
互換性
- Graphic board のdriver のversion と CUDA の version
- CUDA と pytorch
- pytorcht と python
pytorch のwheelファイルは下記にあります。所望のplatform(linux or win), python(cp38, cp39, etc..), CUDA(cu118, cu117, etc.)に対応したファイルを直接のリンクを取得できます。直接ダウンロードしもできます。
python3.9(2023/08/28)
python のversion について困ったことがありました。最初python3.8 を使い、3.8以上で動かすpoetry管理で設定していたのですが、numpy が入れられませんでした。そこで、python3.9 で使うことにしました。python 3.9にしたことで、pytorch の wheel ファイルも変わりました。
過去のCUDAの削除
所望のversion のCUDAをインストールするため、インストールしてあるCUDAを削除しました。やることは、atp-get で purge するだけでなく、/etc/ocal/以下にあるフォルダの削除、使用しているならnvidia/cuda repositoryのdocker image の削除、/etc/apt/以下の整理をしました。
下記の通りにしました。
作業メモ
NVIDIAのグラフィックボードの型番やドライバのversionを確認
購入時の仕様などが残っていればよいですが。調べるために、
PS> systeminfo
で表示されているものを見ても、いまいちわからず。
PS> dxdiag
で探したりしました。あと、NVIDIAのツールでデスクトップの設定みたいなので確認できました。(todo: 確認)
Windows 10 (ホストOS)にNVIDIA Driver をインストール
ドライバがすでに入っていれば問題なし。古ければ新しいのを入れた方が良いのかも?
このページで、NVIDIA RTX A5000 とか入れて、自分のボードに対応するドライバを落としてきて入れます。(入れました)
ここで入れるのはドライバです。CUDAではありません。自分側の理解では、Host OS側のCUDAは必要ない気がしています。CUDAはWSL2側に入れます。
インストールされていれば、下記でCUDAのversion とdriver のversion が確認できます。ただし、私の環境でこれを実行すると、ホストOS側のものが出力されてしまい、confusing でした。
$ nvidia-smi
WSL2をインストール
今どきは、管理者権限でpowershell でコマンドたたくだけでできます。私の場合、WSL のVersion 2 でないとCUDAが使えない感じでした。
PS> wsl --install -d ubuntu_20.04
PS> wsl -l -v
でインストールして running になっていることを確認した後、version 1 である場合は 2 にします。
PS> wsl --set-version ubuntu_20.04 2
WSL2 に CUDA を入れる
CUDA Version と Driver の version の関係がこちらにあります。新しいCUDAを入れるには 新しい Driver の version である必要があるようです。下記を見ると、CUDA Toolkit は CUDA11.x だとLinux_X86..だと 450.80....で Windows だと452.39.... とありますが、WSL2 で使うとき、どちらにあたるのか分かりません。(自分の知識不足で)
なので、とりあえず、最新のドライバでCUDA11.7 を入れることにしました。cuda download のページで、Linux, X86_64, WSL-Ubuntu で出てきたコマンドを、WSL2 でそのまま実行しました。
インストール後、cuda があることを確認します。
$ ls -d /usr/local/cuda*
CUDA11.8のインストール(追加2023/08/28)
最新のもの以外を入れたいとき、例えばCUDA11.8では下記のページを使えます。
Install type で deb(local), deb(network)がありますが、どちらも実行すると最新のCUDA20.xがインストールされてしまいました。結局、rufile(local)の下記でできました。上記のインストールできなかったのは、両方ともapt でインストールするものなので、apt の設定に何かあったのかもしれません。(一応/etc/apt/以下でcuda 関係のものを削除したのですが。)
$ wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
$ sudo sh cuda_11.8.0_520.61.05_linux.run
なお、driver とCUDAのversion の関係は以下のようになっていました。
WSL2に pytorch を入れる
pytorch の Get Started で Start Locally で条件を設定して、コマンドを表示させます。私は、Stable(1.13.0), Linux, Pip, Python, CUDA11.7 で入れました。コマンドもシンプルでした。
$ pip3 install torch torchvision torchaudio
確認します。
$ python3 -c "import torch; print(torch.cuda.is_available())"
True
まとめ
とりあえずメモ。
TODO:
- docker で --gpus オプションも使えるようになったのだが、何をしたのかよく覚えていない。後でメモしたい。
(2022/11/27) - CUDA11.8のインストールの追加 (2023/08/28)