Armadilloフォーラム

NPUを使用した機械学習APPの開発について

toshiki814

2022年1月15日 16時53分

お世話になっております。金田と申します。

TensorflowやTensorflowLiteを使用するpythonファイルをarmadilloで実行したいと考えています。

python用のコンテナを/dev/galcoreをデバイスとして渡して作成し、tensorflowやtensorflow Liteをインストールしようとしました。
しかしながら、
No matching distribution found for tensorflow (tensorflow liteも同様)
と出てしまい、対応するtensorflow(tensorflowLite)のバージョンが存在しないことになってしまっています。

pythonは3.8.8を使用しています。
armadillo上で機械学習ライブラリを使用したアプリケーション開発の流れが分かる方がいらっしゃるのであれば、助言いただけると幸いです。

コメント

at_shiita.ishigaki

2022年1月17日 10時24分

石垣です。

> python用のコンテナを/dev/galcoreをデバイスとして渡して作成し、tensorflowやtensorflow Liteをインストールしようとしました。
> しかしながら、
> No matching distribution found for tensorflow (tensorflow liteも同様)
> と出てしまい、対応するtensorflow(tensorflowLite)のバージョンが存在しないことになってしまっています。

Armadillo-IoT G4上でtensorflowやtensorflow Liteの学習することは推奨していないため、tensorflowのパッケージ全てをインストールする必要はありません。
学習はパソコン上で行い、Armadillo-IoT G4上でtensorflow Liteのruntimeのパッケージを使用して実行のみすることを推奨しております。
また、NPUを使用する場合は、当社が提供しているサンプルコンテナイメージを使用することを推奨しております。
サンプルコンテナイメージは以下のURLから取得できます。
https://armadillo.atmark-techno.com/resources/software/armadillo-iot-g4…
上記サンプルコンテナのようなdebianベースのコンテナを使用する場合は以下のコマンドでtensorflow Liteのruntimeをインストールすることができます。

[container ~]# apt install python3-tflite-runtime

Armadillo-IoT G4上で機械学習アプリケーションを開発する方法については下記マニュアルも参考にできます。
https://armadillo.atmark-techno.com/files/downloads/armadillo-iot-g4/do…

石垣 様

返信ありがとうございます。
詰まってしまっていたので、非常に助かります。

現在、「開発ガイド:6.3 podman コンテナのベースイメージを選択する」
を参考に、サンプルコンテナを使用してpython実行環境を整えようとしています。

その際、「製品マニュアル:8.3 VPU や NPU を使用する」を事前にやっておく必要があるとの記載があったので、只今行っているのですが、
製品マニュアル:8.3.3の部分について、"umount /opt/firmware"を実行すると

umount: /opt/firmware: no mount point specified.

と帰ってきてしまい、正しくマウントできません。
imx_lib.imgを書き込むコマンド"dd if=/tmp/imx_lib.img of=/dev/mmcblk2p4 bs=1M conv=fsync"の際には、
マニュアルにかかれているような出力が返ってくるので出来ていると思います。

/optフォルダを確認してみたところ、中には何も入っていない状況でした。

また、/etc/fstabをviで開くと以下のようにopt/firmwareについての記載がない状態です。

/dev/root / ext4 ro 0 0
tmpfs /tmp tmpfs nosuid,nodev 0 0
/dev/mmcblk2p3 /var/log ext4 defaults 0 0
/dev/mmcblk2p5 /var/lib/containers/storage_readonly btrfs compress=zstd,discard=async,subvol=boot_0/containers_storage 0 0
/dev/mmcblk2p5 /var/app/rollback/volumes btrfs compress=zstd,discard=async,subvol=boot_0/volumes 0 0
/dev/mmcblk2p5 /var/app/volumes btrfs compress=zstd,discard=async,subvol=volumes 0 0
/dev/mmcblk2p5 /var/tmp btrfs compress=zstd,discard=async,subvol=tmp 0 0
/dev/mmcblk2p5 /var/lib/containers/storage btrfs compress=zstd,discard=async,subvol=containers_storage 0 0

