DEEPDSL: A COMPILATION-BASED DOMAIN- SPECIFIC LANGUAGE FOR DEEP LEARNING
概要
- Deep Neural Networkを定義するためのDSLを定義。Javaコードへコンパイルできる
- メモリ消費の最適化や実行速度最適化、定義間違いの静的チェックが出来る
- ICLR2017 Poster
詳細
-
独自のDSL(scala)で宣言されたNNを、中間表現(Intermediate Representation, IR)に落とした上で最適化してJavaコードへ変換
-
IRは手続き型の表現。計算グラフに関するものだけでなく、メモリ確保などの命令も現れているところが特徴的
- RNNのような、動的に形が決まるため静的最適化しづらいものをどう扱っているか気になったが、特に言及がなかった
-
コンパイル時最適化については基本的なものしかやっていなさそう
- メモリをバッファリングし、解放・再確保のロスを減らす
-
生成されたコードは可動性が高く、その後のカスタマイズも容易。
性能
AlexNet, Overfeat, Googelenet, Vgg, ResNetについて、 DeepDSL, Caffe, Tensorflowで比較
- 1iterationあたりの速度は、OverfeatとVggではTensorflowに僅かに劣るが、他では早い。
- メモリ消費量はDeepDSLのほうが少ない。とくにResNet64では、CaffeとTensorflowはOoMで動かせない