ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

強化学習でマリオに挑戦 #4

家のゲーム用パソコンのGPUを使ってスーパーマリオの強化学習の続きをやってみました。
f:id:a1026302:20210111032405j:plain

GPUに切り替えて苦労したところ

GPUメモリ不足

現象

学習中に以下のメッセージを出力して処理が中断してしまい困りました。

RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 4.00 GiB total capacity; 2.70 GiB already allocated; 19.02 MiB free; 2.77 GiB reserved in total by PyTorch)
回避方法

「deque」と「batch_size」の値を減らして処理することでメモリ不足の問題を回避しました。

  • 変更前
class Mario(Mario):  # subclassing for continuity
    def __init__(self, state_dim, action_dim, save_dir):
        super().__init__(state_dim, action_dim, save_dir)
        self.memory = deque(maxlen=100000)
        self.batch_size = 32
  • 変更後
class Mario(Mario):  # subclassing for continuity
    def __init__(self, state_dim, action_dim, save_dir):
        super().__init__(state_dim, action_dim, save_dir)
        self.memory = deque(maxlen=5000)
        self.batch_size = 16
Episode 10000

なんとなくちょっと立ち止まって動くようになる。
youtu.be

Episode 20000

マリオ猪突猛進をやめるようになる。
それと、「deque」と「batch_size」の値を調節すれば背景とかそのままでも処理できることに気づく。。。
youtu.be


なんとか、10000/20000とEpisodeの数を増やして学習することができました。
今後20000以上のEpisodeで学習させていきたいと思います。