Ryuz's tech blog

FPGAなどの技術ブログ

フィジカルAIについて考えてみる

はじめに

昨今、フィジカルAIや、エンボディドAI などの単語をよく聞くようになってきました。

当サイトのリアルタイム性に対するこだわりが発揮しやすそうな領域であり、FPGA 応用の生きてくる分野でもありますので、少し考察してみたいと思います。

昔からあった領域に新しい名前が付いただけと言う部分も大いにあろうかとは思っておりますが、分かりやすい言葉で一般の人に周知されるという事は非常に重要な事ですので、大変喜ばしい方向に進んでいるように思います。

何より、数千億円規模の大規模GPU環境で学習した LLM が群雄割拠している中で、弱小企業や研究機関や個人が太刀打ちしようとすると勝負の土俵を変えるしかない部分はあり、そういった中で、日本にある、まだ学習につかわれていないデータや、データ化すらされていない技能などをターゲットにしていくのは、戦略としてはありだと思うわけです。

FPGAによるフィジカルAI考察

リアルタイム性での分類

フィジカルAIの類は、基本的には IoT でありエッジコンピュータの存在が前提になると思います。エッジコンピュータはリアルタイム性以外にもセキュリティーの問題だったり電力の問題だったりいろいろな観点で分類がありますが、当サイト的には、リアルタイム性の観点に絞って考えます。

そうすると大雑把に

  • AI をクラウドに投げても良いケース [ノンリアルタイム]
  • ノンリアルタイムOS上で動くGPUでよいケース(Jetsonなど) [数十ミリ秒の応答+ミリ秒単位ーのジッタ]
  • リアルタイムOS+NPU などで頑張るケース [サブミリ秒オーダーの応答+マイクロ秒単位のジッタ]
  • FPGA を使うケース [マイクロ秒オーダーの応答+ナノ秒単位のジッタ]

ぐらいの区分を思いつくわけです。

正直、9割ぐらいは「Jetson で十分」という領域かとは思っておりますが、1割ぐらいは FPGA でこそ開拓できる分野があるのではないかと思っています。

FPGAでしかできない低遅延AI計算

例えば産業用のサーボモーターは 1k~100kHz ぐらいの周期で電流量を変化させているわけですが、たとえばこれを「強化学習によってAIで制御してみよう」なんてことは発想としてはすぐ出てくるわけです。

センサーとしてもIMUとか圧力センサとか一エンコーダとか色々なものが利用可能ですが、例えば当サイトがやっているカメラ画像処理での1ミリ秒でのAI認識とか、1ミリ秒後に視界の変化捉えるオプティカルフロー演算の結果を出すみたいなものも応用範囲に入ってくるかと思います。

こちらなどでも書きましたが、GPUは同じ計算の並列実行を行わないと性能が出ませんので、コア数に応じて何千とか万とかのオーダーでデータを溜めてから演算を開始しないと性能が出ません。 従って原理的にどうやってもメモリに溜める遅延時間を許容しない限りAI演算性能を発揮できない宿命にあります。さらに GPU の多くは Linux などのノンリアルタイムOS上で動くことを前提としています。最近は Linux のリアルタイム機能も充実しては来ていますが、GPUへのデータ転送やキャッシュヒットのバラツキなどでどうしても計算時間に大きなジッタが出てきます。

そうすると、ある程度の大容量のAI計算をリアルタイムにやろうとするとFPGAに利が出てきますし、FPGAにあったパイプライン計算での演算や、データフローを乱さず低遅延で出力できる学習モデルの開発が重要になってきます。

まず試作しないとデータすら取れない領域

そして何よりここからが重要なのですが、低遅延でリアルな対象を相手にすると、FPGAなどで試作しないとデータすら取れない という事が起こります。

ロボットなどは専門ではないのですがわかりやすいので、例えば「風の中でカメラ画像を見ながらバランスをとってキャッチボールをするドローン」みたいなものを考えてみます。

そうすると、非常に乱暴に言うと、姿勢制御をしながら飛んでくるボールに向かうように、「次の瞬間の各モーターの電流値を決めるAI」を開発したいという話になります。

この際にとても厄介なのが、出力如何で次のセンサー値も変わってしまう という事です。モーターの動き如何で視点となるカメラも移動してしまいますから。

