NetHackを強化学習で自動クリアするためのプラットフォーム

NetHackを自動プレイしてクリアするところを見たいなーぼんやり思っていた。

NetHack Wikiを見るとボットがあるらしい。しかもBotHackは2015年にクリアしていてその映像も公開されていた。すごい。これを試してみようかなーと思ったが、ふと強化学習もやってるのでは、と思ってググると、NetHackを強化学習でクリアするためのプラットフォームを作ったよ。という論文が見つかった。The NetHack Learning Environment(NLE)というらしい。

github.com

そしてこれを使った世界大会が2021/12に開催されいたそうな。まだクリアできないらしい。

つまり、熟練者が作りこんだルールベースのボットの方がクリアできる可能性があって、強化学習ではまだクリアはできないってことらしい、

強化学習のことは全然わからんけど、NetHackを題材にしている点で興味があるので、もうちょっとウォッチしていきたい。

 

とりあえず、NLEを手元の(WSL2上の)Ubuntu 20.04.3 LTSにインストールした。

githubのreadme.mdに記載の通りにパッケージのインストールとpipでモジュールをインストールした。anaconda環境ではないのでcondaコマンドは無視した。

 TorchBeastエージェントで強化学習の最初のステップができまっせーと書いてあるところでちょっと躓いた。

readme通りに次を実行すると、

python -m nle.agent.agent --num_actors 80 --batch_size 32 --unroll_length 80 --learning_rate 0.0001 --entropy_cost 0.0001 --use_lstm --total_steps 1000000000

次のエラーが出てうまく動かない。

 

[INFO:472 agent:397 2022-02-13 02:26:23,270] Logging results to /home/st/torchbeast/torchbeast-20220213-022623
[INFO:472 agent:405 2022-02-13 02:26:23,270] Symlinked log directory: /home/st/torchbeast/latest
[INFO:472 agent:429 2022-02-13 02:26:23,271] Not using CUDA.
[INFO:472 base:279 2022-02-13 02:26:23,271] Not saving any NLE data.
Traceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
  File "/home/st/.local/lib/python3.8/site-packages/nle/agent/agent.py", line 952, in <module>
  File "/home/st/.local/lib/python3.8/site-packages/nle/agent/agent.py", line 945, in main
  File "/home/st/.local/lib/python3.8/site-packages/nle/agent/agent.py", line 438, in train
  File "/home/st/.local/lib/python3.8/site-packages/nle/agent/agent.py", line 319, in create_buffers
  File "/home/st/.local/lib/python3.8/site-packages/torch/_tensor.py", line 426, in share_memory_
  File "/home/st/.local/lib/python3.8/site-packages/torch/storage.py", line 145, in share_memory_
RuntimeError: falseINTERNAL ASSERT FAILED at "../aten/src/ATen/MapAllocator.cpp":263, please report a bug to PyTorch. unable to open shared memory object </torch_472_1020> in read-write mode

 

最後の行を見ると共有メモリをオープンできなくてエラーになっている模様。よーわからんけど次のissueを参考に「ulimit -n 65535」 を実行すると動作するようになった。FDの上限値を大きくするととりあえず対処になるらしい。

github.com

 

とりあえず、NetHack強化学習を試せる環境はできたが、強化学習のことを全く知らないのでこれ以降どうすればいいかよくわからん。暇なときにちょこちょこ調べようと思う。

 TorchBeastが動いたはいいけど、いやそれにしてもGPUが無い(CUDAが無効)ので無茶苦茶遅い。強化学習の知識が付いたらそのあと楽しむにはGPU買うしかなさそう。