Armadillo Base OS上での開発に限った話ではありませんが、作成するアプリケーションの仕様の検討を行います。
本ドキュメントでは機械学習を用いたアプリケーションを開発するため、この章では主に機械学習に重きを置いて説明します。
5.1. Armadillo Base OSにおけるアプリケーション仕様検討
4章基本的な開発の流れでも説明したとおり、Armadillo Base OSでは基本的にユーザーアプリケーションをpodmanコンテナ上で実行します。
そのため、実行環境としてArmadillo Base OSを意識する必要はありません。
従来のArmadillo製品を使用した開発を行ったことがある方であれば、その際の製品開発の仕様を引き継ぐことも可能です。
この後の「podmanコンテナイメージの選定」でも紹介していますが、実現したいことに合った実行環境をコンテナイメージとして自由に選択できるため、Armadillo Base OSにおけるアプリケーション仕様の検討時の制限は少ないはずです。
作成するアプリケーションの実行環境としてどのコンテナイメージをベースとするかは最終的なイメージサイズにも関わりますので、検討しておく必要があります。
podmanは、同じくコンテナを扱えるソフトウェアである Dockerと基本的に互換性があります。
そのため、podmanで使用するコンテナイメージとして Docker Hubに存在するイメージも使用することができます。
コンテナイメージサイズをなるべく小さくしたいならばalpine、Pythonで書いたアプリケーションを手軽に実行したいならばDebianベースのpython:3.x-slim-bullseyeなど、作成するソフトウェア仕様に沿ってベースイメージを決定します。
また、Armadillo-IoT ゲートウェイ G4において映像出力を行う、もしくはNPUを使用して推論を行う場合は、そのために必要なライブラリがありますので、 アットマークテクノが提供しているDebianベースのpodmanコンテナイメージを使用することをお勧めします。
5.2.1. コンテナを用いたシステムの設計
使用するコンテナイメージの選定と共に、コンテナをシステムの中でどのように用いるかを検討しておく必要がある場合があります。
本サンプルアプリケーションのように単一のコンテナのみで完結するシステムであれば難しくはないですが、管理・運用のために機能毎にコンテナを複数個に分けてコンテナ間で通信し合う場合であったり、コンテナの外側であるArmadillo Base OSのコマンドやリソースへアクセスしながら使用したりする場合などには、どのようなシステム設計をすべきか難しい場合があります。
本ドキュメントでは、Armadillo Base OS上でコンテナを使用したシステムを構築する際によくあるパターンや注意点について「コンテナデザインパターン」にまとめてありますので参考にしてください。
5.3. ネットワーク構成の検討
作成するアプリケーションがネットワークに接続するものであった場合、Armadillo Base OS や podman、コンテナのネットワークについて把握した上で検討する必要があります。
本ドキュメントでは、 podman のネットワークの概要や具体的なネットワーク構成・その設定方法を「ネットワーク」に記載しています。構成検討・設定時の参考にしてください。
5.4. ハードウェアの拡張
サンプルアプリケーションでは行いませんが、Armadilloの拡張インターフェースにI2CやSPIなどのインターフェースを持つ外部デバイスを接続する場合、対象のピンの機能やパラメータを変更しなければならない場合があります。
ハードウェア拡張時のパラメータ変更の方法について、詳しくは「Device Treeを変更しハードウェアを拡張する」を参照してください。
5.5. 機械学習を用いたアプリケーションについて
機械学習を用いたアプリケーションを開発する場合で、今までに機械学習を用いた開発を行ったことがない場合は、少し検討が必要かもしれません。
機械学習という言葉が独り歩きして、「機械学習は簡単になんでもできる」など間違った認識で開発が行われる場合があるためです。
機械学習アプリケーションは、それ以外のソフトウェアでは実現できないようなことを実現できる強力なものであり、それだけに魅力的ですが、万能ではありません。
当然デメリットも存在することを忘れてはいけません。
機械学習アプリケーションのデメリットを知り、そのデメリットをシステムが許容できるかを検討する必要があります。
場合によっては機械学習を使わないで、別な手段で問題を解決するという選択をすることも重要になります。
以下に機械学習を用いたアプリケーション開発のデメリットを挙げます。
自分で一から推論モデルを作成しようとすると、膨大な量の教師データが必要になります。
物体検出サンプルならば何千枚といった画像データを用意し、それに手作業でラベル付けと物の位置を指定してはじめて教師データとなります。
場合によっては、全ての画像データに対してリサイズや色変換など前処理をする必要がある場合もあり、学習には多くの手間がかることに注意してください。
本ドキュメントの物体検出サンプルでは転移学習を用いることで用意する教師データの数を減らしています。
推論の速度は、推論モデルと推論を行うハードウェアに依存します。
ハードウェアは今回はArmadilloで固定なので問題ではありませんが、推論モデルによっては一度の推論に長い時間がかかる場合もあり、速度を要するシステムでは使えないということもあります。
速度は一度推論モデルを作ってみなければわからず、基本的に精度とトレードオフですので、高い精度のモデルほど速度は遅いです。
推論の精度は、推論モデルに依存します。
学習時にどれだけの数の訓練データを入力したか、訓練データや特徴量は正しいものだったか、過学習は起こっていないかなど、気にするべき箇所は多々あります。
さらに、精度はどこまで学習を積んでも100%になることはありません。
速度や精度は推論モデルのチューニングによっては改善が期待できるかもしれませんが、限界があります。
推論モデルの速度と精度については予め実現したいラインを設定し、そこに近づけられるように試行錯誤と検証を重ねる必要があります。
最終的に出来上がる推論モデルの性能に合わせて、システム全体で推論の速度や誤検知を許容できる仕様にしておく必要があります。
機械学習はドキュメントやテストコードがなかったり、いきあたりばったりの設計が残ってしまうなど、技術的負債が多くなる傾向があります。
それは、以下のような機械学習を用いたシステム構築の難しさが原因としてあります。
-
前述の通り試行錯誤回数が多くなる
-
確率的な処理があるために自動テストが難しい
-
長期運用しているとトレンドの変化などで入力の傾向が変化する
-
実験コードやパラメータが残りやすい