walkingmask’s development log

IT系の情報などを適当に書いていきます

MENU

OpenAI Universe を Ubuntu 16.04 にインストールしたい

OpenAI UniverseUbuntu 16.04 にインストールしているのですが、かなり躓いているので記録。

まとめ

記録をまとめると、

  • どっちも pytest は通らなかった
  • Ubuntu 16.04
    • リポジトリの Dockerfile はビルドできなかった (Hash Sum mismatch)
    • 適当な image (今回はUbuntu 14.04) 上に pip install -e . で構築した
  • MacBookPro
    • Dockerfile のビルドも pip のインストールもできた
    • pip は ImportError (今見ると Python のバージョンが違う orz)
    • Docker はうまく動いた
  • 不安は残るがとりあえず暫くはこのまま使う (使えたら)

(2017/06/17)

Dockerfile からのビルド

Docker 環境がすでに整っているので、リポジトリにある Dockerfile を使って Alternate configuration 環境を作ろうとして

docker build -t universe .

と実行するのですが、apt-get の部分で Hash Sum mismatch と出て、ビルドがこけるので悪戦苦闘している状態です。現状試した方法として

  • docker run -it ubuntu:16.04 /bin/bash でコンテナを起動して、Dockerfile の内容を実行する
    • 全ての RUN が難なく通る
    • universe pytest でこけた
  • Dockerfile の apt-get の部分を全て1行ずつに分けた (e.g. RUN apt-get install -y git)
    • なぜか通ったり通らなかったり
    • 通った後で pytest を実行すると…
  • git checkout tab/... でリリースブランチに切り替えてビルド
    • master と同じこけ方

考えられる原因としては

とりあえず、一旦 Ubuntu 上でやるのを止めて、iMac に Docker for Mac をインストールして Universe を入れようと思います。(2017/06/16)

追記1

iMac (2011) に Docker for Mac を入れようとすると CPU のアーキテクチャによって入れられないと怒られます。

qiita.com

ので、MacBookPro にインストールして、同じ手順を進めました。

まず、Mac の pyenv-anaconda 環境で pip install -e .universe をインストールすると、ほぼつまずくことなく完了。しかし、インタープリタ起動して import universe すると ImportError orz。

ImportError: dlopen(/Users/walkingmask/.anyenv/envs/pyenv/versions/anaconda3-4.3.0/lib/python3.6/site-packages/fastzbarlight/_zbarlight.cpython-36m-darwin.so, 2): Symbol not found: _iconv

次に、docker build -t . を実行。こっちもすんなりビルド完了。けど、pytest で Ubuntu ホストの時と同じところでこける。

...

=================================== FAILURES ===================================
____________ test_nice_vnc_semantics_match[spec0-matcher0-wrapper0] ____________

self = <gym.envs.registration.EnvRegistry object at 0x7f8fac071ac8>
id = 'PongDeterministic-v3'

    def spec(self, id):
        match = env_id_re.search(id)
        if not match:
            raise error.Error('Attempted to look up malformed environment ID: {}. (Currently all IDs must be of the form {}.)'.format(id.encode('utf-8'), env_id_re.pattern))
    
        try:
>           return self.env_specs[id]
E           KeyError: 'PongDeterministic-v3'

../lib/python3.5/dist-packages/gym/envs/registration.py:137: KeyError

During handling of the above exception, another exception occurred:

...

gym の内部でエラーが起きてるっぽくて PongDeterministic-v3 という id がない?ちょっと意味わからない。

今度は、docker run --rm -it universe:latest /bin/bash で、コンテナ内部で import universe する。すんなりインポートできた。

docker run --privileged --rm -it -e DOCKER_NET_HOST=172.17.0.1 -v /var/run/docker.sock:/var/run/docker.sock -v `pwd`:/usr/local/universe universe python

で起動して、サンプルプログラムを動かしたところ、動作を確認できた。

少々不安なところが多い (テスト通らなかったし) けど、とりあえず使えたので pip でインストールしたものは anaconda ごと消す。

brew uninstall libjpeg-turbo
pyenv uninstall anaconda3-4.3.0

追記2

Ubuntu ホストの方では、適当なイメージ上で pip install -e . するといけた。作った Dockerfile はこんな感じ

FROM jupyterlab:latest

MAINTAINER walkingmask

USER root

RUN apt-get update \
  && apt-get install -y software-properties-common \
  && add-apt-repository -y ppa:ubuntu-lxc/lxd-stable \
  && apt-get update \
  && apt-get install -y golang libjpeg-turbo8-dev make

USER walkingmask

RUN git clone https://github.com/openai/universe.git \
  && cd universe \
  && pip install -e . \
  && echo 'alias universe="sudo -E /home/walkingmask/.pyenv/versions/anaconda3-4.2.0/bin/python"' >>/home/walkingmask/.bashrc

イメージは既にあった nvidia/cuda:cudnn に pyenv-anaconda と jupyterlab をインストールしたもの (ベースはUbuntu 14.04っぽい)。公式の README の Installation の On Ubuntu 14.04 の通りにやっても add-apt-repository が無いと言われるので、software-properties-common から入れる。最後の1行は、root ユーザ以外で universe を扱おうとするとエラーになる箇所があったので足した。

これで、とりあえず Run your first agent を実行できたので、今回はここまでとする (pytest は通らなかった)。

sudo nvidia-docker build -t universe:latest .
sudo nvidia-docker run \
--privileged \
-e DOCKER_NET_HOST=172.17.0.1 \
-p 8888:8888 \
-v /var/run/docker.sock:/var/run/docker.sock \
-u walkingmask \
--name universe \
--restart=always \
-d universe:latest /usr/local/bin/jl

/usr/local/bin/jl は jupyterlab 起動用のラッパースクリプト。これで、jupyterlab のターミナルから universe test.py などして、ホストのブラウザで http://localohost:15800/viewer/?password=openai とかにアクセスすると Environment を見ることができる。ホストに ssh トンネルを繋いぐことで、ノート PC から見れたりもする。

今後また再構築することもあるだろうから、リポジトリの Dockerfile で一発でビルドできるようになると嬉しいなー。