@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でも同じで、それそれのSDKのAPIにあわせてモデルを変換しているだけ。
MLIRは、モデル変換が大変だから、LLVMのように大変じゃないようにしましょうという観点で出てきたのだと思っています。
となると、
ハードウェアに近い部分って、どうすれば、大変じゃないようになるのかな?
規模が小さいものであれば、FPGAを使ったプロトタイプでいろいろと試すことができると思います。じゃ、どんな道具を使えばいいのか?
他に何かあるか?
あたしが気になっているのは、イケメンのお兄さんの NNGen です。
この NNGen は、
A Fully-Customizable Hardware Synthesis Compiler for Deep Neural Network
なのですが、工夫すれば、もっといろいろなことが出来そう。
これに、XilinxのSDSoCで自動生成している CPU <=> FPGA 間のデータ移動ができるようになれば、かなり楽ちん。
しかし、
NNGenで生成したVerilog HDLをFPGAにマッピングするのに結構時間がかかる。
これは、なかなか解決しない問題かな。。。
対策は、SWエミュレータを使うというのがあるが、アクセラレートするぐらい遅い処理をSWエミュレータで実行したら、もっと遅くなっちゃうんだよね。どうにかならないかな。。。
それから、XilinxのVasalの、
の各ハードウェアにマッピングできるようなシステムを作って遊ぶのもかなり面白そうね。何時頃できそうかな。。。