はじめに
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様依存だったので、この記事作る必要あったのか?という気持ちでいっぱいです。
投稿者の人気記事
-
airpocket
さんが
2023/03/30
に
編集
をしました。
(メッセージ: 初版)
-
airpocket
さんが
2023/03/31
に
編集
をしました。
-
airpocket
さんが
2023/03/31
に
編集
をしました。
-
airpocket
さんが
2023/04/07
に
編集
をしました。
-
airpocket
さんが
2023/04/11
に
編集
をしました。
ログインしてコメントを投稿する