家のゲーム用パソコンのGPUを使ってスーパーマリオの強化学習の続きをやってみました。
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で学習させていきたいと思います。