kraiskil/onnx2c

Open Neural Network Exchange to C compiler.

何を解決するか

Onnx2c は ONNX モデルを純粋な C コードに変換するコンパイラであり、マイクロコントローラー(TinyML)上でニューラルネットワークの推論を実行可能にします。通常、組み込みシステムではリソースが限られているため、重いランタイムライブラリや動的メモリ割り当てに依存するのを排除します。

動作方法

このツールは ONNX ファイルを読み取り、モデルの論理と重みを含む単一の C ファイルを生成します。マイクロコントローラーとの互換性を確保するために、コンパイル時バッファ割り当てを使用し、stdio.h などの標準 I/O ライブラリを避けています。また、メモリの再利用を目的としたテンソルのユニオン化などの最適化パスや、AVR プロセッサ向けの特定最適化(定数を命令メモリに格納)を含んでいます。

対象ユーザー

PyTorch や TensorFlow などのフレームワークからエクスポートされたトレーニング済みニューラルネットワークを、フル ML ランタイムのオーバーヘッドなしに実行したい、マイクロコントローラーや組み込みシステムで開発している開発者向けです。

特徴

  • 動的割り当てゼロ: コンパイル時バッファを使用して、小さなデバイスでのヒープフラグメンテーションやクラッシュを回避します。
  • C 標準互換性: 標準 C 数学ライブラリのみを必要とし、さまざまな C コンパイラ間で非常にポータブルです。
  • TinyML 向け最適化: エンベッドドプロジェクトに簡単に統合できる単一の C ファイルを生成します。
  • 対称的サポート: GCC および Clang の拡張機能を活用して、float16 および bfloat16 データ型をサポートします。
  • メモリ効率: 定数テンソルを const としてマークすることで、フラッシュメモリに保持し、RAM 使用量を削減する最適化を含んでいます。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト