はじめに
有難いことに私はFPGA界隈に居ながら若い方々とお話しさせて頂く機会を結構頂いている気がします。
フリーランスのお仕事であったり、大学との共同研究であったり、Xで炎上した時の人だったり、様々ではあるのですが、FPGA で AI をやりたいというお話をよく聞くようになってきました。
もちろん若いFPGAユーザーが増えることは嬉しい限りであり、時間の許す限りお手伝いさせて頂きたい所存なのですが、中には修論発表まで時間がないなど、そもそもあんまり時間の許さない方なんかも居られたりします。そんな中、そもそもFPGAでAIをやる際に一朝一夕では済まない幾つかのハードルの存在を感じているので考察と言うか、駄文を書いてみたいと思います。
(まあ、やすやすとハードルを越えていく人もいるのですが、そうでない人もいるので)
あとまあ、私自身はあくまでエンジニアであって、アカデミックな分野にはけして明るくはないのですが、それはそれとして、研究の土台としてエンジニアリング的なものは必須なのでその視点から少し考察できればと思います。
そもそもの計算機設計の難易度
例えば大学の授業などで計算機システムの基礎を学び、 Verilog なども習い、学生実験で ちょっとした CPU などを書いてみて、Icarus Verilog などでシミュレーションして動かしてみたことはあるなんて学生さんは大勢おられるわけです。とはいえこの段階ではまだ「AMBA仕様って何?」ぐらいのレベルだったりすることも多々あるわけです。
そしてまた時代の流れの中で、「AIが研究したい」という学生さんはすごく増えておりますし、研究室でFPGAでリアルタイム画像認識やってるとか、私がBinaryBrain作った、なんて聞いて、「私もFPGAで新しいAIをやって論文を書きたい」なんて想いを持たれることは素晴らしいことですし、是非頑張って欲しいと思うところではあるのですが、現実的には幾つかハードルの高い部分も含む話だったりもします。
例えばここで私がよく使う KV260 などを引き合いに出すと、DSPが1248個ほど入っており、1つのDSPでINT8の積和演算が2つ入るっぽいですので、切りのいいところで 1024個ほどDSPを使って 500MHz 程で動かせれば、2TOPS ほどの性能になるわけです。そこで、その半分の 1TOPS の性能でいいから ResNet-18 を動かす専用計算機を設計しようと言ったところで、実は十分難易度が高い話だったりします。「64bitバス幅のSDRAMからパラメータやデータを読み書きして、2048個の積和演算器をなるべく休むことなく毎サイクル ResNet-18用に働かせる構造を考えなさい」というお題は1年かかったとしても驚きません。
そしてAMDのDPUを持ち出すまでもなく、そういう事の出来るIP(設計資産)は世の中にいくらでもあるので、それを作っただけでは車輪の再発明にすぎず、まずはそのレベルのスキル習熟度に達してからが、新規性のある研究のスタートラインだったりもします。
要するにスタートラインに立つまでが恐ろしく遠いのです。
ベンダーツールや周辺仕様習得の壁
仮に凄いAI計算機が構想できたとしましょう。でもそれを実装するだけでは何の評価もできません。動かすためには実際のデバイス用のツールで合成してシステムとして組み上げ、データを入力し、結果を表示しなければならないのです、しかも「XXX fps 出るんです」なんて言おうとするとある程度リアルタイムにデータの入出力が必要です。
以前、下記のようなブログを書きました。
FPGAとパソコン間で USBなりLANなりPCIeなりで通信するなら、そういう回路を準備しなければなりません。カメラやディスプレイを繋ぐにしても例えばMIPIやHDMIなどが必要です。ありもののIPやOSSを活用するにしてもそれらの最低限の知識は必要です。そして残念ながらそれらは研究の本質ではないのであまり評価されません。
実はめっちゃ苦労して作っていても「当然のように準備しましたが、なにか?」と涼しい顔で本題に話を進める胆力が必要になるわけです。
PyTorch と GPGPU の罠
私の経験上「FPGAで新しいAIを作るぞ!」という多くの若者が、計算機やFPGAの理解を後回しにして、まずは PyTorch + GPGPU などの既存プラットフォーム上で新しいモデルの研究を始める姿を見てきました。
もちろんFPGAで推論する場合、学習はGPGPUを使う事が多いので、これらのツールを活用すること自体は何一つ間違っていません。
が、多くの場合「それはFPGAじゃなくてGPGPUで動かした方が効率がいいよね?」というモデルが出来上がってくるのを結構沢山見てきました。それは当たり前で、PyTorch や TensorFlow などは基本的には GPGPU 用のモデルをメインに研究開発するツールだからです。
「新しい計算機アーキテクチャを発明するぞ!」と意気込んで研究しているはずなのに、知らず知らずのうちに、GPGPUが得意な範疇から一歩も出ないまま試行錯誤しているなんてことが起こります。「AI開発はこういうもの」という常識自体をまず疑わないとなかなかこの罠を抜け出せなかったりします。
結局どうあるべきなのか?
FPGAに限らない話なのですが、「現状(GPGPUとそれ用のモデル)に対して新しい計算機アーキ考えるぞ!」というスタンスを取るのであれば、まずGPGPUがどういうハードウェアなのかしっかり理解することが、出発点として非常に重要な気がしております。
そしてFPGAにせよ他のデバイスにせよ、GPGPUとは異なる特性をよく理解した上で、どこで勝つのかをよく考える必要があります。絶対性能であったり、低消費電力であったり、リアルタイム性であったり、セキュア性であったり、この部分で勝つという戦略を事前に十分に練ることが重要に思います(少なくとも「認識精度で勝つ」って話なら計算機アーキ関係ないからGPUでやんなさいw、同じ認識精度でより低電力とか低遅延とかならわかるけど)。またモデルで新規性を出すのか、計算機アーキテクチャで新規性を出すのかもよくよく考える必要があります。
少なくともGPGPUの仕組みを知らずに挑むのは、敵の強さを知らないまま戦略を練る、というなんとも愚かしいことになってしまいますので、今のAIがどういうモデルで、どのような計算機でどう開発されているのかちゃんと理解しておくことが大事です。
どういうわけか、AIのモデルについてはよく勉強している人が、計算機の仕組みについては案外あまり知らなかったりすることもあります。「犬猫の区別ができること自体が凄い」と言っていた機能だけで差別化しやすかった黎明期ならそれでよかったのですが、残念ながら現時点では「より多くの計算機資源が投入できればそれだけでさらによくなることがわかっているモデル」と言うのが沢山あり、性能の限界値競争が起こっているので計算機を無視して語るのも難しくなってきています。
もちろんそれ故に、他の人があんまりやっていないFPGAを使って一発逆転、という夢が持てる面もあるのですが、きちんと勝ち筋を作って取り組まないと、まさしく夢だけで終わってしまうわけです。
あとそもそも「ほんとに研究テーマはAIじゃなきゃダメなの?」と思う部分もあったりしますが、まあ、昨今少なくともAIは勉強しておかないといけないし、AIやってましたという方が就職に有利だったりするようなので、致し方ないのかなとも。
最後に環境の話ですが、これはまあ、スーパーマンみたいな学生が一人でなんでも作ってしまうような事が稀にあるので何とも言えないのですが、組織だって継続的に研究開発したいのであれば、研究室の中である程度の設計資産やノウハウを育てながら引き継いでいくという事が重要に思います。
コンピュータの構成と設計 MIPS Edition 第6版 上・下電子合本版
FPGAを楽しむために
少しマイナスなことをたくさん書いてしまった回ではありますが、そうはいってもFPGAプログラミングはCPU/GPUプログラミング以上に楽しいと思っています。
「FPGAで新しいことをやりたい」という人に対して、新しい部分だけをやってもらえないのは、既に確立できている部分のフレームワーク化や標準化が進んでいないだけとも言えます(要するにエコシステムが弱い)。
特にFPGA固有の壁について、
- PCと簡単につながるI/Fの標準化されたFPGAボード
- RTLで計算部分だけいきなり書き始められるフレームワーク
- OSSの増大やAIの活用
- 設計資産を共有/再利用できるパッケージマネージャ
- VS-Code や 拡張機能などの活用
など、まだまだいろいろやれることは残っている気がしています。
前半は私自身もいろいろ作ってみたいと思っていますし、後半は Veryl なんかにとても期待していたりします。
引き続き、楽しいFPGAライフをみんなで作っていきましょう。
コメント