DeepMind LabをMacで使ってみる

<i>この記事は<a href="http://tytf.jp/2016/12/14/486">こちら</a>からの転載です。最新の情報は元サイトの方にある可能性があります。</i>

AlphaGoの開発を行ったDeepMindがAI学習用のプラットフォーム「DeepMind Lab」を公開した。

<blockquote>
  <a href="http://app-review.jp/news/319358">AlphaGoのDeepmindがAI学習プラットフォーム『Deepmind Lab』をオープンソース化</a>
  囲碁の名人に勝利を収めたことで世間の話題をさらったAI『AlphaGo(アルファ碁)』の開発を行ったことで有名なGoogle傘下のAI開発企業「Deepmind」。そのDeepmindが、同社が開発し、使用していたAI学習用のプラットフォーム『Deepmind Lab』をオープンソースとすることを発表した。
</blockquote>

ソースコードは<a href="https://github.com/deepmind/lab">GitHubで公開されている</a>ので、それを早速使ってみる。

# 環境

Macを使用し、VagrantでUbuntuを起動した中でDeepMind Labを動かす。

今回の環境は以下の通り

<ul>
<li>macOS Sierra 10.12.1</li>
<li>Vagrant 1.8.6</li>
<li>Ubuntu 16.04</li>
<li>DeepMind Lab, Latest commit 432e063</li>
</ul>

# 手順

## Vagrantの設定

### Vagrantのインストール

1. <a href="https://www.vagrantup.com/docs/installation/">公式サイト</a>などを参照してインストールする
2. boxを指定して起動

<pre><code>$ vagrant init ubuntu/xenial64
$ vagrant up
</code></pre>

3. 仮想マシンの中に入る

<pre><code>$ vagrant up
</code></pre>

<ul>
<li>以降は仮想マシンの中での作業になる</li>
</ul>

## 各種依存ライブラリのインストール

<p><a href="https://github.com/deepmind/lab/blob/master/README.md">公式サイトの説明</a>では簡単にインストールできるように見えるが、実際のインストールには多くの依存ライブラリのインストールが必要になる。

### bazelのインストール

<pre><code>$ echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
$ curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
$ sudo apt-get update &amp;&amp; sudo apt-get install bazel
</code></pre>

### 依存パッケージのインストール

<pre><code>$ sudo apt-get install python-dev -y
$ sudo apt-get install python-numpy-dev -y
$ sudo apt-get install pkg-config -y
$ sudo apt-get install zip -y
$ sudo apt-get install libsdl2-dev -y
$ sudo apt-get install liblua5.1-0-dev -y
$ sudo apt-get install libffi-dev -y
$ sudo apt-get install gettext -y
$ sudo apt-get install libosmesa6-dev -y
</code></pre>

## DeepMind Labのダウンロード

<pre><code>$ git clone https://github.com/deepmind/lab
$ cd lab/
</code></pre>

## 実行テスト

ここまでで依存するライブラリなどの準備は整った。
しかし、グラフィカルに実行するにはデスクトップ環境が必要になる。
まずはここで一度ヘッドレスで実行して動作の確認を行う

<pre><code>$ bazel run :random_agent --define headless=true -- --length=10000
</code></pre>

上記のコマンドを実行し、"Map loaded: 'demo_map_1'" と表示されれば実行は成功している。
何らかのエラーが発生した場合はここまでの手順を見直す。

## デスクトップ環境のインストール

### デスクトップ環境でログインするために、ubuntuユーザーのパスワードを変更しておく。

<pre><code>$ sudo passwd ubuntu
</code></pre>

### ubuntu-desktopをインストールし再起動する。

<pre><code>$ sudo apt-get install ubuntu-desktop  -y
$ sudo shutdown -r now
</code></pre>

### Vagrantfileを編集し、GUIを有効にする

ファイルの以下の部分のコメントを外す。ただし、 vb.memory は 1024MB では不足するので、コメントを外さないか、またはコメントアウトしたままにする。

<pre><code>  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = true

    # Customize the amount of memory on the VM:
    # vb.memory = "1024"
   end
</code></pre>

### 仮想マシンをリロードする

<pre><code>$ vagrant reload
</code></pre>

これでVirtualBoxのウィンドウが開き、デスクトップ画面が表示される。

先の手順で設定したubuntuユーザーのパスワードを使い、デスクトップにログインする。

## デスクトップ環境でDeepMind Labを実行する

### ターミナルを開く

画面左上のボタンを押し、アプリケーションの一覧画面からターミナルを起動する。

<img width="1028" alt="deepmind-lab_1.png" src="https://qiita-image-store.s3.amazonaws.com/0/100846/d7c55c2c-f702-6aed-e8bb-fc9c3de0f45d.png">
左上のボタンを押し"terminal"で検索する

### DeepMind Labを実行する

今回はデスクトップ環境で実行するので、ヘッドレスではなく画面を表示して実行する。

<pre><code>$ bazel run :random_agent --define headless=false -- --length=10000 --width=640 --height=480
</code></pre>

<img width="1028" alt="deepmind-lab_2.png" src="https://qiita-image-store.s3.amazonaws.com/0/100846/981f3a49-9240-6ee6-6b2c-eed33629c9bb.png">
迷路の中をジタバタする球体が表示されれば成功

次のようなエラーメッセージが表示された場合は正しくデスクトップ環境で実行できていないか、またはグラフィックス用のメモリが不足している可能性がある。

<pre><code>INFO: Running command line: bazel-bin/random_agent '--length=10000' '--width=640' '--height=480'
ERROR: Non-zero return code '3' from command: Process exited with status 3.
</code></pre>

これで環境は整ったので、自分のAIをビシビシを鍛えてあげよう。