![見出し画像](https://assets.st-note.com/production/uploads/images/147822941/rectangle_large_type_2_ec1a5604ffba67dccaa557cf2bd7c045.png?width=1200)
WindowsのWSL上のUbuntu GPUサーバー環境構築
業務でGCPのGPUインスタンスに接続して使っていたのですが、最近ほぼGPUインスタンス(とくにT4)に接続できなくなっていました。世界中のエリアにアクセスして接続を試みて回るスクリプトを組んでGPUリソース確保チャレンジをしていたのですが2日間繋げなかったので、さすがに業務に支障が出ると思い、自宅にGPUサーバーを購入してDeep Learningと生成AI用のGPU環境として使うことにしました。
WSL上のUbuntuにTailscaleでVPNを張ることでリモートからでも気軽にアクセスできるお手軽な計算環境が作れたので、備忘録を兼ねて共有します。
出来上がった環境:
Ubuntu 22.04 on WSL 2(Windows 11 Pro)
VPN(Tailsscale)
計算サーバーとして必要な昨日群(SSHなど)
GPU環境(CUDA等々)
試行錯誤しながらだったので手順をキャプチャしながらではなく思い出しながら書いているので、ヌケモレなどあればコメントいただけるとありがたいです。
1. Ubuntu on WSL
WSLでubuntuをインストールします。インストール可能なOSは
$ wsl --list --online
で確認できます。DistroNameをインストールしたいOS環境だとして、
$ wsl --install -d <DistroName>
とすればよいです。自分はUbuntu 22.04にしました
2. CUDA
WSLを使うときは、WSL上の環境ではなくWindows側に直接CUDA環境を構築する必要があります。Windows側にCUDAをいれると、自動的にWSL環境側にlibcuda.soが作られ、インストールしたのと同様の環境になるそうです。NVIDIAのサイトでも太字で強調されているので、うっかりWSL側にインストールなどしないようにしましょう。必ずWindows側にCUDA環境を構築してください。
Once a Windows NVIDIA GPU driver is installed on the system, CUDA becomes available within WSL 2. The CUDA driver installed on Windows host will be stubbed inside the WSL 2 as libcuda.so, therefore users must not install any NVIDIA GPU Linux driver within WSL 2.
3. 計算Serverとして使うためのもろもろのツールのインストール
WSLでインストールしたUbuntuはかなりまっさらなUbuntu環境のようなので、いろいろインストールする必要があります。普通のUbuntuだと思って好きなようにインストールしてください。ここでは特に躓くことはありませんでした。
あとで外から環境を維持れるように、SSH環境だけはつくっておきましょう。下記の記事などを参考にしました。
SSHの疎通確認はWSLだとWindows側からのポートフォワーディングなどの設定をする必要があって少し厄介なので、下記のVPNの設定を先にしてください。
4. VPNを張る(Tailscale)
自分はTailscaleでVPNを張りました。Tailscaleは導入も利用も非常に簡単なのでおすすめです。VPNを張らない場合、SSHはWindows越しに行うことになるので、適切なポートフォワーディングなどが必要になり、いろいろ面倒だと思います。VPNを張ってしまえば、構築された環境を気にせずシュッと直接通信できるようになるので楽ちんです。
Tailscaleは公式に従ってインストールすればよいはずです。
あるいはこちらの記事も良いかもしれません。
TailscaleのAdmin consoleをみてWSL上のUbuntu環境が接続されていれば基本的にはOKなのですが、自分が試したときは、以下のIssueの問題(たぶん)に引っかかり、自分のMacbook Airから安定的にSSH接続ができませんでした。
コメントにあるように、Ubuntu側で
$ sudo ip li set mtu 1200 dev tailscale0
としたら直りました。MTUが大きすぎるとパケットが送れないなどして通信できなくなるそうです。
ここまでやればVPN越しに直接SSH接続できるようになります。
SSHしたらnvidia-smiが見えなかった場合
自分の場合、Windows上でWSLのUbuntuを起動するとnvidia-smiできるのに、Macbook AirからのSSH越しだとnvidia-smiが起動できないという不思議な現象に出くわしました。
Issueが立っていて、WSLのUbuntu上でパスを追加すれば良いようです。
export PATH=/usr/lib/wsl/lib:$PATH
おわりに
まだ構築して数日ですが、快適にGPUライフを遅れています。ただ、以下の点はちょっと気になっています。
ファイルシステムにWSL由来のノイズがある。WSL環境だとWindows由来のC:ドライブやらD:ドライブやらが見えたりしてやや気持ち悪い。
WSL固有の問題にたまに遭遇する。
Windows側でシステムリソースをいくらか食ってしまう。
自分の場合、Windows機がないとできない作業(検証作業のほか、一部のお役所系の手続きなど)もまれにあって、Windows環境も確保したかったので今回はWSLで運用してみていますが、自分がもう一台純粋な計算サーバーを導入するならWSLではなく普通にLinuxサーバーを入れてしまうかもしれません。
※ WSL環境でtensorboardを立ち上げてWindows側でlocalhost:6006にアクセスしてダッシュボードが見えたときはちょっと感激しました。
ただ、cygwinで頑張ってLinuxっぽい環境を作っていた昔と比べたら遥かに楽になったなぁと思いました。cygwin、とてもつらかったです。
この記事が気に入ったらサポートをしてみませんか?