airpocketのアイコン画像
airpocket 2023年03月30日作成 (2023年04月11日更新)
セットアップや使用方法 セットアップや使用方法 閲覧数 8999
airpocket 2023年03月30日作成 (2023年04月11日更新) セットアップや使用方法 セットアップや使用方法 閲覧数 8999

Raspberry Pi OSにローカルAI実行環境を作る 2023/4/1

Raspberry Pi OSにローカルAI実行環境を作る 2023/4/1

はじめに

raspberry pi上でエッジAIを動かしたいケースがあったのですが、OSのバージョンにより環境構築に違いがあり面倒だったのでまとめます。
よわよわなので自分でビルドするという選択肢はありません。

現在動作確認できている環境は表の通り。順次埋めていきます。

OS tensorflow tflite onnx pytorch opencv
Bullseye 32bit × ×
Bullseye 62bit
Buster 32bit ×
Ubuntu Desktop 22.10 64bit ×

※〇:動作確認済み
 ×:試してみたけど私には環境が作れない。
 ー:これから試すところ。

環境

ハードウェア

Raspberry Pi 4B+ 4GB

OS

使用するOSは次の4種類です。Buster 64bitはRaspberry Pi Imagerに無い様ですので取り上げていません。マイナーOSでしたので正式対応しているアプリも少なかった様に思います。64bit OSを使いたい場合はBullseye 64bit を使った方が幸せになれるでしょう。
またいわゆるLite版については確認していませんが、ほぼ同じ方法で使用できると思います。追加インストールが必要となるライブラリは増えるかもしれません。

①Raspberry Pi OS Bullseye 32bit
 Bullseye 32bitは現行バージョンの標準OSです。

$ uname -a
Linux raspberry 5.15.84-v7l+ #1613 SMP Thu Jan 5 20:01:26 GMT 2023 armv7l GNU/Linux
$ getconf LONG_BIT
32

②Raspberry Pi OS Bullseye 64bit
 Bullseye 64bitは現行の64bitバージョンです。64bitに対応していないパッケージが使えないことがありますが、新しいアプリケーションは64bit版をターゲットに開発されているものも多い様です。

$ uname -a
Linux raspberry 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64 GNU/Linux
$ getconf LONG_BIT
64

③Raspberry Pi OS Buster 32bit
 Buster 32bitは旧バージョンの標準OSです。現在はLegacyとして公開されています。現行バージョンの公開が2021年11月だった様ですので、それ以前の記事はBusterをターゲットにしていることが多いかと思います。Busterは2019年7月公開です。

$ uname -a
Linux raspberry 5.10.103-v7l+ #1529 SMP Tue Mar 8 12:24:00 GMT 2022 armv7l GNU/Linux
 $ getconf LONG_BIT
32

④Ubuntu Desktop 22.10 64bit

$ uname -a
Linux ubuntu-raspy 5.19.0-1015-raspi #22-Ubuntu SMP PREEMPT Mon Mar 6 10:35:33 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux
$ getconf LONG_BIT
64
$ python3 --version
Python 3.10.7

導入するAI実行環境

①tensorflow
②tflite
③pytorch
④onnx

その他ツール類

画像処理に欠かせないopencv-python を導入します。

update

パッケージを更新します。

sudo apt update 
sudo apt -y upgrade

ubuntuはpipパッケージもインストールしておきます。

sudo apt install python3-pip

tensorflowの導入

Bullseye 32bit

Bullseye 32bit版向けのいいバイナリが見つかりません。
知ってる人は教えてください。

Bullseye 64bit

PINTOさん謹製ランタイムです。

sudo apt-get install -y libhdf5-dev libc-ares-dev libeigen3-dev gcc gfortran libgfortran5 libatlas3-base libatlas-base-dev libopenblas-dev libopenblas-base libblas-dev liblapack-dev cython3 libatlas-base-dev openmpi-bin libopenmpi-dev python3-dev python-is-python3

sudo pip3 install pip --upgrade
sudo pip3 install keras_applications==1.0.8 --no-deps
sudo pip3 install keras_preprocessing==1.1.2 --no-deps
sudo pip3 install numpy==1.24.2
sudo pip3 install h5py==3.6.0
sudo pip3 install pybind11==2.9.2
sudo pip3 install -U --user six wheel mock
sudo pip3 uninstall tensorflow

TFVER=2.12.0rc0

PYVER=39

ARCH=`python -c 'import platform; print(platform.machine())'`
echo CPU ARCH: ${ARCH}

