機械学習のソフトウェア ライブラリやモデルの世界は急速に進化しています。遅延、電力、セキュリティといった懸案に対処しつつ、増加を続けるメモリと計算能力の需要を満たすには、実行予定のワークロードと合わせて繰り返し試行しながらハードウェアを開発する必要があります。
RISC-V ISA は、オープンなアーキテクチャに基づき、カスタム命令をサポートし、柔軟なベクトル拡張機能を備えているので、このような協調設計にまたとない機能を提供します。また、RISC-V によるオープン ハードウェア エコシステムの活性化で、研究やイノベーションが推進され、チップ製造自体を改善する方法が生まれているため、この手法を活用してソフトウェアのニーズを今まで以上に満たせるようになっています。Google の OpenMPW Shuttle などの取り組みから、ML に特化したさらに充実したオープンなソリューションを生み出すためには、オープンでソフトウェア的なハードウェア開発のアプローチが鍵となります。
HW/SW 協調設計フローによる RISC-V ベースの ML アクセラレータ
この数か月、Google Research は Antmicro と連携して、効率的なハードウェアとソフトウェアの協働設計のひな形となるチップ プロジェクトを進めてきました。安全な ML ソリューションを開発するために、Google Research チームは Antmicro のサポートを受け、Antmicro のオープンソース シミュレーション フレームワークである Renode を使ってチップ開発前の高速な ML 開発フローを完全なオープンソースで開発しました。
昨年、Antmicro はこの協力関係を活用し、RISC-V ベクトル拡張機能の Renode サポートを実装しました。この拡張機能は、Springbok というコードネームを持つ Google チームの RISC-V ベースの ML アクセラレータに使われており、今回の開発はその結果をベースに行われています。プロジェクトの一環として、デベロッパー体験をさらに向上させるため、Antmicro は土台となる SoC のサポートの改善もしました。さらに、OS に対応したデバッグ、パフォーマンスの最適化、ペイロードのプロファイリング、パフォーマンス測定機能など、たくさんのユーザー指向機能にも取り組んでいます。
Springbok は、Google の AmbiML プロジェクトの一部です。このプロジェクトは、プライバシーとセキュリティを中心としたオープンソース ML 開発エコシステムの作成を目的としています。Google Research チームは、RISC-V ベクトル拡張機能を活用して、標準的でありながら柔軟な方法で ML ペイロードに欠かせない行列の積和演算を並列化しました。さらに、Renode のおかげで、情報に基づいた選択によって RISC-V の柔軟性を活用する厳密な方法を決めることができます。これは、Renode が生成したデータと、ハードウェアの構成や機能を数日ではなく数分で試すことができるテキストベースの設定機能を使い、現実的な反復処理でスピード、複雑さ、特殊性のトレードオフを分析することによってできます。
ML ソフトウェア側のエコシステムの中心にあるのは、IREE です。これは、LLVM MLIR をベースに、ML コンパイラと制約の強いデバイス向けのランタイムをオープンソースで開発する Google のリサーチ プロジェクトです。
IREE を使うと、TensorFlow や TensorFlow Lite などの一般的な ML フレームワークからモデルを読み込み、中間表現(MLIR)に変換できます。その後、それをグラフレベルで最適化し、LLVM コンパイル フローによって特定のターゲットに最適なランタイムにコンパイルします。IREE では、対象デバイスにモデルをデプロイする API が C と Python プログラミング言語の両方で提供されています。また、モデルの読み込み、テンソル管理、推論の起動を行えるよう、TFLite と同じ変換を提供する TFLite C API も用意されています。
こういったランタイムを使うと、対象デバイスや Renode などのシミュレーション環境で、モデルのデプロイやテスト、デバッグ、ベンチマーク、実行が可能になります。
Spring 2022 RISC-V Week でのフローのデモ
パリで開催された Spring 2022 RISC-V Week は、ここ数年で初めてとなるオープン ハードウェアの大規模カンファレンスでした。これに向けて、最初のバージョンの AmbiML ベアメタル ML フローがオープンソースとしてリリースされました。これには、インタラクティブに実行する機能とサンプル CI の両方が含まれています。サンプル CI は Antmicro の GitHub Renode Action を使っており、こういったワークフローをコミットごとに自動テストできることを示しています。現在、Google Cloud パートナーである Antmicro は、Google Cloud と連携して、このようなシナリオでの大規模な CI のテストやデプロイに Renode を利用できるようにする作業を行っています。
パリのイベントでは、Antmicro と Google はソフトウェア協調開発フローを発表し、1 つのコアで AmbiML Springbok ペイロードを実行し、別のコアで Zephyr を実行するという混在マルチコア ソリューションのデモをしました。
発表したシナリオでは、Springbok コアがメイン CPU から ML 計算をオフロードする装置となって MobileNetv1 ネットワークの推論をし、RISC-V カスタム命令を通じてアプリケーションのコアに作業結果を報告しました。Renode では、カスタム命令の追加や変更は簡単に行えます。Python や C# を使って 1 行で記述することも、RTL で協調シミュレーションもできます。
ML デベロッパーやチップ設計者は、Renode をソリューションのテストや実行に活用できます。それだけでなく、ソフトウェアが実際に何を行っているかを詳しく知るために利用することもできます。Antmicro と Google は、パリのデモの一環として、実行した命令数や特定のオペコードの使用頻度を数える方法を紹介しました。こういった機能は、ソリューションのパフォーマンスを評価するために活用でき、実行指標分析や実行関数ロギング、そして最近開発された実行トレース生成と合わせれば、ML エミュレーション環境の詳しい挙動を把握できます。
このような機能が、Renode のさまざまなハードウェアやソフトウェアの協調開発ソリューションに加わります。そのようなソリューションの例として、Antmicro と Microchip が共同開発している RTL 協調シミュレーションや、Verilator 対応のカスタム命令のサポートなどが挙げられます。後者は、RISC-V Custom Function Units を担当している別の ML に特化した Google のチームとの共同開発によるもので、EU が資金提供する VEDLIoT プロジェクトでも使われています。
今後の計画
この取り組みは、ソフトウェアやハードウェアのコンポーネントや、安全な ML 開発のための協調設計エコシステムをサポートするツールをリリースするために、Antmicro が進めている Google Research チームとの幅広い活動の始まりでしかありません。Renode や RISC-V、協調開発を今後の ML 中心のプロダクト開発に役立てられると思った方は、ぜひご自分で AmbiML フローを試してみてください。
GitHub の iree-rv32-springbok リポジトリにアクセスし、ローカルにクローンして、README.md の手順に従ってください。
Renode は公式リポジトリからも取得できます。すぐに実行できるデモを試すことも、Renode のドキュメントを確認して Verilator 協調シミュレーションなどの ML アクセラレーション開発に役立つ機能について学ぶこともできます。