前置き
個人マシンで3090 Tiが使えるようになり、ウキウキでEfficientNetV2を回してみると…共有マシンの3090よりも遅い。
どうやらWindowsではパフォーマンスが出ないというウワサは本当だったらしい。(他の要素も検証しろ!
「Windowsが許されるのは小学生までだよねー」などとイジられながらも頑なにWindowsで粘ってきたが
そろそろ潮時だろうかと考えていると、CUDA on WSL 2がnear-nativeなパフォーマンスで動くと聞こえてきた。
結果、WSL 2+Docker環境で学習を回すと、Windowsネイティブ環境と比べて実行時間が16%短縮された。
導入方法
以下のページで丁寧に解説されています。
補足: CUDAをDockerから使う場合は「3. CUDA Support for WSL 2」の手順は不要です。
罠1
systemctlが使えないということで、引っかかるかもしれません。
WSL 2をMicrosoft Store版にアップデートした上で
[boot]
systemd=true
と書き換えて、WSL 2をシャットダウン。
wsl.exe --shutdown
WSL 2を立ち上げ直せばsystemctlが使えるようになります。
罠2
WSL 2で名前解決ができないという問題が環境によって起こるようです。
私の環境でも何かのアップデートが引き金になって名前解決ができなくなりましたが
ESETがブロックしたことがログに残っていたので、ルールを設定して解消しました。
「WSL 2 名前解決」などと調べると、解決方法がいくつか出てくると思います。