いろいろ検討した結果、
「WindowsのWSL2は深層学習に使える」
と、結論しましたので、ここに記録。
が、諸事情によりタイトルは??を付けました。
諸事情は最後に。
まず、
Windows及びNvidia driverはとことんアップデートする。
その後、
https://chigusa-web.com/blog/wsl2-win11/
のようなサイトを参考にWSL2をインストール。
Windowsは、10でも11でもいい。
proでもhomeでもOKだけど、proが無難。
Windows Terminalも導入(デフォルトよりも見やすいし拡張性もある)。
https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701
Windows Terminalの新規タブでUbuntuを選び、
$ nvidia-smi
を走らせてGPUを確認。
(ここは驚き。なにもしてないのにGPUがつかえる!)
つまり、どういうことかというと、
Windowsで導入されている、nvidia driverが、
そのままubuntuにも反映される。
Windowsでnvidia driverをupdateすると、
Ubuntuの再起動後、自動的にubuntuにも反映される。
このUbuntuはWindowsの支配下にあることを忘れてはいけない。
cudaのバージョンを上げてはいけないときは、要注意ポイント。
anacondaをubuntuに導入。
https://www.salesanalytics.co.jp/datascience/datascience141/
とても簡単。
新しいconda環境をつくり、
conda create -n ##
自分のアプリをセットアップ。
Ubuntuでは出なかったようなエラーがいくつかでるかもしれないが、
たいていpathだったり、ちょっと足りないライブラリーだったりなので、
エラーを検索しつつ、黙々と対処。
Windowsのファイルを送り込むときは、
エクスプローラのアドレスバーに「\\wsl$」と入力する。
WSL2がバーチャルマシンであることを目視できる。
ここからhomeにアクセスできる。
UbuntuのGUIアプリは、Windowsのアプリのように動きます。
(これも驚き!)下記の最後のほう。
https://chigusa-web.com/blog/wsl2-win11/
GPUを使った深層学習の計算処理スピードは、純UBUNTUの半分くらい(同じマシンでOSを入れ替えて比較)。この速度をどう考えるか。もう一点。当たり前と言えば当たり前だが、メモリー管理はWindowsがやっているので搭載メモリーの一部だけがUbuntuに割り当てられる。せいぜい半分くらいか。シングルユーザーで使っている分には問題はないとは思うが、これをどう考えるか。
Windowsだからといって、何から何までお世話をしてくれるわけではないし、速度やメモリーに制限はあるにしても、何かと便利なバーチャルubuntu。これからはWindowsが第一選択肢にしてもいいかもしれません。
"""
上記の方法では、まだ全然完全ではないです。WSL2のところはまあいいとして、Ubuntuではなく、Windowsで深層学習をしようとすると、やはりちゃんとcuda+cuDNNをwindowsに、ちゃんと導入しないといけないです。WSL2側にもちゃんとcuda+cuDNNを導入したほうがいいでしょう。「ちゃんと」の前に動いてしまっているのでややこしい。Ubuntuの場合、人がマシンを制御するのですが、Windowsの場合、Windowsがマシンを制御しているのです。そこに横入り的にドライバーをいれるわけですが、Windowsには向いていない作業となります。その意味において、WSL2に限定して深層学習をやるのがいいのかもしれません。その範囲で使う分には、何も問題は起こらないので安心です。要はOSの使い分けです。
"""
"""
なぜタイトルに??がついているかというと、WSL2をテストしたWindowsPCは結局のところすぐにUBUNTU22.04に書き換えてしまったからです。メモリをWindowsにとられるのは我慢するとしても、計算速度の遅さが致命的です。。。あとMSの都合でハードの制限がかかったりするのも気になります。やはりWSL2はあくまでも補助的な役割のように思えます。よくよく考えると何でわざわざWindowsからUbuntuを使う必要があるのか不思議です。
"""