sudo -H pip3 install --no-cache-dir https://github.com/PINTO0309/Tensorflow-bin/releases/download/v${TFVER}/tensorflow-${TFVER}-cp${PYVER}-none-linux_${ARCH}.whl

Buster 32bit

PINTO様謹製です。アーカイブもすべて残していただけているので大変助かります。tensorflow2.5です。

sudo pip3 install numpy==1.20.0

sudo apt-get install -y libhdf5-dev libc-ares-dev libeigen3-dev gcc gfortran python-dev libgfortran5 libatlas3-base libatlas-base-dev libopenblas-dev libopenblas-base libblas-dev liblapack-dev cython libatlas-base-dev openmpi-bin libopenmpi-dev python3-dev

wget https://raw.githubusercontent.com/PINTO0309/Tensorflow-bin/main/previous_versions/download_tensorflow-2.5.0-cp37-none-linux_armv7l.sh

chmod 755 download_tensorflow-2.5.0-cp37-none-linux_armv7l.sh

bash ./download_tensorflow-2.5.0-cp37-none-linux_armv7l.sh

sudo pip3 install tensorflow-2.5.0-cp37-none-linux_armv7l.whl

Ubuntu Desktop 22.10 64bit

基本、これで入ります。

sudo pip3 install tensorflow

PINTO様謹製はこちら

sudo apt-get install -y libhdf5-dev libc-ares-dev libeigen3-dev gcc gfortran libgfortran5 libatlas3-base libatlas-base-dev libopenblas-dev libopenblas-base libblas-dev liblapack-dev cython3 libatlas-base-dev openmpi-bin libopenmpi-dev python3-dev python-is-python3

sudo pip3 install pip --upgrade
sudo pip3 install keras_applications==1.0.8 --no-deps
sudo pip3 install keras_preprocessing==1.1.2 --no-deps
sudo pip3 install numpy==1.24.2
sudo pip3 install h5py==3.6.0
sudo pip3 install pybind11==2.9.2
sudo pip3 install -U --user six wheel mock
sudo pip3 uninstall tensorflow

TFVER=2.12.0rc0

PYVER=310

ARCH=`python -c 'import platform; print(platform.machine())'`
echo CPU ARCH: ${ARCH}

sudo -H pip3 install --no-cache-dir https://github.com/PINTO0309/Tensorflow-bin/releases/download/v${TFVER}/tensorflow-${TFVER}-cp${PYVER}-none-linux_${ARCH}.whl

sudo pip3 install h5py==3.6.0
このコマンドが終わらないときはバージョン指定を外してみて。

tfliteの導入

Bullseye 32bit

sudo pip install tflite_runtime

で入りますが、PINTO様謹製ならこちら

sudo apt install -y swig libjpeg-dev zlib1g-dev python3-dev unzip wget python3-pip curl git cmake make
sudo pip3 install numpy==1.24.2

TFVER=2.11.0
PYVER=39
ARCH=armv7l

sudo -H pip3 install --no-cache-dir https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp${PYVER}-none-linux_${ARCH}.whl

2023年4月1日現在、最新ビルドは2.12.0-rc0ですが、インタプリタのインポート時にエラーが発生する為、バージョンを落として回避しています。

Bullseye 64bit

PINTO様謹製です。

sudo apt install -y  swig libjpeg-dev zlib1g-dev python3-dev unzip wget python3-pip curl git cmake make

sudo pip install numpy==1.24.2

TFVER=2.11.0

PYVER=39

ARCH=aarch64

sudo -H pip3 install --no-cache-dir https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v${TFVER}/tflite_runtime-${TFVER/-/}-cp${PYVER}-none-linux_${ARCH}.whl

2023年4月1日現在、最新ビルドは2.12.0-rc0ですが、インタプリタのインポート時に以下のエラーが発生する為、バージョンを落として回避しています。

>>> 
from tflite_runtime.interpreter import Interpreter
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.9/dist-packages/tflite_runtime/interpreter.py", line 33, in <module>
    from tflite_runtime import _pywrap_tensorflow_interpreter_wrapper as _interpreter_wrapper
ImportError: /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /usr/local/lib/python3.9/dist-packages/tflite_runtime/_pywrap_tensorflow_interpreter_wrapper.so)

Buster 32bit

sudo apt-get install -y libhdf5-dev libc-ares-dev libeigen3-dev gcc gfortran python-dev libgfortran5 libatlas3-base libatlas-base-dev libopenblas-dev libopenblas-base libblas-dev liblapack-dev cython libatlas-base-dev openmpi-bin libopenmpi-dev python3-dev

