google マシーンラーニングを使ってみたいと思います。お金はかかりますが、速いし、ハイパーパラメータのいいやつを探してくれるということなので、よさそうだと思っております。強化学習については、下記記事に色々書いてあります。
cloudplatform-jp.googleblog.com
ディレクトリ構成
google mlで使うには、gcloudコマンドで、google mlにモデルとジョブを送ってジョブを実行します。google mlで動作させるために、下記のようなディレクトリ構成にして、前回作成したenv.pyとbf2.pyを埋め込みました。bf2.pyは、model.pyに改名しております。model.pyはコードも若干変えました。
├── __init__.py ├── config.yaml ├── hyperparam.yaml ├── setup.py └── trainer ├── __init__.py ├── env.py ├── model.py └── task.py
model.pyの修正箇所
下記を追加しました。kerasのh5fファイルを、dqn.save_weight関数でそのままgoogle cloud storageに保存することができないらしく、google mlのローカルに保存してから、それをgcsfsでコピーするようにしております。googleのサンプルコードでも同じようなことがしてありました。
def save_model(dqn, outdir): weight_name = 'dqn_{}_weights.h5f'.format(ENV_NAME) if outdir.startswith('gs://'): tmp_local_dir = '/tmp/bf' try: os.makedirs(tmp_local_dir) except: pass tmp_file_path = os.path.join(tmp_local_dir, weight_name) dqn.save_weights(tmp_file_path, overwrite=True) out_file_path = os.path.join(outdir, weight_name) with open(tmp_file_path, 'rb') as input_f: gfs = gcsfs.GCSFileSystem() with gfs.open(out_file_path, 'wb') as output_f: output_f.write(input_f.read()) else: out_path = os.path.join(outdir, weight_name) dqn.save_weights(out_path, overwrite=True)
setup.py
setup.pyはこんな感じになっております。REQUIRED_PACKAGESに入れたいパッケージを書いておくと、pip installしてくれます。元々入っているパッケージは、ここに書いてあります。
from setuptools import find_packages from setuptools import setup REQUIRED_PACKAGES = ['pandas>=0.24', 'gcsfs', 'docopt', 'gym', 'keras', 'h5py', 'keras-rl', 'numba'] setup( name='bf', version='0.1', install_requires=REQUIRED_PACKAGES, packages=find_packages(), description='BF', include_package_data=True, )
感想
BASIC_GPUという環境で動かしてみましたが、思ったより速くなかったです。というか、自分のローカルPCとほぼ全く同じ秒数で、マシンの起動時間等を含めるとローカルPCの方が速くなりました。。一応自分のローカルパソコンにもNVIDIAのGPUがあるので、そのせいなのかもしれません。それか実装がよろしくないのかもしれません。
tensorboard
tensorboardで結果を表示してみました。一番良さげに見える状態です。一応学習してるっぽさがなくはありません。