/opt/firmwareが無いためか「開発ガイド:6.3.3. コンテナ内に入る」を実行する際にエラーが出ます。
Error: executable file `/bin/bash.` not found in $PATH: No such file or directory: OCI runtime attempted to invoke a command that was not fd

どのようにすればデバイスや環境もろもろを渡して
サンプルコンテナを作成できるか分からず困っております。
何卒よろしくお願いいたします。

金田

at_shiita.ishigaki

2022年1月17日 16時03分

石垣です

> また、/etc/fstabをviで開くと以下のようにopt/firmwareについての記載がない状態です。

出荷時のイメージではfstabに/opt/firmwareが含まれているのですが、
頂いたログでは、opt/firmwareについての記述がないようです。
以下のコマンドを実行し、fstabに/opt/firmwareを追加してください。

echo "/dev/mmcblk2p4 /opt/firmware squashfs defaults 0 0" >> /etc/fstab
persist_file /etc/fstab
mount -o remount,rw /
mkdir /opt/firmware
sync
reboot

再起動後に以下のコマンドを実行して、firmwareの中にファイルが存在することを確認してください。

[armadillo ~]# ls /opt/firmware
etc  usr

上記結果と同様になっていれば、firmwareの書き込みに成功しております。

> /opt/firmwareが無いためか「開発ガイド:6.3.3. コンテナ内に入る」を実行する際にエラーが出ます。
> Error: executable file `/bin/bash.` not found in $PATH: No such file or directory: OCI runtime attempted to invoke a command that was not fd

おそらく実行しているコマンドが

[armadillo /]# podman run -ti \
 --name=sample_container \
 --env=XDG_RUNTIME_DIR=/tmp \
 --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu \
 --device=/dev/tty1 \
 --device=/dev/input \
 --device=/dev/dri \
 --device=/dev/galcore \
 --device=/dev/mxc_hantro \
 --device=/dev/mxc_hantro_vc8000e \
 --device=/dev/ion \
 --volume=/run/udev:/run/udev:ro \
 --volume=/opt/firmware:/opt/firmware:ro \
 --cap-add "SYS_TTY_CONFIG" \
 localhost/abos-dev-guide:v0.0.0 /bin/bash. //末尾に余計な"."(ドット)が付いている

と、/bin/bash.になっていると思われるため、以下のコマンドのように/bin/bashに変更し実行してください。

[armadillo /]# podman run -ti \
 --name=sample_container \
 --env=XDG_RUNTIME_DIR=/tmp \
 --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu \
 --device=/dev/tty1 \
 --device=/dev/input \
 --device=/dev/dri \
 --device=/dev/galcore \
 --device=/dev/mxc_hantro \
 --device=/dev/mxc_hantro_vc8000e \
 --device=/dev/ion \
 --volume=/run/udev:/run/udev:ro \
 --volume=/opt/firmware:/opt/firmware:ro \
 --cap-add "SYS_TTY_CONFIG" \
 localhost/abos-dev-guide:v0.0.0 /bin/bash

at_shiita.ishigaki

2022年1月18日 14時43分

石垣です。

> 出荷時のイメージではfstabに/opt/firmwareが含まれているのですが、
> 頂いたログでは、opt/firmwareについての記述がないようです。
> 以下のコマンドを実行し、fstabに/opt/firmwareを追加してください。

echo "/dev/mmcblk2p4 /opt/firmware squashfs defaults 0 0" >> /etc/fstab
persist_file /etc/fstab
mount -o remount,rw /
mkdir /opt/firmware
sync
reboot

先日お伝えしたコマンドでは、/opt/firmwareが電源を落としたときに消えてしまう状態になっていたので、
正しくは以下のコマンドを実行してください。

echo "/dev/mmcblk2p4 /opt/firmware squashfs defaults 0 0" >> /etc/fstab
persist_file /etc/fstab
mkdir /opt/firmware
persist_file /opt/firmware
sync
reboot

石垣 様

無事にサンプルコンテナを作成に成功しました。
また、サンプルアプリケーション(read_meter)、及び自分で用意したアプリケーションにつきましても、無事に実行することが出来ました。

回答してしていただけて本当に助かりました。
石垣様のお力添えが無ければここまで来ることが出来なかったと思います。

ありがとうございました。