OpenAI Universe を Ubuntu 16.04 にインストールしたい
OpenAI Universe を Ubuntu 16.04 にインストールしているのですが、かなり躓いているので記録。
まとめ
記録をまとめると、
- どっちも pytest は通らなかった
- Ubuntu 16.04
- MacBookPro
- 不安は残るがとりあえず暫くはこのまま使う (使えたら)
(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 と同じこけ方
考えられる原因としては
Hash Sum mismatch
となってるリポジトリをアップデートした人が hash を間違って登録している?- しかし、こけるときいつも同じリポジトリとも限らない?
- Docker image の Ubuntu 16.04 (ホスト側も Ubuntu 16.04) が 13日前にアップデートされたもの
- バージョンを古いものに指定したらあるいは…?
とりあえず、一旦 Ubuntu 上でやるのを止めて、iMac に Docker for Mac をインストールして Universe を入れようと思います。(2017/06/16)
追記1
iMac (2011) に Docker for Mac を入れようとすると CPU のアーキテクチャによって入れられないと怒られます。
ので、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 で一発でビルドできるようになると嬉しいなー。