🚀

正月休みに 'Genesis' を試してみた(その2)

2025/01/05に公開

正月休みに "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を正しく参照できていないことが問題でした。


解決策

以下の手順で問題を解決しました:

  1. 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 を足す
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
  1. 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
  1. 動作確認
    • 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!)でタイムリーな話題だったようで、先駆者に感謝です。

GazeboのBlackout問題の解決策 - Qiita


これで、Genesisの描画問題が無事に解決しました!次回は、サンプルプログラムのカスタマイズや、実際に使ってみた感想を紹介したいと思います。

Discussion