Posted at

Pythonおよび機械学習勉強用のRaspberryPiの構築


【内容】

Pythonや機械学習を勉強するためのラズパイの構築を大量に行ったので、情報として残します。

本環境を構築することにより、PythonやAIの学習を行うための最小限の構成が整います。

なお、下記手順は環境構築を行った2019/07/26時点での環境を想定しています。


【本手順で作ったラズパイでできるようになること】


  • Pythonの基礎学習

  • データの可視化 (pandas, matplotlib)

  • Computer Vision (OpenCV)

  • 機械学習 (Scikit-Learn)

  • DeepLearning (Tensorflow, Keras)

  • Coral Edge TPUを使った推論

  • 上記を使ったアプリの実装 (Flask)


【システム構成】


  • Raspberry Pi Model 3B


  • Raspbian Strech 20181113


  • Coral Edge TPU (オプション)

HWやOSは稼働実績の高いModel3BおよびRaspbian Strechの利用を想定しています。

3B+や4Bの利用は想定していません。


【0. OSイメージの準備】

新しいOSイメージ(Buster)がリリースされていますが、本手順では稼働実績の高い以下のOSイメージを使うことを想定しています。

公式サイトからはDLできませんので、ミラーサイトからダウンロードします。

【Raspbian Strech 20181113 ミラーサイト (ftp.jaist.ac.jp) 】

折を見て、Busterへの移行も検討します。


【1. OSイメージの書き込み & 起動】


1-1. OSイメージの書き込み

上記で準備したOSイメージをSDカードに書き込みます。

SDカードへの書き込み手順は、以下の記事を参考にしてください。


1-2. ssh起動用ファイルの作成

現行バージョンのRaspbianではデフォルトではsshサービスが無効化されています。

これを自動起動できるようにSDカードの「Boot」パティションにssh(拡張子なし)という空のファイルを作ってください。

windowsをご利用の方は、標準では拡張子が非表示になっているので、拡張子が付いていないか確認してください。

なお、sshファイルはRaspberry Pi起動時に読み込まれて削除されます。


1-3. Wifi接続用の設定ファイルの作成

ssh同様、「Boot」パティションにWifi設定用のファイルを置いておくと、自動的に読み込まれて適切な場所に書き込まれます。

具体的には「Boot」パティションにwpa_supplicant.confという名前のファイルを作り、設定を記述します。

Wifiに接続するためには下記の内容を記載してください。

設定内容は接続するアクセスポイントに応じて変更する必要があります。


wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

update_config=1
country=JP

network={
ssid="<SSID名>"
psk="<パスワード>"
}



1-4. Raspberry Piの起動

上記の準備ができたらPCからSDカードを取り出し、ラズパイ本体に挿入して電源を投入します。


【2. システムアップデート & ネットワーク設定】


2-1. システムアップデート

ラズパイが起動したらsshで接続するかコンソールのターミナルで以下のコマンドを実行して、システムアップデートを行います。

(10分程度かかります)


システムアップデート

sudo apt update

sudo apt upgrade -y
sudo reboot


2-2. ipv6 無効化

必須ではありませんが、場合によっては邪魔する場合があるので無効化しておきます。

ipv6運用の場合は本設定は必要ありません。


ipv6無効化設定

sudo vi /etc/sysctl.conf


【設定内容】


/etc/sysctl.conf

net.ipv6.conf.all.disable_ipv6 = 1

net.ipv6.conf.default.disable_ipv6 = 1

【設定の反映】


設定反映

sudo sysctl -p

または

sudo reboot



2-3. IPアドレスの固定

必要に応じてIPアドレスを固定します。

DHCP環境で利用する場合は本設定は必要ありません。

本手順では無線LANでの運用を想定しているため、無線LANアダプタもしくはSSIDに対してIPの固定設定をしています。

具体的には /etc/dhcpcd.conf に以下の内容を追加します。

<IPアドレス><ルータアドレス><DNSアドレス><your_ssid>は環境に応じて変更してください。


/etc/dhcpcd.conf

interface wlan0

inform <IPアドレス>
static routers=<ルータアドレス>
static domain_name_servers=<DNSアドレス>
noipv6

または

SSID <your_ssid>
inform <IPアドレス>
static routers=<ルータアドレス>
static domain_name_servers=<DNSアドレス>
noipv6


複数の無線AP環境で利用する場合はSSIDで固定するのが便利です。


2-4. 無線LANのPowerManagementをOFFにする

優先LAN環境で利用する場合は本設定は必要ありません。

デフォルトでは無線LANのPowerManagement機能がONになっていますが、この機能のせいでWifi通信が不安定になる場合があります。

起動時に実行されるrc.localにPowerManagementをOFFにするコマンドを追加します。


rc.localの編集

sudo vi /etc/rc.local



rc.local

# exit文の前に以下を追加して保存

sudo iwconfig wlan0 power off


