Docker環境をRaspberryPi上に構築する の続きです。
Docker 環境に TensorFlow をえいや
ここからは TensorFlow 環境を構築していきます。
前述で動作確認した環境に地道に構築していってもよいですが、せっかくなので Dockerfile を使用して Docker Image をビルドします。
Dockerfile でえいや
FROM resin/rpi-raspbian:stretch
ENV LANG C.UTF-8
ENV DEBIAN_FRONTEND noninteractive
ENV APP_ROOT /usr/src
WORKDIR $APP_ROOT
COPY src $APP_ROOT
RUN echo "deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi firmware" > /etc/apt/sources.list
RUN apt-get update -y
RUN apt-get install -y --no-install-recommends \
vim git less wget \
build-essential \
libatlas-base-dev \
python3-pip python3-dev python3-setuptools\
python3-scipy python3-h5py \
libraspberrypi-bin \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN pip3 install --upgrade pip setuptools
RUN pip3 install rpi.gpio
RUN pip3 install numpy opencv-python
RUN pip3 install tensorflow
RUN pip3 install keras
RUN pip3 install jupyter
# Jupyter のデフォルトポート
EXPOSE 8888
参考
TensorFlow や Jupyter については、すでに公式や多くの方から Image が公開されていますが、今回は勉強をかねて Raspbian に地道にインストールしています。
(Dockerは独学なので、ご指摘等あればコメントください)
# build
$ docker build -t rpi-raspbian-stretch .
ビルドが完了したら、container を作成、起動します。
Jupyter を使用するのでデフォルトポート 8888
をバインドしますが、他のポートを使用する際は適宜読み替えてください。
$ docker run --name rpi-raspbian-stretch -ti -p 8888:8888 --privileged -d kohbis/rpi-raspbian-stretch
無事に起動していることが確認できたら、 container に接続して作業していきます。
$ docker exec -ti rpi-raspbian-stretch /bin/bash
まずは Jupyter を起動します。
ここまでで、個別のユーザ設定をしていない場合は、 root ユーザで起動することになります。
root ユーザでの起動は非推奨のため Running as root is not recommended. Use --allow-root to bypass.
というメッセージが表示されます。
今回はメッセージにある --allow-root
オプションを指定して進めます。
$ jupyter notebook --allow-root --ip 0.0.0.0 --port 8888
Jupyter にブラウザからアクセスします。 初回のみ起動時に表示されている token 付き URL にアクセスする必要があります。
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
http://(hostname or 127.0.0.1):8888/?token=********************
- ラズパイ上で作業している場合は
127.0.0.1:8888
- ラズパイに ssh して作業している場合は
ラズパイのIPアドレス:8888
Jupyter の画面が表示されたら最後に、 Hello World
しましょう。
右上の new
-> Python3
から Notebook を作成して、プログラムを実行します。
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow !!')
sess = tf.Session()
print(sess.run(hello))
画像のようになれば成功です。
今回は環境構築なので一旦ここまですが、次回以降は実際にカメラモジュールを使用して画像解析をやりたいです。
所感
Docker を導入したことで、ラズパイのローカルをキレイな状態で保つことに成功しました。
作業している最中には考えていませんでしたが、 Docker リポジトリにプッシュしてラズパイがないときでも開発を進めたり、といったこともできます。
Docker Image をビルドするので、複数の Image をラズパイのローカルに持ちたい場合 SD 容量は 8GB だと心もとないかな?という感覚です。
今後は機械学習そのものに手を出すことが初めてなので、勉強と手探りで進めていこうと思います。
AI × IoT 頑張ります!