tkato’s blog

ブログ名は暫定。

SonyのDNNフレームワーク"NNabla"を調べてみた

SonyがNNablaというDeepLearningフレームワークを公開しました*1
興味があったので、ドキュメントとソースを読みながら、全体を眺めてみました。
よく見ると標準でBinaryConnectのサポートやBinary Neural Network(BNN)のサンプルがあったり、興味深いです。

NNablaのコンセプト

公式サイトに記載のあるコア・コンセプトのようなもの

https://nnabla.org/

  • Write less do more
    • コードを直感的に短く書ける
  • Dynamic computation graph support
    • ChainerやPytorchのような動的なモデル構築
  • Run anywhere
    • 色々なプラットフォームで動くように開発
  • Device ready
    • ライブラリのコアはC++11で書かれているので、組み込み機器にも乗せられる
  • Easy to add a new function
    • 少ないコーディングで機能追加できるよう、うまいこと設計してる
  • Multi-target device acceleration as plugin

NNablaを使っているプロダクト

NNablaは、ソニーグループのプロダクトでも使われていると記載がある

Xperia EarとDPT-RP1は、想像だけどデバイス側でNNablaが動いてるんだろうな。
すでに組み込み製品でも実用的に動いているなら、ライブラリを導入する側として安心。
そしてDPT-RP1ほしい…

ドキュメントとTutorial

ドキュメントが丁寧な印象。大企業っぽい(?)

特に入門向けのTutorialやサンプルコードは以下

その他、まとめきれなかったこと

眠いのでまた後日ブログ書きますが、特に印象に残ったことは以下。

  • Binary Neural Networkの部品を標準でサポートしてるってアツい
  • VariableやFunctionなど、概念がChainerに似ていて私はとっつきやすい
    • 記述量少ないけど、抽象化されすぎてなくて適度な印象
  • ドキュメントが丁寧な印象
  • コアはC++11で書かれていて、CythonでラップしてPython APIを提供している
    • C++APIも直接使える(まだドキュメントはないけど)
    • あとでコア実装読もう。
  • DataIterator
  • 静的 or 動的なモデル構築両方に対応
    • 基本静的で、動的に構築する場合は、Auto-forward modeを有効にするっぽい。
    • グローバルな状態を管理して、ごにょごにょしてる
  • 名前空間
  • LoggerモジュールやMonitorモジュールが地味に嬉しい。Utility系もそこそこ充実
  • Extensions
  • パラメータなどグローバルに状態をもつものをいるので、注意

今後

やってみたいこと、しらべたいこと