Ryuz's tech blog

FPGAなどの技術ブログ

Verilogの課題を再考してみる

はじめに

RTL開発を行える言語は多数ありますが、Verilog と その後継である SystemVerilog はその有力な言語の1つかと思います。

一方で、もともとシミュレーション言語として開発された後に合成にも使われるようになった経緯と、そもそもとても長い歴を持っている、早い話が古い言語であるため、後方互換を捨てない限りは永久に負の遺産も抱え続けることになります。

詳しい言語の歴史は Wikipedia などを見て頂くとして、20年ほど前ぐらいに私が半導体関係のお仕事に携わってた頃は周りは Verilog-1995 を使っていたようです。もっともこのころ私はまだ Verilog は使っていなくて、後に FPGA をやり始めて、当時 Xilinx の ISE で Verilog-2001 あたりから使い始めたと記憶しております。

そののち Vivado になり SystemVerilog が使えるようになり、少しづつ試しつつ verilator との出会いなどもあって、SystemVerilog も限定的に使い始めたりしています。

Verilog に限った話ではないのですが、仕様の足し算で済む話は言語の進化でどんどん解消していきますが、引き算に関してはなかなか難しく、「新しくこういう機能用意したのでなるべく古いものは使わないでね」としていくしかないので、なかなか難しい問題があります。

私が持つ Verilog の不満どころ

ということで、私の思う Verilog の不満を少し書いてみるわけです。

合成とシミュレーションで動作が変わる場合がある

多分これが昔からある一番の課題でしょう。

  • うっかり書いたブロッキング代入で実行順序が保証されない
  • always_ff @( clock ) begin とかに勝手にコード補完されてて変なラッチが生成されてた
  • 源振の違う同じ周波数のクロックでsimだと誤差が無いので動いてしまった

とか、いろいろあるあるです。

この辺りが Veryl だと CDCの扱いなども含めてかなり解消されているようで、期待している次第だったりします。

バス幅ゼロを許容していない

地味にこれ私すごくフラストレーション持っているのですが、[0:0] 表記で1bit が生成されてしまうので 0bit 幅ってできないのですよね。

ポート数に合わせてIDの幅とか決めたいときに $clog2(N) みたいなことをすると、N=1 の時だけ個別に場合分けしないといけない。

しばし

parameter int ID_WIDTH = N > 1 ? $clog2(N) : 1;
logic [ID_WIDTH -1:0] id;

みたいなコードを書く羽目になり、N = 1 時には id には 0 しか来ないので 論理圧縮で消されるのを祈る みたいなことをよくやります。美しくないです。

Python や Rust など [0:10] や 0..10 の表記で 0から9までを生成してくれる系の言語に慣れていると特にいらいらしてしまうわけです。

マクロやジェネリクスがまだまだ弱い

Verilog-2001 から導入された generate 文は超強力で、parameter との組み合わせでかなりのメタプログラミングが出来るので、個人的にはこれはとても気に入ってる構文です。

一方で、ジェネリクスとして綺麗に定義されているわけでもなく、マクロに関しては C言語並みです。

もともと C言語のマクロが非力すぎるというのあって、IF しかないのでチューリング完全でなく、FORなどの繰り返しが無いので、割り込みテーブルの静的生成とか、特定用途のコード生成では MASM (マクロアセンブラ) にも負けていたように思います(苦笑)。

Verilog では generate 文でこのあたりはかなり解消されましたが、それでも Lisp や Rust のマクロのような、一度 AST に持っていくようなちゃんとしたマクロがあると応用性は高そうな気はしています。

Veryl にとっても期待しています。

勝手に wire 推定する

