Armadilloフォーラム

A6Eで動作するアプリケーションのG4への移植(移行)について

k-nishiki

2024年2月15日 17時06分

Armadillo A6E上で動作するアプリケーションをG4にも移植することを検討しています。
以下の点についてアドバイスを頂けないでしょうか?

(1)パワーマネジメント
  A6E: 省電力・間欠動作機能を利用して、指定した時間スリープモードに遷移させています。
      aiot-set-wake-trigger rtc enabled +<指定秒数>
      aiot-sleep
G4 : パワーマネジメント機能を利用して、以下のコマンドを実行すれば同じ動作になりますか?
      rtcwake -m mem -s <指定秒数>

懸念点として、aiot-sleep実行時には、LTE回線の切断と起床時の再接続を行っているようですが、
  G4の場合はその処理を追加する必要がありますか?
  また、aiot-sleep実行時に指定秒数は60以上になりますが、G4の場合も制限はありますか?

(2)入力電源の範囲
  A6E: 仕様上は、DC8V~26.4V。実装ではソーラーバッテリを接続し、9V~15V の間で動作させることを
     考えています。
  G4: 仕様上は、DC12V±10%。A6Eの条件では入力範囲に収まりませんが、どのように対処すべきでしょうか?

(3)エッジAIアプリの実行方法
  G4には、新たにエッジAIアプリを追加することを検討しています。
  その場合、消費電力をできるだけ抑えるように制御したいと考えています。
  例えば、エッジAIアプリの動作中は、CPU(2~4コア)+NPUを動作させるが、エッジAIアプリを停止して、
  負荷の軽い処理を実行中は、CPU 1コアのみを動作させて、消費電力を低減するような制御は可能でしょうか?
  また、エッジAIアプリを含む複数のアプリを別々のコンテナ上で実行する場合に、特定のコンテナに専用のCPUコアを
  割り当てることは可能でしょうか?

お手数をおかけしますが、よろしくお願いいたします。

コメント

at_dominique.m…

2024年2月16日 10時18分

k-nishikiさん

お世話になっています、
マルティネです。

ひとまず簡単に回答できるところから返事させていただきます。

> (1)パワーマネジメント
>   A6E: 省電力・間欠動作機能を利用して、指定した時間スリープモードに遷移させています。
>       aiot-set-wake-trigger rtc enabled +<指定秒数>
>       aiot-sleep
> G4 : パワーマネジメント機能を利用して、以下のコマンドを実行すれば同じ動作になりますか?
>       rtcwake -m mem -s <指定秒数>
>
> 懸念点として、aiot-sleep実行時には、LTE回線の切断と起床時の再接続を行っているようですが、
>   G4の場合はその処理を追加する必要がありますか?

G4 の場合も同じく回線が切断と再接続されます。追加処理が不要です。

>   また、aiot-sleep実行時に指定秒数は60以上になりますが、G4の場合も制限はありますか?

Armadillo IoT G4 と A6E は同じ RTC (RV8803) を使用しているため同じ制限もあります。
起床時間は時間の 00秒にしか発生できないので、例えば 9:45:04 に rtcwake を予定しても 9:46:00 に起床されます。
また、sleep やシャットダーン処理が終わってない状態で起床信号が発生された場合に起床しませんので、60秒以上を設定することで 60-119秒以降の予定にさせることを推奨しています。
aiot-sleep と違ってセーフティチェックはありませんのでご注意ください。

> (3)エッジAIアプリの実行方法
>   G4には、新たにエッジAIアプリを追加することを検討しています。
>   その場合、消費電力をできるだけ抑えるように制御したいと考えています。
>   例えば、エッジAIアプリの動作中は、CPU(2~4コア)+NPUを動作させるが、エッジAIアプリを停止して、
>   負荷の軽い処理を実行中は、CPU 1コアのみを動作させて、消費電力を低減するような制御は可能でしょうか?
>   また、エッジAIアプリを含む複数のアプリを別々のコンテナ上で実行する場合に、特定のコンテナに専用のCPUコアを
>   割り当てることは可能でしょうか?

AI処理は単純にアプリケーションを停止すれば問題なく消費電力が下がります。
https://armadillo.atmark-techno.com/blog/armadillo_iot_g4_inference_tim… でいくつかのモデルの消費電力を計っていました。

CPUコアの場合は厳密では /sys/devices/system/cpu/cpuX/online で制御できますので、停止することはできますが消費電力の面では同じパワードメインになっているため差はほとんど出ないと推測しています。
逆に軽い負担で逆に一つのコアにしてコアを早く実行させる場合がありますので、その場合の消費電力が数コアより高くなってしまう恐れがありますので、コアのことを変更しないことを推奨しています。
(すみません、その点は記録してませんので、そちらの環境でも確認していただければと思います)

なお、コンテナ起動時に例えば「add_args --cpuset-cpus 3」でコンテナを CPU3 のみを使わせることはできますが、CPU3 を停止すると CPU0-2 を使うことになります。
また、NPUの場合の制限もできないと思われます。複数のコンテナ・アプリでAI処理を行う場合は NPU の部分が命令が CPU に関わらず、入った順番に処理される認識です。

回答してない点はもう少しお待ちください。

よろしくお願いします。

k-nishiki

2024年2月16日 13時41分

マルティネさん、

いつもお世話になっております。

> > (1)パワーマネジメント
> > (3)エッジAIアプリの実行方法
回答ありがとうございます。
NPUのExecution Engineに違いは、これから調べてみます。いずれにしても、消費電流を下げても推論時間が伸びてトータルでは同じというケースがありそうです。

> 回答してない点はもう少しお待ちください。
(2)については、G4に外付けでDC-DCコンバータが必要かなと思っています。その場合の消費電力増も気になります(結局はその話ばかりです)。
よろしくお願いいたします。