WSL2での1時間でGenesis

[2nd Jan, 2025 どうも学習のスクリプト回したらパーミッションで引っかかったので追加]

[Genesis] 1時間で4脚ロボットの強化学習の環境構築
https://qiita.com/hEnka/items/cc5fd872eb0bf7cd3abc
を見て凄いなぁ、と。
Linux推奨だったのでWSL2でもできるんじゃないかなと試してみた。

WSL2でCuda環境を整えるところ、とりあえずWindowsのドライバだけそこそこ最新版のNvidiaのドライバちゃんと入れておけばWSL2では特にすることはないはず。

Cuda Toolkitくらいかな、ってところも、公式から、ポチポチと選んでいって、以下のような感じになればOK.

そのままtest.pyをまずはCPUで実行すると、いきなりエラーになった。

出力画面は真っ黒

この対策は、ここを見るとimport genesisの前にrendering backendを指定すればよいとの事。具体的にはこうする。

import os
os.environ['PYOPENGL_PLATFORM'] = 'glx'
import genesis as gs
gs.init(backend=gs.cuda)

scene = gs.Scene(show_viewer=True)
plane = scene.add_entity(gs.morphs.Plane())
franka = scene.add_entity(
    gs.morphs.MJCF(file='xml/franka_emika_panda/panda.xml'),
)

scene.build()

for i in range(1000):
    scene.step()

で、それをやるとCPUだとうまく動くようになるけれども、gs.cudaにしたとたんまたエラーになる。

ここもこのInoue-sanの投稿にしたがって環境変数を設定する。

export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH

これでとりあえず目標のところまでは動くようになった。

2nd Jan, 2025追加分

さて、追加で学習のスクリプトなど試したところ、以下のエラーが

libEGL warning: failed to open /dev/dri/renderD128: Permission denied

色々見ると、パーミッションの問題なので自分が上記デバイスにアクセスできるようにすればOKだった。WSL2だとrenderD128のパーミッションは660でgroupがrenderになっている例がよく出てくる。この場合は自分をrenderグループに追加してWSL再起動でいいんだけど、うちの環境ではなぜか600で group もrootになっていた。