`default_nettype none

しないと 1bit の wire になってしまうのは、いまだに嵌ることがたまにあります。

言語的にはそうしないと後方互換が保てないのでどうしようもないような気がします。

automatic と書かない限り static になる

C言語に慣れていると、ブロックの先頭で定義した変数は自動変数っぽいイメージを持つが、実はこれ Verilog との互換の為にデフォルト static なのでうかつなことをするとラッチが生成されたりとかあらぬことが起こります。

ちょっと厄介なことに xsim(Vivado Simulator)がデフォルトで automatic だったりするので、しばらく気が付かなかったりしました(今はどうなったのかな?)。

仕様が膨大すぎる

1800-2017.pdf は 1315ページもあります。 先の nettype とか var と wire と データ型とか初心者泣かせすぎな仕様も結構ある気がします。

単に wire と書くとデフォルトの DataType で wire logic が推定され、単に logic と書くとデフォルトの kind として var logic が推定されるので SV が Verilog と見た目上の互換になるとか、マニアックすぎる後方互換確保にいまだに混乱してます。 ちゃんと理解できてる自身があまりないまま使っていたりします。

おわりに

今回は思いつくまま不満を書いてみる回になってしまいました。

今は AI もあるので、うっかりなバグは減りましたが、それでも罠になりうることを知っておくのは悪いことではないかとは思います。

SystemVerilog になって class や可変長配列など便利な機能も増えましたし SVA の登場や UVM の存在など、今後も進化は続くのかなとは思います。 一方で、仕様がより複雑になる事はあっても単純になる事は無いと思われるので、今後も覚えることは増えそうです。

足し算しか出来ない言語進化に対して、別言語を再定義することで結果的に引き算を行って、シンプルな言語を作ろうとする Veryl の意義を改めて再確認した次第です。

SOTAなモデルと戦うな

はじめに

AI研究でFPGAを使おうとする初学者の方へ、せっかく高い意欲をもってFPGAに興味を持ってくださった若者が辛い思いをしないよう、繰り返しになる部分もありますが書いておきたいと思います。

  • 「FPGAを使って面白いモデル改善をして実装までやりました!」
  • 「ふーん、で SOTA なモデルより何% 精度良くなったの?」

で、辛い目に合う若手を、もう何人見てきたことか。

意義深いことやってる筈なんですが、ちゃんと説明できないので折角の成果が認めてもらえないし、FPGAなんか知らない人には何やってるんだかよくわからないということが起こってしまうわけです。

もっとも、AI モデルをやってるのか、計算機アーキテクチャをやってるんだか、よくわからないまま、なんとなく「AIやりたい、FPGA面白そう」で深く整理しないまま手あたり次第手を動かしてる側にも問題はあるのですが(苦笑)。

リコンフ8策みたいな高尚なことは書けませんが、私も少し持論を書いてみるわけです。

SOTAなモデルと戦うな

で、表題に戻るんですが、FPGA で GPU や AI専用LSI と精度競争しても勝てるわけないんだから、前提をちゃんと置くべきなんです。

じゃあ何と戦うのか、条件を同じにした 従来のモデル と戦うべきだと思うわけです。

例えば昨今 フィジカルAI みたいなバスワードが流行ってますが、例えばあなたが数万円ぐらいの FPGA をターゲットにしていて、積和演算のできる DSP が 200個 ぐらい入っていたとしましょう。

ピクセルクロック 200MHz ぐらいで画像処理するとして、40G MAC/s 程度の演算リソースという事になります。

「今はFPGAで評価してるが、ASIC化して数百円で数百mW のチップで出来る事も視野に研究している」みたいなエクスキューズを挟むのもありでしょう。

実際、従来のモデルで 40G MAC/s で出来る事は極めて限定的で、著しく fps が下がったり、恐ろしく低精度な結果しか出ないでしょう。

30fps ぐらいで動かそうもんなら MNIST ぐらいならまだいいですが、CIFAR-10 クラスでも SOTA からは程遠い精度しか出ないはずです。

そういったものをまず定義して、特殊領域に AI を入れ込むことがいかに難しいかを先に述べて、そこを改善することの意義を述べましょう。

しばしこの辺りが全く述べられてない論文を書いてしまい、査読段階で「SOTAなネットとの比較を載せるべきだ」という指摘を食らって馬鹿正直に比較するリバイスをしてしまい拒絶される愚を見かけるわけですが、そこで行うべきは「SOTAなネットと比較する意味がない」ことをちゃんと書くことと、SOTAなモデルの技法であっても 同じ条件下ではろくでもない性能しか出ない ことをちゃんと示す事だと思うわけです。

FPGA のメリット

FPGAを使って AI をやるメリットは

  • 低遅延でリアルタイムに演算できる
  • CPUやGPUに存在しないデータ型を自由に定義できる(特に強い量子化や非線形表現)
  • 並列演算だけでなくパイプライン演算もできる
  • ヘテロジニアスな計算機も作れる
  • 特殊なセンサーデバイスとセットでディープセンシング出来る

などなど、いろんなものがあります。

そもそも GPU 上で研究と学習が行われている多くの従来モデルは、アンコンシャスバイアス的にGPUで効率が良くなるようにモデル設計されてるわけですから、それをそのままこういう特殊領域に持ってきたら碌なことにならないわけです。

如何に碌でもないことが起こるか最初にボコボコに叩いて、課題を挙げまくりましょう。

「あなた方が高価で発熱しまくるGPUで研究してるモデルは、いざコストと生産性に追われてる現場のおじちゃんおばちゃんには何一つ役に立ってないんだぞ」と(オブラートに包んで)きっちり言い返しておきましょう(笑)。

出発点が違うんだという事をしっかり主張しないと、お互い違う物差しで不毛な議論をすることになり、誰も幸せになりません。

リアルタイムコンピューティング的な解

で、当サイトは「低遅延でリアルタイムに演算できる」を最重視しているわけですが、結局、成果を見る側に下記の立ち位置の違いを理解してもらえる説明を如何にできるかだと思うわけです。

私の取り組みの原点は低遅延処理ですが、低遅延の為にハイサンプリングレートにすると、時間変化に対して連続性が生じるのでアルゴリズムが変わる、という事が起こり、それらをAIモデルに反映させるには計算機アーキテクチャごと再設計しないといけないけど、それは確かに成果があるという事です。

予想外にバズったつぶやきを下記に張りますが、同じようなことが AIモデルでも結構いろいろ出来るので、そういう研究って面白いのですが、そういう背景をうまく説明しないと 「SOTAなネットの方がよっぽど精度良いよ???」となってしまうAI研究者は多いので、ちゃんと万人に分かるように説明する ってとっても大事なのです。

おわりに

まあ、なにより、研究してる本人が、自分がやってることが他分野の人にどう見えてるのか客観的に理解することが大事なんだとは思います。

そうはいっても、AIも大変だし、FPGAのツールにも振り回されるし、悪戦苦闘して、なんか動かすのに精いっぱい となってテンパってる学生にそこまで求めるのも酷なのかもしれませんが、折角の成果が評価されないのも もったいない ですので少しでもうまく伝えるテクニックを考えてあげることが出来ればと思う次第です。

Sonyの卓球ロボ Ace を素人考察してみる

はじめに

先日 X で下記の動画が流れてきて初めて知りました。 (リアルタイムコンピューティング研究所を名乗っておきながら、この手の素晴らしい技術をまったくウォッチできておらずニュースで知るというのもお恥ずかしい話なのですが)

少し時間が出来たので今朝になって、こちら のプレスリリースを読み始めたところですが、大変興味深いので、私の好きなセンサー周りを中心に少し素人考察してみようと思います。例によって素人の感想ですので、間違いや嘘が混ざることもあるかもしれませんが容赦ください。

フィジカルAIというバズワードが流行り始めてしばらくたちますが、この分野で日本の技術が復活できる可能性を示してくれた、大変心強い成果であるように思います。関係者の方々に惜しみない賞賛を送りたいと思います。

プレスリリースでは、研究者や技術者の名前までは出ていませんが、こちら の Author を見て見ると実に 49名の連名者がおられ、国際色豊かな一大チームのようですね。

蛇足ですが、名前の入ってない方も大勢おられると思いますし、このクラスの研究者/技術者の年収を考えると人件費だけで毎年軽く10億円単位になっていると思われますので、大きなプロジェクトかと思います。私の研究所(自称)の数万倍ぐらいの予算規模ですね(笑)。

システム構成を見てみよう

先のURLに図が貼られていましたので引用させてもらいます。

Ace構成図

イベントベースビジョンセンサー IMX636(EVS) ×3台

こちら のイベントベースビジョンセンサーで 1/2.5型 で 約92万画素 のセンサーのようです。1280 x 720 で レイテンシは 100 µs以下との事です。マシンビジョンといいつつ 1280 x 720 という AV機器で使われるサイズなあたりが Sony らしいなと思いつつも大変興味深いセンサーです。

これに ガルバノミラーのユニットを組み合わせて GCS(Gaze Control System) と呼んでいるようです。

ガルバノミラー+高速度カメラで卓球の玉を追いかけるのは、東京大学、石川グループのこちら が古くから有名ですが、今回は 1000fps カメラではなく EVS を使っていることが特徴かと思います。

卓球の球は、およそ 30m/s 程度のようですので、1ミリ秒(秒1000コマ)で、3cm 移動する計算です。 一方で、ある程度の変化こそしますが、ラケットで打ったりしたとき以外は、1ミリ秒などの短時間の中ではほぼ等速直線運動をしますので、従来のフレームベースカメラでも1000fps程度あればPID制御などでセンサー中央に卓球の球を捉え続けることが可能なようです。

ではなぜ、今回フレームベースの高速度カメラではなく、もっと速い時間分解能を誇る EVS カメラを使っているのかというと、回転を測るため のようで、実に 500 rad/s (秒80回転)までの回転が測れるそうです。 従来のフレームベースカメラでいうと 10万fps などのオーダーになってしまう時間分解能です。

ちなみに回転が撮りやすいようにボールの方にもマーキングか何かあるっぽいですね。また露光量を稼ぐためと思われますが、赤外照明なども積極的に活用しているっぽいです。

一方で、一般に EVS は動くロボット側に搭載したり、今回のようなガルバノミラーとの組み合わせなどは、本来であれば非常に苦手です。変化したピクセルだけを測ろうとするので、背景が大きく変化すると背景の情報ばかりが出てきてデータ帯域を圧迫してしまい、本来の情報が取り出せなくなるためです。 (細かくミラーを止めたりしているのかとか想像もしてみたのですが)どうも今回は画像処理によって背景成分の除去を行っているようですが、ある程度背景が均一な環境 というのが前提にある可能性が高い気はしています。 少し意地悪な話ですが、背景に観客が大勢いるスタンドが写ってるなどだと、ガルバノミラーが動くたびに大量の背景イベントが発生して困るとかあるんじゃないかと想像してみました。

グローバルシャッターカメラ IMX273 200fps × 9台

こちらこちらなどに情報があるデジカメでも使われているグローバルシャッターのセンサーのようです。 1456x1088@10bit モードで 226 fps で、カラーとモノクロがありますが、三角測量に用いているとのことですので、常識的にはモノクロの方なのではないかと想像します。

撮影ラインを絞ってフレームレートを上げることも出来る筈ですが今回逆に少し下げて 200fps での運用のようです。想像ですが、システム周波数が 1kHz のようですが、その倍数まで落として同期システムにしているのだと想像します。

一般論ですが、多視点カメラを用いて3角測量する場合に最も重要なことは

  • グローバルシャッターで且つ複数カメラのシャッターをきっちり合わせる事
  • カメラ位置/レンズ歪などきっちり事前キャリブレーションしておくこと
  • 計測領域の被写界深度を確保するために、F値を下げても写る照明条件を確保すること
  • 方向の異なる映像からきっちり取りたい点で交差する中心を測る画像処理を開発する事

などです。

再帰性反射材など使えると楽なのですが、あくまで競技のできる球を使っているようですので、ここは赤外照明とかでいろいろ頑張っているのではないかと思います。

露光は短くできるとしても 200fps (5ミリ秒) ですと卓球の球は計測中に 15cm ほど進んでしまう計算なのである程度の予測は必要です。ただこのレベルの予測でもボールにラケットを当てるだけの制御ならルールベースである程度行ける可能性はあるのではないかと思います。そこに先の回転の情報なども使って高度に勝つための打ち返し戦略を立てるAIを組み合わせることで、完成度の高いシステムになっているのだと予想します。

ちなみに、もしかすると、このグローバルシャッターカメラで測った位置情報は、先のガルバノミラーの制御にも使われているのかもしれませんね。

計算機構成

有償の論文は読めていないのですが、AI 経由で聞きだすと、どうやらNVIDIAのGPUと専用のハードウェアで計算を行っているようです。

無料の情報の範囲でも 1kHz (1ミリ秒周期)のシステムと、31.25 Hz(32ミリ秒周期)のシステムのハイブリッドと読み取れますので、FPGAなどの専用ハードウェア と GPU でそれぞれハイブリッドな、サブサンプションシステムを作っている可能性はあるのではないかと思います。

卓球はもともと人間同士が競技するものなので、一応人間技の範疇ではあり、身も蓋もない話をすると応答速度数十ミリ秒のGPUで予測だけでもできる可能性はあるのかもしれませんが、人間の持つ分解能の高い連続的な応答や、反射神経部分を補うために 1kHz システムがうまく活用されているのだと思います。

当サイトがいつも妄想しているこれですね。

サブサンプション

リアルタイム処理のサブサンプションはちゃんと考えてシステム設計せずに後付けでハイブリッドにしようとすると、以前こちらで書いたような罠に嵌りますので、初期コンセプトがとても大事だと思います。

深層強化学習(RL)によって訓練された制御ポリシーを使用しているようですが、この辺りも興味深いですね。

1ミリ秒クラスの応答は専用ハードウェアを用意しないとGPUでは難しい領域に入ってくるのですが、私の LUT-Netのように1ミリ秒でやれるAIももちろん、ちゃんと専用計算機を用意すればこのクラスの小規模AIももちろん可能なはずです。そしてなによりGPUでちゃんとAIをやるのと組み合わせることが大事ですね。

アクチュエーション

こちらはもう全然私の知識では及ばなくなってくるのですが、卓球という競技に対応するための高度な機構設計がなされているようです。

一方で、これらを制御する電気的な仕組みについての課題は述べておく必要があるかと思っています。

汎用ロボットの類はしばしインターフェースが遅いケースがあります。私の知る限り、機構自体の応答性は極めて高くモーターに流れる電流が変化すると同時に電流量に応じた加速度がモーターに加えられます。高校物理の話です。

では、電流を変化させるまでの手順がしばし問題でして、USBなどは論外としつつも、Ether などでも TCP/IP などをまじめにやるとプロトコルスタックで消費する遅延量は大きいです。折角早く計算してもアクチュエーターに高速に指示が出せなければ意味がありません。

一番良いのは専用のものを作ってマイコンやFPGAから直接的にDACを制御することですが、高度なエンコーダーと制御ループの組まれた既存サーボシステムを置き換えるのも一般に容易ではありません。

で、今回のシステムを見ると EtherCAT の文字が書かれています。EtherCAT は物理層としては Ether 規格に準じながらも、TCP/IP のような複雑なことはせずに、機器をデイジーチェーンして超低遅延で制御する規格です。想像ですがこのような低遅延なI/Fに直接乗り入れできる計算機側の専用ハードウェアと、ロボットメーカーやサーボメーカーが誇る高度な制御システムを低遅延で接続することがある程度うまくいっているのではないかと思います。

EtherCAT 自身は規格書が簡単に手に入らないので、私はオレオレプロトコルで以前に少し遊んだ程度なのですが、物理層としては Ether は非常に優秀で、PC用の機材が使えて安価なのでとても素敵ですね。

おわりに

久々にワクワクするニュースが飛び込んできたので、日曜の朝の時間を丸々費やしてしまいましたが、備忘録程度の記事にはなったのではないかと思います。

センシングだけだとなかなかシステムとして可視化できませんが、アクチュエーション入ると楽しいですね。

私も最近FPGAで下記のような1ミリ秒で画像計測の結果をガルバノミラーにフィードバックするおもちゃを作りました。しょぼいですが、年間研究予算は数十万円で一人でやってますのでその点だけは誉めてください(笑)

フィジカルAIという単語が、日本の技術の復権のきっかけになってくれると嬉しいなと思います。

なお、Ace のシステムはあくまで 32ms 後の行動を教師として学習を行っているようです。32ms という応答性は人間には不可能なので、人間からすると超絶技巧なわけですが、裏を返せば卓球という競技は人間でも成り立っているという点で 32ms 後の予測が大いに意味を成す世界なわけです。

もし、私のところでやっている遅延1ミリの超低遅延技術はその10倍早いですので、もし仮に勝てるポイントを追求するとしたら、例えば、テーブルのサイズをどんどん小さくしていき、人間技では競技が成立しない領域に持っていくとか、ランダムに揺れるトラックの荷台で卓球させるとか、予測が効かず、力業の低遅延が生きてくる領域に持ち込んだ際でしょうか。

物理世界は特に人間がかかわるシステムの人間の機械への置き換えは、数十ミリ程度の予測はやりやすいものが多く、遅延で十分で1ミリ秒で予期せぬことに対応する能力が求められることは稀です。

一方で、上のガルバノレーザーのように人間の動きに合わせて遠隔で卓球ロボを制御させるような場合、人間の動きにさらに数十ミリ秒の遅延が乗ると致命的ですので、人間の拡張にAIを使う場合は低遅延は超重要になります。

私の方は引き続き、そもそも人間には不可能な作業をやらせる や、 人間を拡張する 部分にフォーカスして研究していきたいなと思います。

とはいえこのニュースは衝撃的でしたし、久々に感動させて頂きました。

生涯技術者でいたいな

はじめに

別に寄席に聞きに行ったりするようなことも無いので、好きというのも語弊があるのかもしれませんが、飛行機に乗ると落語チャネルを聞いてしまったり、テレビ番組を見ていて笑点とかやってるとついつい見てしまう程度には落語とかの演芸は好きではあります。

で、笑点なんかだと歌丸さんにせよ円楽さんにせよ、立派な噺家の先生たちは天寿を全うされる直前まで高座に上がったりされていたわけで、「生涯現役ってこういうことだよなぁ」などとしみじみと思い返してみるわけです。

一方で、私の見てきた世界の大半がサラリーマン技術者の世界であったこともあって、技術者でこれをやれてる人ってあまり見たことないいな? と、まあそんなことを考えてみたわけです。

実際、サラリーマン技術者ですと、まあ、そもそも管理職にならずに最後まで技術やってる人も案外少ないのですが、それでも60歳で定年となるとそこで技術から離れてしまわれるような方も多かったように思うわけです。 また、再雇用で会社に残ったとして、びっくりするような優秀な方が、これまたびっくりするような安い給料で雑用みたいな仕事をしてたりもまた良くある話でして。

ソフトウェアみたいな業種ですとまだあまりお金かからないからいいのですが、多くの技術は技術をするために設備だったり環境だったりいろんなものが必要ですので、何の準備もなく60歳になって組織から出てしまうと、幾ら技術が好きでもなかなか個人の力では何かを新しく始めるのも大変なのだと思います。

幸か不幸か、私の場合、50歳を迎える前に個人事業主という経験をする機会を得ましたので、次の10年を歩むにあたって何か準備ができないかなどを考えてみている次第です。

日本の技術者のポジション

私の場合、急に組織と言う後ろ盾を失って、途方に暮れていたところいろんな方に助けて頂いて今日があるわけですが、そもそも助けて下さる方がいて、今技術をやれているのは、私自身を会社組織関係なくそれなりにいろんな方に知っていて頂けていたからに他ならないように思います。 会社が会社のブランディングをやるように、個人のブランディングって技術続けるうえで重要なのではないかと改めて思ったわけです。

先の噺家さんの話のように芸能の世界におられる方は、まさに個人名がブランド化しているわけですが、そういえばそもそも日本の技術者ってあまり個人が目立たないよなとふと考えてみました。

アメリカなんかだと IR で、「〇〇開発チームに有名な〇〇氏に参画してもらう事になりました」なんてことは多少あるように思いますが、あまり日本ではそういう話も聞かないので、少し AI に聞いてみたところ

組織としては「誰がやっても同じ品質が出る」状態を理想とするため、特定の個人が目立ちすぎると、その人が離職した際のリスクを過大に評価してしまいます。

と、「あ、なるほど、確かにそういうところあるな」と納得してしまうような答えが返ってきました。

もちろん組織にもよりますし、時代によっても変わりますが、技術は個人ではなく組織に属すことを理想としている組織においては、属人化は仮にそうであっても隠しておきたい事項ですので、あまり個人は表に出さず、建前を通すために給料もだいたいみんな同じぐらい、60歳になれば全員一律定年退職、というのは確かにそうなりそうな気がします。

少し壁打ちしておりましたら AI が表にまとめてくれて、興味深かったので張っておきます。

項目 日本(伝統的企業) アメリカ(シリコンバレー型) 欧州(ドイツ・北欧等)
技術者の位置づけ 組織を構成する「歯車・設備」 価値を生む「タレント・資産」 高度な「職人・マイスター」
個人名の扱い 組織に隠すべき(属人化リスク) 前面に出すべき(ブランド・信頼) 専門性で評価(ギルド的信頼)
知財(IP)の考え方 全て社内に囲い込む(総取り) 循環させてエコシステムを作る 共有と標準化を重視する
IRでのアピール 特許数、設備投資額 キーマンの経歴、開発コミュニティ 業界標準への貢献、持続可能性
流動性への態度 退職は「裏切り・損失」 退職は「エコシステムの拡大」 安定した専門性の移転
契約の力学 雇用に近い「拘束型」 プロの「知見利用型」 権利と義務の「等価交換型」

伝統的企業って、まあ所謂 JTC(Japanese Traditional Company) とか揶揄されるようなごく一部なところだと思います。

私がかつて20年以上務めた製造業も、最後の方は今風の社風に変わっておりましたが、入社したころはまあ JTC でしたねぇ(笑)。

如何にして技術者をブランディングするべきなのか

ニュースなんか見ていても、日本企業に勤める技術者の名前が出てくるのはノーベル賞とるぐらいの事をした時で、それですらノーベル賞とるまでは「知る人ぞ知る」レベルというのは良くある話かと思います。そしてこれそのまま社会の縮図であり、「〇〇社の技術はすごい」と知っていても、誰が作ってるかまでは競合他社に勤めていて特許回避に頭を悩ませてる技術者ぐらいにしか知られていない、なんてのは良くある話なのかと思います。

私の場合、学生のころからフリーソフトで ITRON 作って遊んでいただとか、今でいう OSS のようなことをしておりまして、社会人になってもそういう事はやり続けておりましたし、「機密保持義務」とか「副業禁止」とかいろいろあるので、お仕事とは違う技術をMITライセンスでOSSでとかでやるとか、まあ当時は一円にもならないことを地道にやっていたのが、今になって飯のタネになったりしているわけで、人間万事塞翁が馬といいますか不思議なものです。

まあ、私の場合、ソフトウェアというお金のかからない分野だったので何とかなったというところでしょうか。

で、話を戻すと、最終的に 60歳過ぎて、現役で技術者やってる人って結局

  • 自分の技術をやるために自分で会社作った人
  • 採算度外視して趣味で技術やってる人
  • 個人のスキルに投資してくれる強力な支援者がついた人

などがありがちなところな気がします。

少なくとも、何の準備もせずに「他人の作った会社の中でしか知られてない状態で技術やってる」だけだと、定年退職などで組織という後ろ盾を失ったとたんに技術を続けるのがとても難しくなるように思います。

逆に最近の若い方々はこのあたりは良く心得ておられるようで、年寄りなんかより自己アピールの重要性がわかっておられるように感じます。終身雇用にどっぷりつかってきた世代と、ジョブ型雇用と自己責任論で危機感を持っている年代との差なのでしょうか。

転職を繰り返してキャリアアップしていくというのは、常に新しい会社に自己のブランドを売り込む行為ですので、その延長に定年というジョブチェンジを置くというのは、ある意味理にかなっているのかもしれません。

おわりに

結局なんの結論も得ていないのですが、今のところ自営業やっている限りは定年というものは無いようですので、1つでも2つでも世の中の役に立つ技術活動を1年でも長くやっていくことが出来ればなと思う次第です。

あとまあ、長く続けるコツって、多分好きな事をやることな気はしてますので、仕事のマッチングって大事だと思うのですよね。

そしていいお仕事に出会うためには、自分のスキルを高く評価してくれる人々に出会う事であり、やはりクローズにならずにオープンにやっていくというのは長く続けるために大事なことなのかなと改めて思って見た次第です。

GPUとFPGAのハイブリッドセンシングについて

はじめに

FPGAを使ったリアルタイム認識を一緒に研究させて頂いている研究室で「GPU と FPGA を組み合わせて高性能化しよう」というアイデアに興味を持たれる学生さんは定期的に現れますし、過去に実際に何度も取り組んでもらっておりますので今日はそのチュートリアル的な話です。

このブログでも過去に何度か触れているように

  • FPGA は様々なデバイスとの接続や超低遅延なリアルタイム処理に優れているが演算能力は乏しい
  • GPGPUはその性質上並列化が進むほど低遅延が苦手になるが、演算能力は高い

という特性があります(こことかこことか)。

ですので、この二つを組み合わせて、「高度な演算をリアルタイムにできないか?」というアイデアはみんな思いつくわけですが、なかなか罠も多い話でもあるので、ここで少し整理していこうと思います。

どういった処理になるのか

簡単にタイミングチャートを下記に示します。例えば FPGA の処理時間を 1ms (1000fps)、GPGPUの処理時間を 4ms (200fps) などのようにおいています。

現在、イベントベースカメラのような面白いものもありますが、残念ながら個人で容易に入手できるFPGAに直結できるようなものは存在せず、USB経由だったりするとGPUに信号が届くまでに平気で数ミリ秒の遅延が入ります。 現状の一般的な低遅延信号処理を考えると一般的なグローバルシャッター使って高速にシャッターを切る(短時間露光)するのが、遅延観点では最速かと思いますので、その例で書いております。

露光時間は、照明などを強く焚くなどすれば幾らでも短くできますので理屈上は露光時間はゼロに近づけることができます。そうなるとイメージセンサーからデータを読み出す リードアウトの時間が律速項になるのですが、FPGAでの処理はイメージセンサーからの読み出しと並行してパイプライン処理できますので、結果的に 1ms 後には結果を出すことが出来ます。

実際に1ms遅延のAI認識オプティカルフロー計測は当サイトで実機実証出来ている通りです。

では GPU はどうかと言うと、こちら で述べた通り、現代の GPU は、ほぼ1フレーム分のデータを一度メモリ貯めるなどしないとその並列性を活かした演算ができません。

つまり、FPGAが認識を完了する頃になってやっとGPUは計算開始条件が整う ようなことになります。

この時、 GPUが計算している間の変化をFPGAで補間(外挿)しよう というのが自然な発想かとは思いますが、設計を難しくするのが下記の2点です。

  • FPGA が GPUから受け取る情報は FPGA にとってかなり過去のものである
  • 次に GPU から情報を受け取るまでは自身の認識結果で補間しないといけない

と言うものがあります。

特に前者が厄介で、GPUが認識してくれるまでFPGAは補間対象を決定できないが、決まったときには見失っている という、「服を買いに行く服がない(缶詰の中の缶切り 改め)」という状態になりかねません。

力業で攻めるなら 画面内の全部の特徴点なりを追跡しておいて後からGPUの結果で追跡しなおす とかになりますが、なかなか「全部追跡」も非効率です。

この辺りの課題をどう解決していくのかなども重要なポイントです。

幸い、多くのシステムでは

  • 電源入れてから数フレーム遅れで認識が始まっても困らない(起動時間がちょっと伸びただけ)
  • 新しい物体がフレームインしてきてもワーク領域に来るまでに認識できれば良い

などがあるので、「ある程度疎な追跡から数フレーム掛けてターゲットを捉える」なんてことも視野に入ってきます。

このような許容できそうなシステム制約と相談しながらアルゴリズムを絞り込んでいくことが大事です。

とはいえワーストケースでも必ず一定フレーム数以内に捕らえるという、疎にしても漏らさない天網恢恢な仕組みの考案が必要ですが、そういったところに進歩性を生み出す余地が生まれてくるわけです。

予測と誤差と

また、FPGAで補間する話をしましたが、そもそも 予測(Estimation) を行っておくのは前提条件となる話です。

もともとFPGAで低遅延処理を狙う理由は明確で、世の中には予測しきれない誤差がいっぱいある ということにつきます。そして時間が経てば経つほど、つまり演算遅延が大きければ大きいほどその誤差は大きくなります。

世の中には、物体通しがぶつかりあって跳ねまわったり、振動環境だったり、風に揺れるドローンだったり、急に石につまずいたり、予測不能な成分が急に入ってくることは多々あります。

そして 予測できるだけ予測した後にさらに残る誤差は基本的にランダムウォーク(Random-Walk) です。ブラウン運動みたいなやつです。

ランダムじゃないなら予測できるわけだからそれは予測で取り除けるわけですから、取り除いた後に残るのがランダムになるのは自明ですね。

予測可能なものをGPUで扱い、予測不能なランダム成分をどうやって FPGA で抑え込むかが重要になります。

ちなみに、ここで、フレームレートの低いGPUにとっては、フレーム間の相関がほぼ無く Random-Walk になってしまうものが、フレームレートの高い FPGA から見るとある程度連続性のある動きだったりすることもあるので、このあたりもハイブリッドのメリットになってくると思います。

GPU と FPGA の通信の問題

もう一点、このシステムを考える際にしばし問題になるのが、FPGA と GPU の通信です。

特に GPU はしばしノンリアルタイムOSの上で動きますので、演算時間がばらつくことが多いですし、FPGAとGPU間でのデータ交換でもさらに大きな遅延が入ってしまう事があります。これらの遅延や、GPUの演算が間に合わずフレーム落ちした場合にもロバストになるようにするなど、これらもアルゴリズムに織り込んでおかないといけません。当然難易度が跳ね上がります。

Versal のような AIエンジンも内蔵した FPGA で連携するとか、DPU のようなソフトコアのAIエンジンと、パイプライン型の独自認識コアをハイブリッドにするとか、すべてハードリアルタイムな世界に入れ込む方がまだ現実的になる可能性すらもあります。

それ以前に、FPGAを始めるときの壁でも書きましたが、FPGAとGPUシステムとの間でデータ交換するシステムを開発すること自体が結構難易度高かったりします。

特にフィジカルAIが対象とするような領域では、カメラやアクチュエータとFPGAが密連携するところに強みを出しがちなので、ALVEO などの PCIe 系の資産が活用しづらくなりがちな点も要注意です。Kria などのシステムは一つの解になりえると思います。

FPGAのみでやり切ることも視野に

FPGA は、普通のAI をやる分には、まあ同クラスのGPUとくらべると 1/10 とか 1/100 の性能になってはしまうんですが、とはいえ、「1/100 でもやりたいことができるなら十分じゃないか?」と言うのはあります。

例えばフィジカルAI みたいなことする際に 1ms 級の認識をしないと間に合わないような事をするのであれば、別に最新のGPU向けAIモデルじゃなくても、特定分野で今まで出来なかったことをできるようにするには十分 である可能性があります(新規性の話)。

このあたり でも少し可能性について触れていますが、FPGA は状態空間モデル得意ですので、S4 とか Mamba とかの考え方を取り込める可能性もありますし、そもそも量子化とか枝刈りなども、GPUに出来ないFPGA固有の工夫はいろいろできますし、私のLUT-Net のようなアプローチも含めて、何も GPU向けに設計されたモデルをそのまま持ってくることをやめて、ゼロベースで FPGA-AI を突き詰めていけばいろいろできそうな気はします。

そもそも「AI である必要があるのか? 」というのもあって、ルールベースで出来るところはルールベースでやって、どうしてもデータオリエンティッドに機械学習を使いたい部分だけAIを使えばいいんじゃないかというのもあるわけです。

おわりに

昨今のGPUは非常に強力であることは間違いないので、その欠点をFPGAで補えればそれはそれで大変良い取り組みだと思います。

一方で、安直に組み合わせても失敗してしまう罠はたくさん埋まっている分野とも言えます。

だからこそうまく住み分けて両者を活用できる方法を模索するというのは、まだまだ前人未踏な部分が沢山残っていますし、アルゴリズムモデルにおいても、計算機アーキテクチャにおいても、まだまだ興味深い研究テーマが残っていると思う次第です。

それぞれの計算機のメリット/デメリットをよく理解して、何がボトルネックになるのか、安易に組み合わせると何が起こってしまうのか、よくよく整理して課題をフォーカスしてからから取り組むと良いのではないかと思います。

計算している間に実世界は変化する というのが フィジカルAI の面白い部分でもあり、計算時間も含めたパズルを自在に解くのに適した RTLプログラミングの醍醐味でもあります。 まさに 「物事を4次元的に考えろ」 なのです。

データが演算パイプラインを抜けたその先で世界がどう変化しているか考えながらプログラムを書くというのは、慣れてくるとピタゴラスイッチ的な独特の楽しさがあるのです。

特許と論文と新規性と進歩性と実用性と

はじめに

例によってFPGA大好き人間が、その狭い視点から書く話なので、一つの戯言としてご容赦ください。

エンジニアの世界では特許、アカデミックな世界では論文、と言う形で成果を世の中に出していくことが多いと思います。

AIに聞いてみると「毎年一人1件の特許出願がノルマ」なんていう組織もまだまだ結構残ってるようですので、否応なしに書いてるエンジニアや研究者もいるでしょうし、アカデミックも分野によってはある程度の頻度で論文出していかないと生き残れない人たちも多いのかと思います。

正直私は書くのはどちらも苦手というか、特許明細書を少し書いたことがあるぐらいで弁理士さん任せの事も多かったです。論文の方は研究の方に協力して連名に入れてもらう事はあれど、ほとんど自分では書いたことなかったりします。

なので今回は、書く話ではなくて、書くためのネタ作りとして、新規性と進歩性のある研究開発について駄文を書いてみようというものです。

新規性と進歩性

書いたことある人には釈迦に説法ですが、特許法では新規性と進歩性を有していることを要件としています。

特許法における新規性は「新しいものであること」、進歩性は「容易に思いつけないものであること」となるわけですが、論文においてもこの二つの要素は重要かと思います。

これらは 雑に解釈 すると「世界初で世界一の研究開発をしなさい」と言ってるわけです。

そういってしまうとなんか凄そうなのですが、実際には「そんな課題で困ってるのは世界でお前のとこだけだ」みたいな超狭い分野の課題を研究テーマにすれば割と簡単に世界初になれますし、まっとうにスキルを身に着けて課題に取り組めば、その狭い分野の世界一になるのもそこまで難しくありません(というかそんな研究してる人間一人しかいとかなら自然と世界一です)。 そもそも特許に関していえば「自社固有の課題」に取り組んで、製品化前に知財防衛として出願しておくようなものは多いかと思います。

逆に言うと特許や論文の良し悪しは「如何に大勢の役に立つ世界初をやれたか」の方にあり、キルビー特許みたいなのとか、「Attention Is All You Need」みたいな広い範囲で実用且つ、大きな進歩性を持つ特許/論文の効力は絶大だったりするわけです。この点は、特許も論文も後になってリファレンス数などとして現れてきますので、結局評価は時間という未来の歴史に委ねることになります。

いずれにせよ新規性と進歩性の二つは特許でははもちろん必須ですし、論文でもちゃんと理解しておかないと苦戦することが多いように思います。

少なくとも「二番じゃダメなんですか?」と聞かれれば「はい駄目です」となります。

実用性

ここが特許と論文の一番の差ではないかと思いますが、特許法で「産業上利用することができる発明」と書かれているので世の中で実用性がある必要があります。

一方、論文は学術的価値が重要ですので学部によってだいぶ毛色が変わってくるところだと思います。とはいえ「工学部」に関してはここもかなり求められて来てしまう気はしています。 理学部とかで、数学科とか物理学科とかだとまた全然違うのだとは思いますが。

私の得意としている分野は、情報処理系とはいえ、一応工学系の分野なので、やはり実用性を言われがちで、早い話が「なんの役に立つの?」と言う質問はすぐ飛んで来ます。

これは特許だと役に立つ例を1例書いておけばいいのであまり問題にならないのですが、論文の場合うまく説明しないと、解決しようとしている課題に対して、研究テーマの手法とは全然違う、別のもっと良いやり方を引き合いに出されて研究の価値を否定されてしまう事もしばしばあるようです。

同じ課題に対して解決しようとする手法が複数ある場合、多くは

  • 手法ごとに一長一短あるケースが多い
  • 手法を併用できるケースも多少ある

などありますので、しっかりと該当分野を調べて、「でもこういうケースではこちらの手法が有利です」とか、「でも、この手法も追加すればさらに良くなります」とか、反論できる理論武装をしっかりとしておく必要があります。

FPGA使った研究について

研究などで「既存のアルゴリズムを超苦労してFPGA化しました」みたいなのはよく聞くわけです。実際ビジネスシーンではこういうのばっかりですから、社会に出て役立つスキルを大学で学ぶという観点ではとても正しいのですが、特許や論文にしようとすると苦労が報われなかったりするので、同じ苦労するならちゃんとこの2点を最初に織り込んでおくことが大事だと思います。

特に、同じアルゴリズムを他の人が既にFPGA化してるケースなんてのも非常に多いです。学士の卒業論文ぐらいならまだ許されますが、修士、博士となってくると「他人の実装と比べて何が新規なの?、どこが進歩したの?」的な観点でマサカリが飛んで来ますし、しばしば最先端プロセスで作られた安くて速くて低消費電力なGPUと比べられて撃沈してしまうわけです。

ではどうやって FPGA での取り組みに、新規性/進歩性/実用性を見出すかという話になるわけですが、私のお勧めとしては

  • CPU/GPUが適用困難と言う理由で、既にFPGAが使われている分野への応用を目指す
  • 特殊デバイスとの連携/超低遅延/並列同期制御など FPGA固有のメリット生かした新規提案を目指す
  • FPGAの構造固有の活用方法を提案する

あたりでしょうか。

通信機器や制御装置などFPGAが既に活躍していてる既存分野をターゲットにして、「今までAIなんて考えてもいなかった場所にAIを入れ込みます」となれば新規性を生み出せます。

またこちらで書いたようなFPGAが得意とする処理を前提に「特定のデバイスから出てくるデータのタイミングで最適なモデルと回路を作る」、「遅延を最小化するためにモデルを組み替える」、「複数センサーのタイミング制御に強く依存するデータを取り扱う」など深いところに掘り下げていけば進歩性も生れてきます。

最後のものは私のLUT-Netなどが該当するかと思いますが、FPGAを前提に実装方式の改善提案等であれば、これもまた新規性や進歩性が生まれてきます。

おわりに

世の中には 0から1を生み出すのが得意な人と、1を10にするのが得意な人とが居るわけで、どちらもとても大事な事なのですが、後者の人がしばし特許や論文で苦戦する傾向にあるようにも思います。

まあそもそも AI じゃなくてもいいんじゃない感もあるんですが、「AIやってみたい」、「なんかFPGA面白そう」という若手の方々はいっぱいいるわけで、是非是非やって欲しいのですが、苦労した挙句「FPGAなんかやるんじゃなかった」と思われてしまうととても悲しいことにならないように、「それはどういう課題を解決しうるのか」、「他の方式と比べてメリットデメリットは何か?」、「研究開発として取り組むべき課題は何なのか」、そういったことを考えながら進めるという事が大事なのではないかと思う次第です。

後でこじつけるケースも多々ありますし、私もわりとそのクチですが、とりかかる前に整理しておくと、あとあと楽ができるのではないかとは思います。

FPGAのちょっといいとこ見てみたい

はじめに

今日は FPGA のいいところを思いつくまま列挙してみようと思います。

思い付きで書くので、グダグダになるかもしれませんが、ご容赦を。

FPGA のよいところ

いろんなものが沢山繋がる

まずなによりFPGAの良いところ。

品種にもよりますが、LVTTL/LVCMOS/LVDS/SSTL/HSTL/MIPI-DPHY など各種電気信号に加え、ギガビットトランシーバーでは、PCIe/SATA/USB/DisplayPort/SLVS-EC など様々なものを見かけますし、DDR4-SDRAM なんかも繋がってしまいます。

そして I/O ピンも少ない物から多いものまでさまざまで、大きい物なら 1000ピン以上のものもあり、それらを全部同時に制御するようにもプログラミング可能です。

秋月電子で売られているもの大体なんでも繋がる」ぐらいの誇張をしてみたくなります。

カメラやディスプレイはもちろん、様々なセンサーやアクチュエーター、リレーや光源、マイクなんかをアレイ状に沢山並べるなんていうのも面白いかもしれません。

複数のセンサーを使って集めたあなただけのデータで深層学習モデルを学習させるなんてこともできちゃいます。

まさに Physical AI にうってつけ です。

いろんなものが同時に同期制御できる

これもとても大事です。 マイコンでは基本的には1つのプログラムで1つの制御を行いますし、マルチコアCPUでもコア間をサイクル単位で同期させるのは困難です。

一方で、FPGA では複数の並列処理を、同じクロックで同期させて完全に同じサイクルでナノ秒単位でタイミングを揃えて同期実行させることが簡単にできます。

複数の照明とカメラの電子シャッターでぴったり時刻を合わせて撮影して、三角法で測量するなんてこともできますし、沢山並べたマイクを位相をずらしながらサンプリングしていくなんてことも簡単です。

さらには FPGA 内の PLL などで作ったクロックの位相をコントロールするなどすれば、本当にピコ秒オーダーで狙ったタイミングでデータの取得や出力が出来たりします。

光は 1nsec で 30cm しか飛びませんので、それこそ ToF や LIDAR のようなものを考える事すら視野に入ってくるのです。

全部異なる並列計算ができる

以前こちらで、こんな絵を描きました。

CPU の SIMD(Single Instruction, Multiple Data) や GPU の SIMT(Single Instruction, Multiple Threads) などの並列演算機能は、基本的に同じ命令を同時に複数実行することしかできません。以前も書きましたがこれは並列演算できるだけデータを溜めないと効率的な演算ができないので、リアルタイム性を落とします。 また、一気に入力を吸い込んで、一気に大量の出力をしてきますので、入出力の取り扱いが、センサーなどのデバイスと相性が悪いケースがあります。

これがFPGAのパイプライン演算の場合は外部からやってきたデータを次々取り込んで、受け取ったものから計算をはじめ、終わったものから出力していきますので、多くの入力デバイスや出力デバイスと直結しやすく低遅延です。つまり Physical AI にうってつけ です。

また、パイプラインに限らず、ライフゲームのようなセルオートマトン系の並列協調演算なども得意で、リザバーコンピューティングのようなものも得意です。

さらにリソース効率の面でもこれは重要で、CPU や GPU は何でもできる万能社員を大勢用意しておいてあらゆるタスクを全員にこなさせるという事をやります。つまり万能ALUがいっぱい並んでいます。

一方で、FPGA は1芸に秀でた多様性のある社員を集めて、各々に得意なタスクだけに専念してもらいます。したがってリソース効率や電力消費で有利になる事がしばしあります。

ビット演算など簡単な演算が超得意

FPGAは それこそ AND、OR などのシンプルな bit 演算や、 2~3bit 程度の数値の演算が超得意です。昨今だと量子化された AIモデルがいろいろ提唱されているのでイメージしやすいのではないでしょうか? 他にも決定木を解くなどの論理演算なども得意です。また本物のハードウェアだと NAND演算とXOR演算ではトランジスタ数が違うところ、FPGA は LUT で行う基本ビット演算はすべて同じコストであるため、プログラマにとっては非常に見積もりやすいというソフトウェア的性質も持っています。

これらビット演算を CPU や GPU でやらせた場合、1~2bit でよい演算に 32bit 演算命令を使う羽目になったり、ビット演算中にたくさん保有している巨大な浮動小数点演算器が丸々何もせずに遊んでしまったりと、もったいないことばかり起こります。

CPU/GPU が得意な演算を FPGA にやらせても、まあ多少効率が悪いなりに何とかなしますが、逆に FPGA が得意な演算を CPU/GPU にやらせるとボロボロになります。

FPGAに得意そうな計算をいろいろ考えてアルゴリズムを工夫しなおすのも面白いのでおススメです。

リアルタイム性が高い

これはとても強い武器です。RTLで記述するすべてのプログラムにおいて、プログラマは何サイクル後に結果が出てくるか知っていますし、それは毎回きっちり同じサイクルになるようにシステムを構成することも容易です。

つまり、「データを入れたら、きっちり 1000 サイクル後に結果が出ます」なんてことが簡単にできます。 これは製造現場などで、「センサーに反応があったら 500usec後に照明を焚いて撮影して、1msec 後に正常か異常か認識結果を出して振り分けする装置を作って」みたいなことを簡単にやってのけるという事です。

他にも現実世界と相互作用するすべてのものでリアルタイム性は重要で、例えば「マウスに代わるジェスチャーデバイスをAIで作ろう」みたいなことを考えるときに、演算応答時間がばらつていたら認識結果が正しくても、マウスカーソルがちぐはぐに動くことになります。

現実世界と計算機の相互作用にはリアルタイム性はとても大事です。FPGA はまさに Physical AI にうってつけ です。

それなりに演算能力もある

そしてこのような特殊なデバイスである割に、パソコンのCPUなどと同じぐらいの価格帯の最近のミドルレンジの FPGA は、積和演算をする DSP なんかも平気で 1000個 ぐらい入っていたりします。 これは GPU などと比べると見劣りはしますが、ちょっとした画像認識程度のAIは十分実行できます。

これは FPGA でないとこなせないような特殊デバイス制御やリアルタイム性の問われる特殊領域にも十分実用的なAI が入れられるという事で、まさに Physical AI にうってつけ です。 なにも LLM が動かなければ AI じゃないなんてことは無くて「やりたいことがやれる」事が大事なんです。

種類も規模もベンダーも豊富

ワンコインで買えるものから、数千万円するものまでラインナップが豊富なのも FPGA のいいところです。

ベンダーも AMD/ALTERA などの大御所から Lattice、Microchip、QuickLogic、Efinix、Achronix、GOWIN などいろんなベンダーがあります。

当然、価格や規模、欲しいI/O数や機能や、使いたいツールまで含めてとても広い選択肢を持っています。

また、以前私が 2,980円の Tang Nano 4K カメラセットAI 認識をやってみる という暴挙に出て、Interface 2025年12号 の付録雑誌に記事を書かせて頂いたとおり、結構、小さなところから深層学習自体は応用できるんです。

まさに Physical AI にうってつけ です。

以前にこちらで、KV260 が Jetson に OPS/W も OPS/$ も勝てないという話を書きましたが、それはあくまで Jetsonが丁度スケールするケース 限定です。 Jetson ではオーバースペックな場合にもっと安くて小さいものを選んだり、逆に性能不足の時に大規模FPGAを持ち込むなど、広くスケール出来るのもメリットなのです。

AI を活用した開発がいい塩梅

FPGA はプログラミング以前に、ツールの理解や環境構築がわかりにくく、初学者の最初の一歩目のハードルが高めでしたが、プログラマ人口の少なさからすぐ聞ける人が近くにいないという問題がありました。

一方で今は「AIに聞けばいい」という時代になりましたので、この問題はだいぶ緩和されている気がします。

加えて、RTL(VerilogとかVHDLとか) や HLS (C++) などの FPGA の為のコード開発自体もそれなりに定型パターンについては AI が行えるようになってきています。

もっとも AI の学習の元になっているインターネット上のデータ自体が、Web系プログラムのそれに比べて圧倒的に少ない為、Web系ほど AI に丸投げは出来ない面もあります。

ただそれは悪いことではなく、世の中に事例がいくらでもあるような部分はAIに任せ、自分が本当に作りたい新規性のある部分は自分で作る、という住みわけがやりやすいことを意味します。

逆に Web系プログラミングは、もはや AI に書けない部分がなくなりつつあり、趣味プログラマがプログラミングの楽しみを奪われかけている部分さえありますが、FPGA はまだまだ「AIが学習データに持ち合わせてないような突飛なアイデアの実装」が山ほど残っているフロンティアですので、プログラミングを楽しみたい人には逆にお勧めだったりもします。 そしてレビューとかデバッグとかには AI をガンガン使えば良いわけですから、現時点では AI と 人間が Win-Win の関係になりやすい塩梅ををもった分野であるとも思います。

おわりに

思いつくままに書いてしまいましたが、「なんかFPGAって面白そう」 って思ってくれた方が一人でもおられると嬉しいです。