本記事は、生成AIの出力をもとに執筆・編集しています。
はじめに
はじめまして、メイビスデザイン のnhです。
弊社では、SAMACT(サマクト)というエンドポイント向けAI IPコアの研究・開発をクローズドで進めてきました。このたび、SAMACTのPoC(概念実証)用Pythonライブラリ PySAMACT を公開しましたので、その背景や設計思想についてご紹介します。
SAMACTとは
SAMACTは、メイビスデザイン が独自に開発・保有するAI IPコアです。
ハードウェアIPとは?
IC(集積回路)やFPGA上で再利用可能な回路ブロックのことです。CPUやDSPのような汎用ブロックから、特定アルゴリズムに特化した専用回路まで幅広く存在します。自社でフルスクラッチ設計するのではなく、検証済みのIPを組み合わせることで、開発期間の短縮やリスク低減が図れます。SAMACTはAI推論・学習処理に特化したIPとして設計されています。
RTLとは?
Register Transfer Levelの略で、ハードウェアの「動きを論理的に表現した設計記述」のことです。VerilogやVHDLといったHDL(Hardware Description Language)で、「クロックごとにデータがどのレジスタからどこへ移動するか」を記述します。ソフトウェアにおけるソースコードに近い存在で、ここから論理合成を経て実際の回路(FPGAやASIC)に変換されます。アルゴリズムとハードウェアの橋渡しをするレイヤーと言えます。
FPGAとは?
Field-Programmable Gate Arrayの略で、後から回路構成を書き換えられるICです。RTLで記述した設計をビットストリームとして書き込むことで、任意のデジタル回路を実現できます。開発途中でも何度でも書き直せるため、試作や検証、少量生産に向いています。ソフトウェア的な柔軟性とハードウェア的な高速性を兼ね備えているのが特徴です。
ASICとは?
Application-Specific Integrated Circuitの略で、特定用途向けに専用設計されたICです。FPGAとは異なり、一度製造すると回路は変更できませんが、その分、性能・消費電力・面積の面で最適化できます。大量生産される製品(スマートフォン、車載、AIチップなど)では、最終的にASIC化することでコスト削減や性能向上を狙います。開発コストは高いものの、量産時のメリットが大きいのが特徴です。
SNNベースのアーキテクチャ
SAMACTは、SNN(スパイキングニューラルネットワーク / Spiking Neural Network) をベースとしたアーキテクチャを採用しています。
一般的なDNN(ディープニューラルネットワーク)が連続値の行列演算で動作するのに対し、SNNはニューロンが「スパイク(パルス)」を発火するかどうかで情報を伝達します。この仕組みにより、演算がスパース(疎)になりやすく、かつ、乗算器を利用しないため、エンドポイント向けのハードウェア実装において低消費電力化の観点で優位性があります。
エンドポイントAIとしての設計思想
「エッジAI」という言葉はゲートウェイやサーバーに近い比較的リソースが豊富な中間デバイスを含む広い概念ですが、SAMACTが狙うのはその先にあるエンドポイント、すなわちセンサーやマイコンレベルの極めてリソースが限られたデバイスです。
一般的なエッジAIは「クラウドで学習したモデルをデバイスで推論する」という構成をとりますが、SAMACTはデバイス上で学習まで完結させるオンチップ学習に対応しています。クラウドへのデータ送信が不要になるため、プライバシー保護・低レイテンシ・オフライン動作といった、エンドポイントならではのニーズに応えられるアーキテクチャです。
詳しい資料については弊社Webサイトよりご請求ください。
なぜ公開するのか
これまでSAMACTの開発は完全に社内クローズドで行ってきました。ハードウェアIPは回路設計そのものが知的財産であるため、コアとなるRTL実装を外部に公開するには慎重にならざるを得ません。しかし、開発を続ける中で次のような課題が積み重なってきました。
- PoC段階での評価が社内に閉じてしまう:外部のパートナー企業や研究者と検討を進める際、実際に動かせるものがないと議論がなかなか深まらない
- ハードウェアの挙動をソフトウェアで先に把握してもらいたい:RTL実装の前にPythonで数値仕様を確認してもらうことで、共同開発のスタートラインをそろえやすくなる
こうした背景から、ハードウェア実装と同等の演算仕様を再現したPythonライブラリをPoC向けに公開することにしました。
PySAMACTの設計思想
「速さ」より「忠実さ」
PySAMACTは高速な学習・高性能推論を目的としていません。PyTorchやTensorFlowのような汎用フレームワークとは異なり、ハードウェアの挙動に忠実であることを最優先にしています。
- 固定小数点演算 / ビット幅制約の再現
- Saturation / ClippingなどHW特有の挙動の再現
- 自動微分なし(スコープ外)
- GPU最適化なし(スコープ外)
「なぜPyTorchを使わないのか」と思う方もいるかもしれません。PyTorchは浮動小数点演算を前提とした設計であり、量子化・固定小数点特有の飽和演算やビット幅クリッピングをそのままシミュレートするには不向きです。PySAMACTはRTL実装前の数値シミュレータという位置づけです。
Python / NumPyベース
依存関係をシンプルに保つため、コアの実装はPython / NumPyベースとしています。研究・検証環境へ気軽に導入できることを重視した選択です。
インストール
pip install samact
ソースコードはGitHubでは公開しておらず PyPI で公開しています。
なぜGitHubでソースを公開しないのか?
弊社の方針として、社外からのコントリビューション(プルリクエスト)は現時点では受け付けていません。一方で、ドキュメント・サンプル・フォーラムのハブとしてGitHubを活用したいという意図があり、この構成を採用しました。バグ報告や質問はGitHub Issuesをご利用ください。
サンプルシナリオ
GitHubリポジトリには、すぐに試せるサンプルを用意しています。
| サンプル | 内容 |
|---|---|
SampleScenarioDigit.ipynb |
手書き数字認識(Jupyter Notebook版) |
SampleScenarioDigitRecognition.py |
手書き数字認識(スクリプト版) |
SampleScenarioDigitRecognitionDeep.py |
深層構成での手書き数字認識 |
SampleScenarioReg.ipynb |
回帰タスクのPoC |
SampleScenarioSound.ipynb |
音声処理のPoC |
SampleScenarioSoundAutoEncoder.ipynb |
音声オートエンコーダのPoC |
SampleScenarioSoundRecognition.py |
音声認識(スクリプト版) |
想定ユースケース
- RTL実装前の数値シミュレーション:FPGA/ASICへの実装前に、Pythonで精度や固定小数点演算の影響を確認する
- 共同PoC:パートナー企業・研究機関がSAMACTの演算特性を評価しながら、ユースケースを探索する
- 機械学習プロジェクトのプロトタイピング:エンドポイントAIを前提としたモデル設計の初期検証
弊社によるPoC支援について
「自社データで試してみたいが、社内にリソースがない」「まず動作イメージを掴みたい」といったご要望にお応えするため、お客様からデータをご提供いただき、弊社がPoCを実施するご支援も承っています。
ご相談は下記お問い合わせフォームよりお気軽にどうぞ。
リンク集
| リソース | URL |
|---|---|
| GitHub(サンプル・ドキュメント・フォーラム) | https://github.com/maviss-design/SAMACT |
| PyPI(パッケージ) | https://pypi.org/project/samact/ |
| APIドキュメント | https://maviss-design.github.io/SAMACT/ |
| 弊社Webサイト | https://maviss-design.com/ |
| お問い合わせ | https://maviss-design.com/contact/ |
ライセンス
AGPLv3 を採用しています。研究・検証目的での利用を歓迎しますが、商用利用や量産用途をご検討の場合は別途お問い合わせください。
おわりに
「軽量なエンドポイントAIのハードウェアIPを試してみたいが、いきなりRTLは敷居が高い」という方に気軽に触れてもらえるきっかけになれば嬉しいです。
質問・フィードバックは GitHub Issues にお寄せください。