コンパイラの仕様
Actdk によるコンパイル
actdk compile を実行すると model.h と model.py と libmodel.so (OS3 以前用), libmodel_64bit.so (OS4 用) が作成されます。
libmodel_64bit.so は target_types に raspberrypi-bookworm が指定されている場合にのみ作成されます。Act 内では libmodel.so にリネームされてコピーされます。
libmodel.so, libmodel_64bit.so は nnoir ファイルで表現される深層学習モデルを実行するための共有ライブラリです。
model.h、model.pyはそのインタフェースです。
model.h
関数名は nnoir ファイル内に定義されている訓練済みモデルの名称がそのまま利用されます。 他の深層学習フレームワークに依存しない通常の C 関数として実装されています。
もしmodelディレクトリに複数の nnoir ファイルが存在する場合、それぞれに対しエントリポイントとなる関数が生成されます。
複数の nnoir ファイルをmodelディレクトリ以下に配置して変換する場合、
同一名称を持つ訓練済みモデルが定義された nnoir ファイルを複数配置すると変換できません。
入力の型は元々の計算グラフの入力と同等ですが、float の 1 次元配列になります。
制限事項
actdk compileで生成されたlibmodel.so, libmodel_64bit.soはスタブコードであるため, 以下の制限があります:
- 並列実行時の結果は保証されません。
- Raspberry Pi の GPU を利用した高速化は施されません。
ビルドイメージのアップロード後、libmodel.soは再ビルドされ、Raspberry Pi の GPU を利用するものに差し替えられます。
差し替えられたlibmodel.soは排他制御されるため並列実行時の結果は保証されます。
model.py
model.pyは Python からlibmodel.soを利用するためのインタフェースを提供します。
エントリポイントの入出力は numpy の配列で、形状は nnoir 生成時の多次元配列形状が保持されます。
Actcast のビルドサーバによるコンパイル
アップロードしたビルドイメージは Actcast にて再ビルドされ、libmodel.soが高速なものに差し替えられます。