Vengineerの妄想

人生を妄想しています。

MLIR(TensorFlow)やRelay(TVM)を使っても、変わらない。。

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

LLVMの中のMLIR と TensorFlowの中のMLIR(TensorFlow/XLA/Lite)

そして、Relay+TVM のソースコードRelayの論文 をお正月明けの先週末(4日と5日)に眺めて、考えたんだけど、

ハードウェア側から見ると、あんまり変わらないことが分かった。

GEMMのためのハードウェアはみんな似ているので、入力とパラメータをどのように突っ込んで、その結果をどのように引き出すかが微妙に違うだけ。

ソフトウェアであっても、ハードウェアに近い部分は一般的には公開されていないもの。Glowにある Habana (Intelに買収された)や Intel NNP-I のコードの中を覗いてみても、それぞれのSDKの中にある API にあわせてモデルを再構築しているだけ。

TensorFlowでも、PyTorchでも同じで、それそれのSDKAPIにあわせてモデルを変換しているだけ。

MLIRは、モデル変換が大変だから、LLVMのように大変じゃないようにしましょうという観点で出てきたのだと思っています。

となると、

ハードウェアに近い部分って、どうすれば、大変じゃないようになるのかな?

規模が小さいものであれば、FPGAを使ったプロトタイプでいろいろと試すことができると思います。じゃ、どんな道具を使えばいいのか?

他に何かあるか? 

あたしが気になっているのは、イケメンのお兄さんの NNGen です。

github.com

この NNGen は、

A Fully-Customizable Hardware Synthesis Compiler for Deep Neural Network

なのですが、工夫すれば、もっといろいろなことが出来そう。

これに、XilinxのSDSoCで自動生成している CPU <=> FPGA 間のデータ移動ができるようになれば、かなり楽ちん。

 

しかし、

NNGenで生成したVerilog HDLをFPGAマッピングするのに結構時間がかかる。

これは、なかなか解決しない問題かな。。。

対策は、SWエミュレータを使うというのがあるが、アクセラレートするぐらい遅い処理をSWエミュレータで実行したら、もっと遅くなっちゃうんだよね。どうにかならないかな。。。

 

それから、XilinxのVasalの、

  • CPU(Correx-A72x2)
  • AIエンジン
  • DSPエンジン
  • FPGA

の各ハードウェアにマッピングできるようなシステムを作って遊ぶのもかなり面白そうね。何時頃できそうかな。。。