再起動

sudo reboot



【3. 必要モジュールのインストール】

以下の操作で必要になるモジュールをインストールします。

(主にOpenCVおよびNumpyで利用)


必要モジュールインストール

sudo apt install -y libhdf5-dev libqtwebkit4 libqt4-test libatlas-base-dev libjasper-dev



【4. Python3 関連のインストール】


4-1. 基本モジュールのインストール


Python3&pip3インストール

sudo apt install python3-dev -y

sudo pip3 install pip -U
sudo pip3 install setuptools -U


4-2. Python3の各種モジュールインストール

pipコマンドで各種のモジュールをインストールします。

numpyおよびpandasのバージョンを指定していますが、環境構築時点で最新のバイナリーパッケージが存在せずビルドが始まってインストールに時間がかかってしまうため、一つ前のバージョンを指定しています。

TensorFlowに関しては、環境構築時点で動作確認が取れている最新のものを指定しています。

それぞれ必要に応じて変更してください。


Python3用各種モジュールインストール

# numpy

sudo pip3 install numpy==1.16.4

# sklearn
sudo pip3 install scipy
sudo pip3 install sklearn

# matplotlib
sudo pip3 install matplotlib

# pandas
sudo pip3 install pandas==0.24.2

# seaborn
sudo pip3 install seaborn

# Tensorflow
sudo pip3 install tensorflow==1.14.0

# keras
sudo pip3 install keras

# flask
sudo pip3 install flask flask_cors -U

# OpenCV
sudo pip3 install opencv_python


なお、最近パッケージを管理している「https://www.piwheels.org/」の調子が悪いのか、pipがパッケージをダウンロードしている最中にセッションを切断され、結果インストールに失敗する場合が多々あります。

再実行すれば解決することが多いですが、scipyやtensorflowなどダウンロードサイズが大きいものはなかなか成功しません。

その際にはpip install実行時に表示されるダウンロード中のパッケージのURLをコピーして、wgetコマンドでそのファイルをローカルフォルダにダウンロードしてください。

wgetコマンドはダウンロードに失敗してもリジューム機能があるので、自動的にリトライしてなんとか目的のファイルをダウンロードしてくれます。

そのうえでpip3 install <ダウンロードしたファイル>を実行するとインストールできます。

ミラーサイトがあればpipの参照先をそちらに向ければよいのですが、本記事を書いている時点ではわかりませんでしたので、ご存じの方がいらっしゃいましたら教えていただけると助かります。


【5. Edge TPU のインストール (オプション)】

以下の記事を参考にしてください。

なお本項目は必須ではありません。

【Coral USB TPU Accelerator(EdgeTPU)をとりあえず使う (Quick Start)】


【6. Jupyter Lab】

強力なNotebook環境が利用できるようになるJupyter Labをインストールします。


6-1. 基本インストール

【インストール】

下記のコマンドでインストールします。


JupyterLabインストール

sudo pip3 install jupyterlab


【設定】

インストールが完了したら下記のコマンドで設定ファイルを作成した上で、作成された設定ファイルを編集します。

下記手順ではどの端末からも接続でき、接続時にパスワードを要求するように設定しています。


設定ファイルの作成

jupyter notebook --generate-config


【設定ファイルの編集】


設定ファイルの編集

vi ~/.jupyter/jupyter_notebook_config.py


【設定内容】


jupyter_notebook_config.py

c.NotebookApp.ip = '*'

c.NotebookApp.open_browser = False
c.NotebookApp.password = 'sha1:<ハッシュ化されたパスワード>'

なお、パスワードのハッシュ化は以下のコマンドで取得できます。


パスワードのハッシュ化

python -c 'from notebook.auth import passwd;print(passwd())'

(上記実行後、ハッシュ化したい文字を入力)


6-2. Node jsのインストール

JupyterLabの拡張機能を利用するために、Node jsをインストールします。


NodeJsインストール

sudo apt -y install nodejs npm



6-3. Jputer Labの起動

Jupyter Labの起動は以下のコマンドで実行します。


JupyterLab起動

jupyter lab



6-4. ブラウザから接続

上記でJupyter Labを起動した状態で、ブラウザから以下のURLに接続してください。

上記手順では、他のPCからも接続できる設定になっていますので、ぜひご自分のPCからJupyterLabに接続して操作してみてください。

http://<ip_address>:8888/lab

パスワードを要求されるので、上記で設定したパスワードを入力してください。


【最後に】

上記手順で一通りの環境構築が完了しました。

JupyterLabなどを使って比較的簡単にPythonなどの勉強が行えるようになります。

一応ディープラーニングの勉強などにも利用できますが、難しいことをやろうとするとマシンスペックが足りません。

本環境で物足りなくなってきたら、高度な計算リソースを無料で利用できる「Google Colaboratory」を利用することをおすすめします。

それでもすぐに物足りなくなってくるんですけどね。