DeepFreezeは、PPAのモデリングとFixynnプロジェクトのRTLを生成するために使用されるツールです。 TensorflowグラフからRTLを生成し、その設計を合成/シミュレートするために、スクリプトが含まれています。非テンソルフローグラフを使用するには、独自のレイヤーデータ構造を記述して、Veriloggeneratorオブジェクトにフィードする必要があります( gen_verliog.py
の最後の使用などを参照)。
ContextのDeepFreezeの説明を含むFixynnの詳細については、次の論文を参照してください。Fixynn:転送学習によるモバイルコンピュータービジョンの効率的なハードウェア。
このツールは、Python 2.7.15およびTensorflow 1.10.1を使用して構築およびテストされました。
必要なPythonパッケージはNumpyとTensorflowです。インストールするには:
pip install numpy tensorflow
cd deep_freeze/
bash run.sh
RTL生成またはモデリングのモデルを追加するには、次のことを提供する必要があります。
mobilenet_base
が返すように))固定ネットワーク内の各レイヤーは、生成されたVerilogモジュールまたは手書きモジュールのパラメーターインスタンス化のいずれかによって定義されます。訓練可能な変数を備えたレイヤーが生成され、他のすべてがインスタンス化されます。トレーニング可能な変数は、可変精度でRTLにハードコーディングされ、固定されたスカラーとして合成された設計に実装されています。代わりに、プログラム可能なアクセラレータのMACユニットで伝統的に実装されていたものは、固定されたスカラーで構成され、その後に固定重量設計でろうキャンダーツリーが続きます。これは非常に効率的ですが、大きなシリコン領域が必要です。シリコン領域は、固定変数のnuberでほぼ直線的に成長します。
固定データパスの高い利用を実現するために、完全にパイプライン層を一緒にレイヤーします。これには、レイヤー間のバッファリングが必要です。ラインバッファーを使用することにより、レイヤーのすべてのアクティブ化をバッファリングすることを避けることができます。この記事では、どのラインバッファーと使用方法がどのように使用されるか基本的な説明を提供します。
ラインバッファーの実装は、SRAMバッファーとレジスタバッファーの2つの部分で構成されています。 SRAMは、一度に(次のカーネルの高さに等しい)、コンサミングする必要があるだけの数の行のアクティベーションを保存します。レジスタバッファーはSRAMバッファーに従い、次のMXNカーネルのMXNアクティベーションを保存します。これにより、SRAMバッファーから不要な読み取りが排除されます。
レイヤーに必要なSRAMサイズはIM_HEIGHT * IM_WIDTH * NCHANNELS * NBITS
です。これはIM_HEIGHT * IM_WIDTH
size NCHANNELS * NBITS
に分かれています。レジスタバッファサイズはK_HEIGHT * K_WIDTH * NCHANNELS * NBITS
です。
ハードウェアの修正レイヤーは、さまざまな積極的な最適化(モデル設計におけるハードウェアの最適化と最適化の両方)の機会を提供します。
ネットワークアーキテクチャの改善により、ハードウェアPPAの改善が発生する可能性があります。たとえば、深さごとの分離可能な層は、8〜9倍の重量が少ない従来の畳み込み層と同様の精度を達成することができます。これらのレイヤーは、エリアコストの削減により、Fixynnで非常によく機能します。モデルサイズを削減したり、精度を向上させる他の手法は、Fixynnに利益をもたらす可能性があります。
ウェイトをシリコンに固定することで、特定の値の複雑さを減らすことで利益を得ることができます。ゼロ値の重みは一例です。オーバーヘッドなしでハードウェアから明示的に削除できます。これにより、剪定は特に強力で魅力的になります。
また、ハミングウェイトが低い値、つまりバイナリ表現のゼロ以外のビットの数は、固定ハードウェアに実装するのが安価です。これは、固定されたスカラーが一連のシフトと追加として実装されるためです。固定された乗数の非ゼロビットが少ないほど、必要なシフトと追加の追加が少なくなります。合成ツールは、数を表すために必要なビットの総数に対して、ハミング重量が高い値を持つ値の値を利用することもできます。たとえば、スカラーx * 239
(ハミング重量= 7、nbits = 8)は、ハードウェアでx << 8 - x << 5
として実装できます。
高解像度の画像の場合、ラインバッファーの各行には、SRAMの重要な領域が必要です。一度にラインの分数のみをバッファリングし、画像をいくつかパスすることにより、このSRAMの一部を排除できます。これは、制御ハードウェアの増加と、ラインバッファー範囲の境界上のアクティベーションの冗長な計算を犠牲にします。固定重量ハードウェアは非常に効率的であるため、この冗長計算にはエネルギーとレイテンシの最小コストが発生します。
1x1カーネルは、前のレイヤーによって生成された活性化を直接消費できるため、バッファーを前処理する必要はありません。これにより、深さ回転と点ごとの畳み込みの間のバッファリングは必要ありません。したがって、これらの2つの操作を1つのカンビネーションブロックに融合する場合があります。
CONV2Dレイヤーは、この設計で効果的です。なぜなら、それらは高い重量の再利用を示すため、面積コストが比較的低くなるからです。高密度の層は、体重の再利用を示しません。したがって、密な層により、面積が非常に非効率的な使用が得られます。さらに、高密度の層ではラインバッファリングが許可されていないため、非常に大きなレジスタエリアになります。
SYSML 2019( sysml_2019/
を参照)の作業では、完全に固定されたCNN特徴抽出器を探ります。その特徴抽出器のPPAは、CONV2Dレイヤーのみが含まれているため、素晴らしいです。固定ハードウェアに実装されているネットワーク全体が、密集した層の要求があるエリアコストを支払う必要があります。これは、小さなIoTモデルでは受け入れられる可能性があります。
CNNSは通常、フロントエンド層に多くの入力ピクセルと少数のカーネルがある動作を示しますが、バックエンド層の入力ピクセルと多数のカーネルは少なくなります。これにより、SRAM領域がネットワークパイプラインの前面に向かって集中し、組み合わせエリアはネットワークパイプラインの背面に向かって集中します。
1x1を超えるストライドのあるレイヤーは、画像ごとに消費するよりも少ないアクティベーションピクセルを生成します。たとえば、100x100の画像で2x2を伸ばすプール2Dレイヤーは、50x50の画像を生成します。これはピクセルが4倍減少します。これにより、アクティブサイクルの数が1/4倍のレイヤーが次の結果になります(レイヤーあたりの各出力ピクセルには1サイクルが必要です)。これは、多くのダウンサンプリングを備えた非常に深いネットワークパイプラインが、フロントエンドレイヤーによって大きくボトルネックされ、バックエンド層の利用が少ないことを意味します。
この洞察は、ハードウェアによく変換されるモデルを選択するのに役立ちます。特定のアーキテクチャは、(モデルサイズのコストで)Macの総数を減らすことにより、CPUの遅延を減らすために活性化の早期ダウンサンプリングを実行します(FD-MobileNetを参照)。 Fixynnで実装されたモデルは、反対のトレードオフを行いたいと考えています。計算コストでパラメーターの数を減らすことを望んでいます(領域が実際のシステムでのパフォーマンスの主な制限です)。
ハードウェアでCNNの一部を修正すると、他の目的のためにそのハードウェアを再利用することが困難になります。 SYSML 2019の私たちの仕事は、このトレードオフを探り、ある量の固定ハードウェアが多くの異なるモデルに一般化できることを示しています。将来の作業では、プログラマ性を追加することにより、固定ハードウェアの一般化をさらに改善することに焦点を当てます(固定重量ハードウェアの効率の恩恵を受けます)。
sram_controller.sv
を変更して、 SAME
パディングのサポートを追加しますflatten.sv
を実装して、2Dレイヤーから密な層に画像を平らにすることにより、完全に固定された画像分類ネットワークを有効にします。ker_size
のデータがSRAMに書き込まれると、アクティベーションの消費を開始します。このツールを利用した公開された作品は、SYSML 2019およびNeurips 2018 On-Device MLワークショップで発表されています。完全な論文は、Fixynn:移動学習によるモバイルコンピュータービジョンの効率的なハードウェアのArxivで見つけることができます。
このDeepFreezeがあなたの研究に役立つと思う場合は、次のBibtexを使用して私たちを引用してください。
@article{fixynn,
title={FixyNN: Efficient Hardware for Mobile Computer Vision via Transfer Learning},
author={Whatmough, Paul and Zhou, Chuteng and Hansen, Patrick and Venkataramanaiah, Shreyas Kolala and Seo, Jae-Sun and Mattina, Matthew},
journal={SysML},
year={2019}
}
パトリック・ハンセン、アームMLリサーチラボ、ボストン、マサチューセッツ州
アリゾナ州立大学のシュレイヤス・コララ・ベンカタラマナイア
Paul Whatmough、ARM ML Research Lab、ボストン、マサチューセッツ州
このプロジェクトは、MITライセンスに基づいてライセンスされています。詳細については、ライセンスファイルを参照してください。