さて、この記事は「Deep Learning フレームワークざっくり紹介 Advent Calendar 2017」の1発めとしてとりあえず、今あるディープラーニング用フレームワーク、その他関連ライブラリをざざざっと紹介しようという記事です。
より詳細は他の記事なんかを読んでもらうとして、ここではホントに、概要の概要(作者とか)とポインタ(URLとか)のみ紹介していきます。
※ ここ数ヶ月の、広く浅い動向調査を元に書いてます。もしかしたら間違いとかあるかもですが、その場合はコメントとかで教えてください。
では以降、処理の上の方から下の方まで順に、ざざっと。
Higher API
いわゆるディープラーニングフレームワークを更に抽象化して、Deep Neural Network(DNN)を簡単に書けるようにしたライブラリです。
- Keras
- by Francois Chollet, Google
- https://keras.io/ja/
- 主にTensorFlowを抽象化して、より簡単にDNNを扱えるようにしたライブラリ。TensorFlow 1.4から、TensorFlowの中にマージされました。
- TensorFlow, CNTK, Theano などのモデルを生成できます。
- Gluon
- by AWS, Microsoft
- https://github.com/gluon-api/gluon-api
- http://gluon.mxnet.io/
- https://mli.github.io/cvpr17/
- AWSとMicrosoftが作った、やはりDNNを簡単に書くためのライブラリです。現在はMXNetをターゲットにしていて、MXNetのライブラリの一部として公開されています。
- 本来静的ネットワークを書くMXNetを、動的ネットワーク構築(define by run)で書けるようにできるのが特徴です。
Framework
俗に言う、ディープラーニングフレームワークです。これ以上の説明は不要ですね。
- TensorFlow
- by Google
- https://www.tensorflow.org/
- これも説明は不要ですか。恐らく世界でもっとも良く使われているフレームワーク。本稿執筆時点で最新バージョンは1.4です。
- Chainer
- by Preferred Networks
- https://chainer.org/
- これもご存知、PFNが公開した日本製フレームワーク。日本では非常によく使われている印象ですが、国外では残念ながら、そこまで広くは使われていない感。
- ただし、おそらく動的ネットワーク構築(define by run)の手法を世界に普及させたフレームワークじゃないでしょうか。
- Caffe
- by Yangqing Jia, UC Barkeley
- http://caffe.berkeleyvision.org/
- 2013年ごろUCBで作られたフレームワーク。主に画像認識をターゲットとして作られたようです。
- 設定ファイルだけで動かせるなど、比較的お手軽に扱えるのが特徴。現在も根強い人気。
- Caffe2
- by Yangqing Jia, Facebook
- https://github.com/caffe2/caffe2
- Caffe作者のJiaさんがFacebookに移り、Caffeを更に発展させる形で開発されたライブラリ。
- Facebook内ではかなり使われているようですが、世間的には(Caffeに比べると)まだまだマイナーな印象があります。
- MXNet
- by ワシントン大学, CMU, AWS
- https://mxnet.incubator.apache.org/
- https://aws.amazon.com/jp/mxnet/
- ワシントン大学、CMUなどを中心に開発されたライブラリ。その後AWSが公式サポートを表明、現在はApacheプロジェクトになっています。
- Python, R, Julia, Go などなど、多言語でのバインディングがあるのが特徴。
- PyTorch
- by Adam Paszkeら, NYU, Facebook
- http://pytorch.org/
- かなり古いLua製フレームワークであるTorchと同じチームが提供している、Python製フレームワーク。
- Chainerをforkして作られたという話があり、Chainerと同じく define by run をサポート。相当柔軟に書けるらしい。筆者の周りでは人気高いです。
- The Microsoft Cognitive Toolkit (CNTK)
- by Microsoft
- https://www.microsoft.com/en-us/cognitive-toolkit/
- https://github.com/Microsoft/CNTK
- Microsoftご謹製フレームワーク。正式名称がCNTKじゃなくなっていると、筆者はこの記事を書く時点で初めて知りました。
- ぶっちゃけ、すごくマイナーなイメージ……
- Theano
- by Yoshua Bengio, モントリオール大学
- http://deeplearning.net/software/theano/
- ディープラーニング業界では有名な、Bengio教授の元で作られたPython向けフレームワーク。かなり古い。
- 一時代を築いたイメージのあるライブラリですが、今年になって、バージョン1.0リリースとともに開発の停止がアナウンスされました。
- neon
- by Intel Nervana
- https://www.intelnervana.com/neon/
- https://github.com/NervanaSystems/neon
- Intelに買収されたスタートアップNervanaが作ったフレームワーク。
- Intel Math Kernel Library (MKL)をターゲットにした最適化・高速化が特徴。また、後述するNervana Graphのフロントエンドにもなっています。
- NNabla (Neural Network Library)
- by Sony
- https://nnabla.org/
- https://github.com/sony/nnabla
- ソニーご謹製、日本発のライブラリ。ほぼC++で書かれているのと、Neural Network Console( https://dl.sony.com/ja/ )というGUIを通じて、コードを書かなくても、ビジュアルにDNNを設計できるのがウリ。
Graph IR
モデルを記述するための中間表現フォーマットです。普通は各フレームワークごとに独自のフォーマットを定めていますが、ここではフレームワーク独立な、標準フォーマットをご紹介。
- ONNX (Open Neural Network Exchange)
- by Facebook and Microsoft
- https://github.com/onnx/onnx
- FacebookとMSが提唱している標準フォーマット。最初に公式サポートされたのはPytorch、Caffe2、CNTK。これらのフレームワークのアウトプットをONNXを通じて相互にやりとりできたりします。
- 最近はIntel(Nervana)、AWSその他多数の企業が公式サポートを表明。ONNXからMXNet、TensorFlowへのインポートができるようになってます。
- 現在、最新版はどんどんアップデートされていて、仕様がどんどん変わっています。一般の人が安心して標準フォーマットとして使えるようになるには、まだ時間かかりそう。
- NNEF (Neural Network Exchange Format)
- by Khronos Group
- https://www.khronos.org/nnef
- OpenGLなどを定める標準化団体Khronos Groupが提唱する標準フォーマット。
- ただ現時点では、プレスリリースで表明されているだけで、実装や仕様書の類はまだ一切公開されてません。
- CoreML
- by Apple
- https://developer.apple.com/documentation/coreml
- https://github.com/apple/coremltools
- Appleが採用しているフォーマット。これに落とせば、iOS上にモデルを持っていくことができます。
- 本稿執筆時点で、Caffe, Kerasなどからインポートすることができるようです。
Backend stack
DNNモデルを読み込んで、最適化・高速化したり、様々なプラットフォームにデプロイしたりするためのライブラリ。着目してる人が少ない(Qiitaにも記事とかあんまりない)ですが、ここも色々なのが提唱されてます。
- TensorFlow XLA
- by Google
- https://www.tensorflow.org/performance/xla/
- TensorFlowモデルを高速化したりするためのバックエンド。
- 標準では更なるバックエンドとしてLLVMを採用していて、高速化したモデルをLLVMを通して色んなプラットフォームに展開できます。
- その気になればLLVMに変わるバックエンドをユーザが定義できて、なのでTensorFlowを独自拡張できます。
- NNVM/TVM
- by Tianqi Chen, ワシントン大学, CMU, AWS
- http://www.tvmlang.org/
- https://github.com/dmlc/nnvm
- https://github.com/dmlc/tvm
- MXNetを開発したChenさんらのグループが開発。DNNモデルを最適化した上、様々なプラットフォームに展開できます。
- 現在はMXNetの公式バックエンドとなっている模様。またONNX、CoreMLをサポートしているので、非常に沢山のフレームワークからモデルをインポートできます。
- Intel Nervana Graph
- by Nervana
- https://www.intelnervana.com/intel-nervana-graph/
- https://github.com/NervanaSystems/ngraph
- Intel Nervanaが開発しているバックエンド。当初はNervanaのフレームワークneonと、あとTensorFlowくらいしかサポートされていなかったようですが、最近ONNXを公式サポートする表明をしたりして、今後は様々なフレームワークからインポートできるようになる?なってる?ようです。
- TensorRT
- by NVIDIA
- https://developer.nvidia.com/tensorrt
- NVIDIAが開発している、DNNモデルの最適化エンジン。NVIDIAが作ってるだけあって、基本はNVIDIAのGPUがターゲット。
- Intel Deep Learning Deployment Toolkit
- by Intel
- https://software.intel.com/en-us/dl-deployment-tool-devguide-introducing-intels-deep-learning-deployment-toolkit
- Intelの提供するツールキットで、Caffe2などのモデルを小型化して、モバイルデバイスにデプロイできるようになるようです。
- PraidML
- by Vertex.ai (http://vertex.ai/)
- http://vertex.ai/blog/announcing-plaidml
- https://github.com/plaidml/plaidml
- https://github.com/plaidml/plaidbench
- Vertex.AI という会社が開発しているバックエンド。Kerasをフロントエンドとして、各種ベンダ製のGPUを搭載したPC(Windows/Linux/Mac)にデプロイできます。
おわりに
過去に書かれた同様の、フレームワーク一覧記事やリストがあるみたいなので、それを紹介しておきます。
(自分は特にこれらの記事を参考にせず、独自にまとめたんですが、いざ探してみるといっぱいあった……みんな思うところは一緒ですね……)
- Qiita記事
- その他
では!