wget "https://raw.githubusercontent.com/PINTO0309/TensorflowLite-bin/main/2.7.0/download_tflite_runtime-2.7.0-cp37-none-linux_armv7l.whl.sh"

chmod +x download_tflite_runtime-2.7.0-cp37-none-linux_armv7l.whl.sh

bash ./download_tflite_runtime-2.7.0-cp37-none-linux_armv7l.whl.sh

sudo pip3 install tflite_runtime-2.7.0-cp37-none-linux_armv7l.whl

これで動きますが、tensorflowと同じ環境に入れるときはnumpyを1.20.0にしないとtensorflowが動きません。

sudo pip3 install numpy==1.20.0

Ubuntu Desktop 22.10 64bit

sudo apt install -y swig libjpeg-dev zlib1g-dev python3-dev unzip wget python3-pip curl git cmake make
sudo pip3 install numpy==1.24.2

wget "https://raw.githubusercontent.com/PINTO0309/TensorflowLite-bin/main/2.12.0-rc0/download_tflite_runtime-2.12.0rc0-cp310-none-linux_aarch64.whl.sh"
chmod +x download_tflite_runtime-2.12.0rc0-cp310-none-linux_aarch64.whl.sh
bash ./download_tflite_runtime-2.12.0rc0-cp310-none-linux_aarch64.whl.sh
sudo pip3 install tflite_runtime-2.12.0rc0-cp310-none-linux_aarch64.whl
rm download_tflite_runtime-2.12.0rc0-cp310-none-linux_aarch64.whl.sh
rm tflite_runtime-2.12.0rc0-cp310-none-linux_aarch64.whl

onnxの導入

Bullseye 32bit

wget https://github.com/nknytk/built-onnxruntime-for-raspberrypi-linux/raw/master/wheels/bullseye/onnxruntime-1.14.0-cp39-cp39-linux_armv7l.whl
sudo pip install onnxruntime-1.14.0-cp39-cp39-linux_armv7l.whl

Bullseye 64bit

sudo pip install onnxruntime

Buster 32bit

またしてもPINTO様謹製です。Numpy1.20.0を入れてtensorflow、tfliteと共存できます。依存ライブラリがあるかもしれませんが、Buster32bit のtensorflowの環境作った後ならこれだけでimportできます。

wget -O onnxruntime-1.9.1-cp37-none-linux_armv7l.whl https://github.com/PINTO0309/onnxruntime4raspberrypi/releases/download/v1.9.1/onnxruntime-1.9.1-cp37-none-linux_armv7l.whl_np1195
pip3 install onnxruntime-1.9.1-cp37-none-linux_armv7l.whl

Ubuntu Desktop 22.10 64bit

sudo pip3 install onnxruntime

pytorchの導入

Bullseye 32bit

Bullseye 64bit

sudo apt-get install python3-pip libjpeg-dev libopenblas-dev libopenmpi-dev libomp-dev
sudo -H pip3 install setuptools==58.3.0
sudo -H pip3 install Cython
sudo -H pip3 install gdown
gdown https://drive.google.com/uc?id=1uLkZzUdx3LiJC-Sy_ofTACfHgFprumSg
sudo -H pip3 install torch-1.13.0a0+git7c98e70-cp39-cp39-linux_aarch64.whl
rm torch-1.13.0a0+git7c98e70-cp39-cp39-linux_aarch64.whl

本当にインストールできたか確認してみます。バージョンが表示されたらOK!

$ python -c 'import torch;print(torch.__version__)'
1.13.0a0+git7c98e70

Buster 32bit

Ubuntu Desktop 22.10 64bit

oepncv-pythonの導入

Bullseye 32bit

sudo pip install opencv-python==4.6.0.66
sudo apt install libatlas-base-dev
sudo pip install -U numpy

Bullseye 64bit

sudo pip install opencv-python==4.7.0.72

Buster 32bit

sudo pip3 install opencv-python==4.7.0.72

Ubuntu Desktop 22.10 64bit

sudo pip3 install opencv-python==4.7.0.72

まとめ

まだ確認中ですが、Raspberry Pi でAI環境整えるならBullseye 64bit版が良さそうに思えます。
あと、やってみたら大部分がPINTO様依存だったので、この記事作る必要あったのか?という気持ちでいっぱいです。

1
airpocketのアイコン画像
電子工作、プログラミング、AI、DIY、XR、IoT M5Stack / Raspberry Pi / Arduino / spresense / K210 / ESP32 / Maix / maicro:bit / oculus / Jetson Nano / minipupper etc
ログインしてコメントを投稿する