Amazon EchoにみるクラウドAI、エッジAI

近年、AI技術の進化に伴って、組み込み開発の役割が大きく変わってきています。
もともと、組み込み機器といえば、制御するための装置であったり、センサーデータを取得するためのデバイスとしての役割を果たしてきました。
それが、AIの登場によって、その時々の状況に応じた処理の切り替えを行うことができるようになっています。
例えば、AmazonのEchoはAI音声認識のAlexaを実装した組み込み機器です。
Echoのマイクから得た音の信号を声として認識させて、内容に応じた動作ができるようになっています。
ここで注意したいのが、Echo自身にはAlexaが入っていない、という点です。
Echoがやっているのは音声の入力とAlexaの応答をEcho自身に出力しているだけです。
Alexa自体はクラウド上に存在していて、インターネットを通じて接続しています。
このような仕組みをクラウドAIと言います。

え、けど最初に「アレクサ」って言わないとダメじゃん? ってことは、内蔵されているんじゃないの?
と思った方もいるでしょう。
はい、確かに「アレクサ」という音声を認識してから指示ができるようになっています。
最初の「アレクサ」というウェイクワードだけはEcho本体で音声認識できるようになっているんでしょう。
このように、組み込み機器に入っているAIのことをエッジAIと言います。
だから、最初にエッジAIでウェイクワード「アレクサ」だけを認識させて、Alexaに接続している間は、
インターネットを通じてクラウドAIに音声データを流し続けているという感じでしょうね。
クラウドAIとエッジAIの使い分け

うーん、なんでわざわざインターネットに繋いでクラウドAIを使う必要があるんだろう? エッジAIで良くない?
という疑問もあるかもしれません。
エッジAIだとインターネットに繋がなくていいので処理が早いですし、
データの改ざんや盗聴といったセキュリティ面を気にする必要もなくなります。
ただ、容量を取れないので、大量のデータを扱うのは難しく、できることに限界ができてしまいます。
現状、エッジAIの導入先として最も有力にされているのがカメラの用途です。

- 立ち入り禁止区域に入ったら異常を検知する
- 車に自動運転をさせる
- 製造ラインで製品の外観に異常がないか
リアルタイムで応答を求める場合には、エッジAIを選択することになります。
他にも、エッジAIで生データを加工した上でクラウドAIに投げて高精度化する、という方法もあります。
クラウドAIは複雑な処理ができるのが利点なのですが、クラウドサーバーを使うたびに利用料がかかってきます。
データ量が大きくなるほど処理も複雑になり、利用料が上がってしまうので、
エッジAIを挟むことでそのコストを避ける目的もあります。
ところで、AlexaはクラウドAIなのに、なぜ無料で使えるのでしょうね(意味深)。
組み込み開発の変化

ここからは、組み込み開発の変化について話したいと思います。
AIに限らず、IoTが流行り始めた頃から言われていることですが、組み込み開発の現場でもリアルタイム性が求められるようになっています。
今まではシングルコアで演算、通信、制御を行ってきましたが、最近ではマイコンにOSを積んで、マルチコア・マルチタスクになり、処理を並列化するようになってきています。
一つのコアで演算しながら、もう一つのコアでは通信をやっている、という使い方です。
これによって、2つの処理が同時にできるので、遅延がなく、リアルタイムに動かせるということです。
マイコンの処理はクロックによって決まるので、シングルコアでもクロックを上げれば、その分処理速度も上げられますが、消費電力も上がってしまうデメリットがあります。
その点、マルチコアにすれば並列に動かせる分、クロックを上げなくて済むので、電力消費も減らせるという話です。
OS入りのマイコン開発むずかしいよね
私は実務でOSを積んだマルチコアの開発業務をやったことがないので、あまり話せないのですが、
個人でESP32でマルチコアの実装をやってみた感じ、かなり難しいと感じました。
というか、OSの有無によって設計の仕方が全然違う気がします。
OSがなければ、タイマーやGPIO、演算制御などの割り込みがあれば何かする、いわゆるイベント駆動の思想で設計しますが、
OSがあると、どのタスクをどのコアに割り当て、タスクにはどれだけの容量を持たせ、優先度はどれが高く、実行時間はどれくらい必要か、など考えなければならないことがものすごく多くて、不安を感じました。
組み込みにもAIが入ってきて、OSの入った開発が主流になっていくでしょうから、早くマスターしないといけないなという感じです。
とはいえ、組み込み初心者の方は、最初からマルチコアやマルチタスクに手を出さない方がいいと感じます。
まずは、ESP32などで小さく始めましょう。
とはいっても、実はESP32はFreeRTOSの2コアなんですけどね。
では、これで終わります。ありがとうございました。
コメント