Itsukaraの日記

最新IT技術を勉強・実践中。最近はDeep Learningに注力。

【DL、A3C+、OHL、Montezuma】評価環境をGCPに統一

DeepMind社のA3C+に独自機能(OHL:On-Highscore-Learning)を組込んだプログラムで、Atari2600の最難関レベルゲームMontezuma's Revenge*1の評価を継続中です。

自宅のデスクトップPCでUbuntuをDual Bootした環境で評価していましたが、評価中はデスクトップPCをWindowsで立ち上げられず不便なため、これからはGoogle Cloud Platform(GCP)に環境を統一することにしました。

以前の記事で書きましたように、GCPは無料枠内で、各リージョン(5つ)ごとに8CPUまで使え、2か月の範囲で合計$300まで無料なので、結構使い出があります。

当方がgithubにupしたスクリプトを使えば、直ぐに評価環境が構築でき、また、1つ環境を作れば、スナップショットを取って、スナップショットから新しいインスタンスを作ることで、他のリージョンに環境を簡単にコピーできます。

今のところ、下記のように、4つのリージョンを使って評価中です。
f:id:Itsukara:20160908182822j:plain

各マシンでの評価状況がすぐに確認できるように、下記のスクリプトを各マシンでnohupで動かし、見たいデータを/tmp直下に定期的(60秒毎)作成するようにしています。これにより、各マシンの/tmp/log.*を自分のPCのコピーするだけで、評価状況が直ぐに分かります。

#!/bin/bash

if [ $# -ne 1 ]; then
    echo "Usage: $0 log-file"
    exit 1
fi

while true
do
  cp $1 /tmp
  grep Average $1 |tail -20 > /tmp/$1.avg
  python plot.py $1 --save
  mv $1.png /tmp
  sleep 60
done

全評価マシンの/tmp/log.*をローカルマシンへにコピーする処理もスクリプト化しておけば、スクリプトを一回走らせるだけで、全ての評価状況が得られます。下記がスクリプト例です。Windowsでも、gitのbash環境で走らせれば動きます(当方も、そのように使ってます)。

#!/usr/bin/bash
#上記はgitのbash環境でのbashのパス

hostips=(ホスト1のIPアドレス ホスト2のIPアドレス ホスト3のIPアドレス ホスト4のIPアドレス )
file='/tmp/log*png'
key=キーファイル
uid=gcpのuserid

for (( i = 0; i < ${#hostips[@]}; ++i ))
do
    hostip=${hostips[$i]}
    echo "scp from $hostip file=$file"
    scp -i $key "$uid@$hostip:$file" .
done


以上、評価環境をGCPに統一することにより、評価がだいぶ楽になりました。

ただ、途中結果を見て、学習曲線が下降し始めると、気になってパラメーターを変えたくなります(例えば下記)。同じパラメーターで何STEPSまで試して見極めるのが良いか、判断が難しいですね。
f:id:Itsukara:20160908201935p:plain

評価用コード

下記に評価用コードをupしていますので、興味のある方は、ぜひ試してください。パラメーターがかなり沢山あるので、パラメーターの設定次第で、平均スコアがかなり上昇するはずです。試した結果は、下記githubのIssue#3(Experiment Results)にアップして共有して頂けると、お互いに比較ができるので、楽しく評価できると思います。なお、今のところ、610点~710点ぐらいの平均得点が得られています。
github.com

*1:強化学習の対象としての最難関ということ