正月休みに 'Genesis' を試してみた(その2)
正月休みに "Genesis" を試してみた(その2)
その1では、Docker環境を構築するところまで進めましたが、サンプルプログラムの描画ができない課題が残っていました。
今回は、その描画問題を解決したので、原因と解決策を共有します。
結論 : CPU に Ryzen 7 を搭載し、GPU に Nvidia を載せた Windows 11 の Laptop で Docker Desktop を使って Docker on wsl2 の環境を構築した場合に、描画を扱うOpen GL の mesa library のリンクを適切に管理することで、Genesis のレンダリングができる。
発生した問題
サンプルプログラムを起動すると、draw window
は表示されるものの、rendering がうまくいかず、画面が真っ黒という状況でした。
問題の原因
この問題には、主に以下の2つの原因がありました:
1. WSL2とNVIDIAドライバーの設定
Windows 11上のWSL2環境では、NVIDIAのドライバーをWindows側にインストールする必要があります。さらに、/usr/lib/wsl/lib
にリンクが設定されているため、これをDockerコンテナ内で参照可能に設定する必要がありました。
2. GPUが複数枚搭載されている場合のMesaの設定
私の環境では、GPUが2枚刺さっており、この構成で描画を扱うMesaがNVIDIAを正しく参照できていないことが問題でした。
解決策
以下の手順で問題を解決しました:
-
Docker で NVIDIAのDriverを参照できるように設定
- (Windows 11の場合) NVIDIA Driver を Windows にインストールする
このとき、ドライバが5.55 以上の場合、NVIDIA Container Toolkitを14.0 より更新する - (Docker Desktopを入れた場合) Docker Desktop を 4.37 など最新版にアップデート
- Docker run または docker compose で
/usr/lib/wsl/lib
を参照可能に設定。 - LD_LIBRARY_PATH に
/usr/lib/wsl/lib
を足す
- (Windows 11の場合) NVIDIA Driver を Windows にインストールする
docker run --gpus all --rm -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix -v $PWD:/workspace -v /usr/lib/wsl:/usr/lib/wsl genesis
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:LD_LIBRARY_PATH
-
Mesa から NVIDIA の ドライバを参照できるように設定
- (Ryzen 7など CPUにGPUが含まれる場合), MESAのD3D12アダプタをNVIDIAに設定する
- mesa utils で nvidia driverで描画できるかを確認する
glxinfoから Device: D3D12 (NVIDIA GeForce ...) (0xffffffff) が出力されるか確認する
export MESA_D3D12_DEFAULT_ADAPTER_NAME="NVIDIA"
glxinfo -B
-
動作確認
- example/tutorial/hello_gensis.py で gpu による描画ができるか確認する
- hello_gensis.pyは CPU で起動するので、ソースの5行目をgpuの軌道に修正する。
- gs.init(backend=gs.cpu)
+ gs.init(backend=gs.cuda)
Running on が Nvidia のドライバで起動するか確認する
解決した手順を Genesis の Issue への comment にもまとめて投稿しました。
Issue への投稿は初めてです。
今注目を集めているOSS にコメントなど恐れ多いのですが、OSS コミュニティへの貢献を考えて、拙い英語力ですが上記内容を記載しました。
black window while running in wsl2 #102
参考にした記事
これらの問題は、GitHubのissueなどでは指摘されていない論点でした。
error がでてないことから、opengl とくに mesa が関連する問題とあたりをつけ、
以下のサイトを見付けることで問題が解決しました。
2024年12月投稿(Advent Calendar!)でタイムリーな話題だったようで、先駆者に感謝です。
これで、Genesisの描画問題が無事に解決しました!次回は、サンプルプログラムのカスタマイズや、実際に使ってみた感想を紹介したいと思います。
Discussion