こんにちは。
つい先日、TensorFlow Dev Summit 2019というイベントがあったそうですね。
(全然キャッチできてなかった)
そこで、TensorFlowの2.0.0 アルファ版がリリースされたとアナウンスされました。
早速試せるみたいなのですが、ここはせっかくならDockerで動かそうと思ったのですが、
思いの外詰むことが多くて、でも個人的には達成感が多いものにもなりました。
なので新鮮な情報を得たので、新鮮なうちにブログにしてしまいます。
はじめの方針
「Dockerのイメージはなるべく軽くすること」がいいことと最近知りました。
ならばAlpineベースで作りたいと思いました。
無知であるがゆえに夢を抱いていましたが、それが蟻地獄への第一歩......。
Alpineベースで試す
公式サイトによると、最終的には
$ pip install tensorflow==2.0.0-alpha0
ができればアルファ版を試せるようになると書いてあります。
ここを最終目標として作ります。
参考は忘れてしまいましたが、最初のDockerfileはこんな感じです
FROM alpine:3.7 RUN apk --update-cache \ add linux-headers \ gcc \ g++ \ make \ openblas-dev \ python \ python-dev \ python3 \ python3-dev RUN mkdir /app WORKDIR /app RUN pip3 install --upgrade pip RUN pip install Pillow \ ipykernel \ jupyter \ keras_applications \ keras_preprocessing \ matplotlib \ numpy \ pandas \ scipy \ sklearn RUN python -m ipykernel.kernelspec RUN pip --no-cache-dir install \ tensorflow==2.0.0-alpha0
(お作法とかが身についていないのは許してください)
こんな感じでDockerfileを書いてみました。
最低限必要なものはapkでインストールし、
そのあとはpipで色々入れて、最終的にTensoFlowをインストールしようとう魂胆です。
蟻地獄その1
あるエラーが出ました。
Collecting matplotlib Downloading https://files.pythonhosted.org/packages/26/04/8b381d5b166508cc258632b225adbafec49bbe69aa9a4fa1f1b461428313/matplotlib-3.0.3.tar.gz (36.6MB) Complete output from command python setup.py egg_info: ============================================================================ Edit setup.cfg to change the build options BUILDING MATPLOTLIB matplotlib: yes [3.0.3] python: yes [3.6.5 (default, Aug 22 2018, 14:20:40) [GCC 6.4.0]] platform: yes [linux] REQUIRED DEPENDENCIES AND EXTENSIONS numpy: yes [not found. pip may install it below.] install_requires: yes [handled by setuptools] libagg: yes [pkg-config information for 'libagg' could not be found. Using local copy.] freetype: no [The C/C++ header for freetype2 (ft2build.h) could not be found. You may need to install the development package.] png: no [pkg-config information for 'libpng' could not be found.] qhull: yes [pkg-config information for 'libqhull' could not be found. Using local copy.] OPTIONAL SUBPACKAGES sample_data: yes [installing] toolkits: yes [installing] tests: no [skipping due to configuration] toolkits_tests: no [skipping due to configuration] OPTIONAL BACKEND EXTENSIONS agg: yes [installing] tkagg: yes [installing; run-time loading from Python Tcl / Tk] macosx: no [Mac OS-X only] windowing: no [Microsoft Windows only] OPTIONAL PACKAGE DATA dlls: no [skipping due to configuration] ============================================================================ * The following required packages can not be built: * freetype, png ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-07jytk9b/matplotlib/ The command '/bin/sh -c pip install Pillow ipykernel jupyter keras_applications keras_preprocessing matplotlib numpy pandas scipy sklearn' returned a non-zero code: 1
matplotlibをインストールしている時にでたエラーです。
とりあえずmatplotlibを無視してみても他のインストールエラーが出るので、一旦公式に倣ってみることにしました。
公式に倣う
TensorFlowの公式にDockerfileがありました。
今回はこちらをお借りして、TensorFlowのところまで試しました。
50行目にある、TensorFlowのインストールの部分をアルファ版に置き換えました。
それがこちら。
FROM ubuntu:18.04 # Pick up some TF dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ curl \ libfreetype6-dev \ libhdf5-serial-dev \ libpng-dev \ libzmq3-dev \ pkg-config \ python \ python-dev \ rsync \ software-properties-common \ unzip \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* RUN curl -O https://bootstrap.pypa.io/get-pip.py && \ python get-pip.py && \ rm get-pip.py RUN pip --no-cache-dir install \ Pillow \ h5py \ ipykernel \ jupyter \ keras_applications \ keras_preprocessing \ matplotlib \ numpy \ pandas \ scipy \ sklearn \ && \ python -m ipykernel.kernelspec # Install TensorFlow CPU version from central repo RUN pip --no-cache-dir install \ tensorflow==2.0.0-alpha0
こちらで
$ docker build -t tensor-alpha .
を叩くと、一通りbuildできました。
蟻地獄その2
Macローカルではすんなりbuildできて、満足していました。
で、環境をLinuxでもできるかと思ってやってみました。
buildまでは全然できて、コンテナ内にも入ることができました。
コンテナ内のディレクトリにローカルのディレクトリをマウントしているのですが、
それを確認しようよ思ってもpermissionで怒られました。
解決策
コンテナ内に入る時にオプションをつける
$ docker run --rm -it -p 8888:8888 -v $(pwd):/app:Z -w /app tensor-alpha bash
-v
のオプションの最後にZ
をつけると解消されました。
参考:dockerで共有ディレクトリを利用したが、「Permission denied」が出てアクセスできない。
やっとできた
時間はそんなにかかっていないけれど、なんとかインストール済みのimageを作成できてよかったです。
あくまでインストールまでが目標なので、使えるかは不明ですが、チュートリアルにある
このコードは動きました。
今回はDockerfileを書くことまでが目的でしたが、今度は実際にアルファ版を試してみた記事を書いてみたい。
これをやって唯一後悔しているのは、朝の5時まで興に乗って試しまくっていたことです。
睡眠、大事......。