macでtensorflow on dockerを 使って見る
TRANSCRIPT
Mac で TensorFlow on Docker を使って見るAITC オープンラボ第3回機械学習勉強会資料( AITC TensorFlow 勉強会資料より)2016年6月27日 吉田
設立主旨TensorFlow を中心に、ディープラーニング分野をメンバーが自発的に学びつ つ、理解が難しい点や困ったことをお互いに持ち寄って相談し、協力しながら解決する「場」を、定期的に設けること
目標メンバー各自が、ディープラーニング分野の技術リーダーとなり、社内外において後続するエンジニアたちにこの先端技術をさらに広めていくこと、そのために必要なノウハウを共有していくこと 活動グループごとにその日の目標( MNIST 線形回帰の完全理解等)を決めて、助け合いながら作業。そこで得た「課題と解決」ノウハウを、最後にグループ発表して共有する
TensorFlow 勉強会について6月24日発足
Docker とかいうものを使ってみたかった インストールや一時保存 / 再起動が簡単だろう 自分の Mac は他の用途にも色々使っているので、
TensorFlow 用の設定(があれば)を独立にしておきたい
なぜ Docker か?
Docker が、 Mac OSX 上で直接動作するようになったのはこの3月( private β )からで、まだ頼れる情報が少ない。 安定して使われている Docker は VirtualBox で動作。 4つのものを新しく知る必要がある:
VirtualBox Docker python と Jupyter TensorFlow
でも意外に面倒だった
今月 Public β になりました
Mac 上の Docker の構成
自分がどの環境で操作しているのか意識が必要 Mac OSX VirtulaBox 上の Linux VM Docker コンテナ
それぞれでファイルシステムが違うし、 PATH も違う
戸惑うこと
以下の説明にしたがってインストール:「 Mac OSX で Docker 入門 (Docker Toolbox 版 ) 」http://blog.tokoyax.com/entry/docker/tutorial-osx
説明の通り hello-world コンテナを動かすdocker run hello-world
次に nginx を動かしてみるdocker run -d -P --name web nginx
動いているか確かめるdocker ps -a
Docker のインストール
Docker Quickstart Terminal で起動したターミナルからだと docker コマンドが使えるが、自分で起動したターミナルからは docker コマンドが使えない docker ps –a で見ると hello-world が残っている nginx が動いているのにブラウザから localhost:8080ではアクセスできない
ここでちょっとハマったこと
docker コマンドを使うには docker deamon と接続する環境設定が必要 eval $(docker-machine env) 不要なコンテナの削除は docker rm xxx
xxx は docker ps –a でわかる ID か name IP アドレスは docker-machine ipポート番号は docker port xxxでわかる
解決策
default という VM が作られるが、割り当てているCPU の数やメモリサイズを変更した
コア2個しかないのに4個になっていたので2個に変更「プロセッサー( CPU )のコア数を変更する方法」http://pc-karuma.net/virtualbox-processors-settings/
メモリは 1G だったので 4G に変更「仮想マシンのメモリ容量を変更(増やす)」http://pc-karuma.net/virtualbox-change-memory-size/
default VM の設定変更
Docker だからインストール不要!ただ起動すればOK docker run –it gcr.io/tensorflow/tensorflowでいけるはず…
と思ったけど、ここから5つの問題点に遭遇1. docker run コマンドが戻ってこない2. コンテナ名が変な名前で煩わしい3. python を起動しても TensorFlow が import できない4. ブラウザからアクセスできない5. Mac OS 上のファイルが使えない
TensorFlow の起動
tensorflow サイトの説明では、起動後に$ではなくて#のプロンプトが出て、 python を起動して試すことができるはずなのに、いつまでたっても#がでてこない。 ターミナルが一つ占有されたままになるので、 Cntl-Z bgとしなければならない おそらく以前はシェルが動くコンテナだったのだろうが、今は Jupyter が動いているのだった -it がターミナルを占有するオプションなので使えない! バックグラウンド動作にするには -d
docker run コマンドが戻らない
docker ps でコンテナ名はわかるけど、変な2単語の組み合わせなので面倒 コンテナ名は明示的に指定しよう
docker run --name tensorflow(-- はハイフン2つ)
コンテナ名が煩わしい
ターミナルで python を起動して動作確認しようとするとtensorflow が無くて import できないと言われる…
環境が違う! Mac OSX 上には tensorflow は無い tensorflow コンテナ環境に入らないといけない:
docker exec -it tensorflow bash(コンテナ名が tensorflow である場合) 終わったら exit() と exit で Mac OSX に戻る でも、せっかくだから Jupyter を使おう!
tensorflow を import できない
docker-machine ip で IP アドレスはわかるけど… ポートフォワードをしていないからだ! nginx と同様に -P でもいいけど、それだと適当なポート番号にされてしまう。 -p を使うと、ポート番号を指定できる: -p 8888:8888 –p 6006:6006
8888 は Jupyter notebook 、 6006 は TensorBoard のポート
Jupyter にアクセスできない
うっかり VM廃棄したらファイルが無くなってしまう Jupyterじゃなくて使い慣れたエディタを使いたい等 ポイント:
1. docker コンテナは docker VM のファイルシステムをマウントできる2. docker VM は、 Mac OS の /Users を共有している3. Jupyter のホームディレクトリは /notebooks
以上から、例えば /Users/home/pysrc を共有するにはdocker run –v /Users/home/pysrc:/notebooks/pysrc …
コンテナと Mac OS とのファイル共有
docker run –it … で起動してしまった人は ターミナルを開く eval $(docker-machine env) docker ps –a で ./run_Jupyter.sh が動いているコンテナの名前 xxxx を調べる docker stop xxxx で止める docker rm xxxx で削除
共有フォルダーを /Users の下に作っておく (例: /Users/home/pysrc) 以下で再起動する:
docker run -d -p 8888:8888 -p 6006:6006 –v /Users/home/pysrc:/notebooks/pysrc --name tensorflow gcr.io/tensorflow/tensorflow
IP アドレスを docker-machine ip で確認 (192.168.99.100 がデフォルト ) ブラウザで 192.168.99.100 : 8888 で Jupyter Notebook にアクセス
ということで
tensorflow コンテナの Jupyter の 1_hello_tensorflow 2_getting_started 3_mnist_from_scratch
tensorflow.org の TUTORIALS MNIST For ML Beginners
「 Jupyter事始め」 Qiita Blog
お勧めのチュートリアル