近代のAIのほとんどは、取得済みのデータセットを固定された入力として用いて学習していますが、フィジカルAI分野では AI の学習次第で入力も変化する という事が起こるわけです。

CGなどのシミュレーション(ある種のデジタルツイン)でもある程度補完できるケースもあるかとは思いますが、そのシミュレーションを作るための基礎データは、「実機でリアルにフィードバックして何が起こるか」というデータを集めない事には何もできないわけです。

そしてそのデータ自体も、「マイクロ秒単位でフィードバックを掛けて初めて起こる事象」のデータなわけですから、低遅延計算をまず試作しないと何の実験も出来ないわけです。

逆に言うと、そのようにして作られた学習データや学習モデルはまだ世の中にない唯一無二なものですので、十分に、世界初/世界一を目指して研究開発できる魅力的な分野になってくるわけです。

フィジカルだからだからこそのリカバリの効く領域

もう一点、フィジカルAI 分野で、特に、kHz 以上の高サンプリングレートで起こりがちな面白い事象として、リカバリが効く というのがあります。

人間が1本足でバランスを取って立っているようなときに、ふらふらしながらバランスを取りますよね。 ロボットなども同じで、あるマイクロ秒時間で予測を間違えて電流を止めてしまったり流しすぎたりしても、次の瞬間にそれを打ち消すだけ電流を流すとごまかせるなんてことは普通にあります。確率的にON/OFFを繰り返して結果をフィードバックしながら微妙な制御をするというのはルールベースでもいろんなところで行っていることです。

モーターに限らず、PWMで作る光の階調や、D級アンプの音声などでも、そもそも人間の感度より高い周波数でON/OFFを繰り返してますので、最終的に人間が感じる積分値が同じになるように後から多少のリカバリが出来たりもします。

要するにシステムにもとからある程度のマージンがあり、実行時にマージン範囲内で試行錯誤ができるという事です。 これは、学習モデルを考えるうえで、間違った答えを出すと一発アウトな従来AIと大きく違うところだと思っております。

また、このマージンを使って、実働中に「微かな試行錯誤」を行い、実働中に賢くなるAI(いわゆるオンライン学習)のようなものを入れ込む余地なども出てくるのではないかと思います。

製造分野などでも不良品にならない適正値の範囲では当然どんな製品にも微小なバラツキはあるわけで、要は最後にばらつきを規定範囲に収めることが目的なわけです。

おわりに

当サイトでは、計算機科学の観点、特に FPGA を起点に、フィジカルAIを眺めております。

AI の良いところは、ルールベースで手に負えなかった部分を扱えるようになった点だと思います。

我が国においては、すでにこの分野は非常に高いレベルで制御工学が発達しており、ルールベースのシステムが多数稼動していると思います。それらの中にAIを入れ込むというのは容易でない部分もありますが、うまく共存しながら拡張としてAIを足しこめれば大きな変化をする分野もあるのではないかと思います。

先のサーボモーターの例を挙げましたが、他にも高速回転するエンジンの点火タイミング制御とか、人間の四肢や視覚/聴覚などの拡張であったり、医療、宇宙までいろいろな研究対象がありそうに思います。

ビジネスの観点でも、製造装置のようなドメイン固有の技能のAI化であったり、汎用ロボットとか人間の拡張(パワードスーツとか電脳メガネとか)のような多目的に使えるAIまで、まだまだ未開拓な領域が広がっているように思います。

AI を研究テーマにしたいという若者の方も増えているかと思います。一方で、パソコン上で Python 使ってできる範囲で論文書いて学位取ろうとすると、やってる人が多すぎてテーマ選びから苦戦するという方も多いと思います。

幸い今フィジカルAIというワードがちょっとしたバスワードになっていて、昔なら「単にFPGA化しただけでしょ」としか見られなかった分野が再注目されているわけですから、FPGAやってみたいなと言う方に興味を持っていただけると嬉しく思う次第です。

もちろん「リアルタイムに動くシステムを試作する」と言うのはそれ自体結構大変ですし、「自分で作ったシステムに適した学習モデル」を考えたり、「実際に学習させたり」はとても大変なことではあるのですが、苦労に見合った楽しさや見返りはある分野だと思っております。