編集履歴一覧に戻る
airpocketのアイコン画像

airpocket が 2023年03月31日16時49分30秒 に編集

コメント無し

本文の変更

# はじめに raspberry pi上でエッジAIを動かしたいケースがあったのですが、OSのバージョンにより環境構築に違いがあり面倒だったのでまとめます。 よわよわなので自分でビルドするという選択肢はありません。 現在動作確認できている環境は表の通り。順次埋めていきます。 |OS|tensorflow|tflite|onnx|pytorch|opencv| |-|-|-|-|-|-| |Bullseye 32bit|×|○|○|×|○| |Bullseye 62bit|○|○|○|○|○| |Buster 32bit|○|○|○|×|○|

-

|Ubuntu Desktop 22.10 64bit||||||

+

|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です。 ```sh $ 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版をターゲットに開発されているものも多い様です。 ③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=arm7l 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 ``` githubのUSAGEでは、ARCHの設定がarmhfとありますが、arm7lが正解の様です。 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ですが、インタプリタのインポート時に以下のエラーが発生する為、バージョンを落として回避しています。 ```python >>> 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の導入

-

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様依存だったので、この記事作る必要あったのか?という気持ちでいっぱいです。