研究を加速するChainerファミリー
株式会社Preferred Networks
比戸将平 岡田真太郎
でも、深層学習フレームワークだけあればいいの?
CoreML
TVM / NNVM
● どのフレームワークもおなじ?
● MNISTサンプルを走らせたら終わり?
実装が様々なフレームワーク・APIにちらばっていてユーザー泣かせ
● ディープラーニングの進歩に利用APIの整備共通化が追いつかずまだ使いづらい
● (参考)scikit-learn: 様々な機械学習アルゴリズムを共通のAPIで利用可能
DLフレーム
ワーク
X
DLフレーム
ワーク
Y1.0
アルゴリズムA
DLフレーム
ワーク
Y2.0
アルゴリズムB
アルゴリズムC
scikit-learn
アルゴリズムA
アルゴリズムB
アルゴリズムD
アルゴリズムA’
アルゴリズムB’
アルゴリズムE
決定木
Logistic回帰
線形SVM
カーネルSVM
ナイーブベイズ
Bagging
AdaBoost
GradientBoost
RandomForest
学習: fit() 予測: predict()API 共通API
拡大するChainerファミリー:
Chainer UI
Chainer
Chemistry
強化学習
画像認識
可視化
グラフ構造
大規模分散
Menoh
本日発表
アジェンダ
● ChainerCV: 画像認識
● ChainerRL: 深層強化学習
● Chainer Chemistry: グラフ構造
● Chainer GAN lib: Generative Adversarial Networks
● ChainerUI: モニタリングUI
● ChainerMN: 分散深層学習
● Menoh: ONNXモデルの推論エンジン
ChainerCV: 画像認識ライブラリ
● https://github.com/chainer/chainercv
● 1行サンプル実行で学習済みモデルを自動ダウンロードしてを予測結果を描画
ChainerCVの意義: 全ての画像認識タスクに共通する部分の負担を大幅に軽減
1. 自分のモデルを
標準データで評価
データセット
Pascal VOC, Caltech-
UCSD Birds-200-
2011, Stanford Online
Products, CamVid,
etc.
モデル
Faster R-CNN, SSD,
SegNet (順次追加)
学習ツール評価ツール
データセット
抽象化
2. 標準モデルを
自分のデータで学習
実際のChainerCVコード
● ChainerCVを使えば
– 実質10数行で書ける
● ChainerCVが無かったら?
– アルゴリズム実装する or 探してくる
– データセットをダウンロードして読み込んで前処理
– モデルを学習する or 学習済みモデルを探して読み込む
– テストデータに対して予測を行う
– 描画スクリプトを書く
ChainerCV: 標準的アルゴリズムを「精度も含めて」再現
● タスクとアルゴリズム
– 画像分類 (ResNet, VGG)
– 物体検出 (Faster R-CNN, SSD, YOLO)
– セマンティック・セグメンテーション (SegNet, PSPNet)
– インスタンス・セグメンテーション (FCIS)
● 元論文と同等精度を達成することを確認
Faster R-CNN SSD
ベンチマークデータセットと前処理のサポート
● 例:画像単位の前処理(主にdata augmentation)
– center_crop
– flip
– pca_lighting
– random_crop
– random_expand
– random_flip
– random_rotate
– random_sized_crop
– resize
– resize_contain
– scale
– ten_crop
● 例:利用可能データセット
– ADE20K
– CamVid
– Cityscapes
– CUB
– OnlineProducts
– PASCAL VOC
– Semantic Boundaries Dataset
各アルゴリズムの実行結果
アジェンダ
● ChainerCV: 画像認識
● ChainerRL: 深層強化学習
● Chainer Chemistry: グラフ構造
● Chainer GAN lib: Generative Adversarial Networks
● ChainerUI: モニタリングUI
● ChainerMN: 分散深層学習
● Menoh: ONNXモデルの推論エンジン
ChainerRL: 深層強化学習ライブラリ
● https://github.com/chainer/chainerrl
● 深層強化学習の応用例
– ゲームプレイ(ATARIゲーム、囲碁)
– シミュレーション
– ロボット制御
● 最近の人工知能応用のかなりの部分に関係(例:AlphaGo)
x
Reinforcement Learning
強化学習
ロボット制御
ゲームプレイ
ChainerRLの基本的な使い方
● 1. 環境(問題)を定義
● 2. エージェントをモデル化
● 3. エージェントを作成
● 4. エージェントの学習
アクション
環境
観測、報酬 エージェント
多くの最新アルゴリズムを網羅(DQN、A3C、TRPO、PPO…)
• A3C (Asynchronous Advantage Actor-Critic)
• ACER (Actor-Critic with Experience Replay)
• Asynchronous N-step Q-learning
• Categorical DQN
• DQN (including Double DQN, etc)
• DDPG (Deep Deterministic Poilcy Gradients)
• PGT (Policy Gradient Theorem)
• PCL (Path Consistency Learning)
• PPO (Proximal Policy Optimization)
• TRPO (Trust Region Policy Optimization)
環境(問題)の定義の仕方: OpenAI Gymのインタフェースに対応
● シンプルなGymインタフェース
– env.reset()
– env.step(action)
● 多種多様な強化学習問題が定義可能
– アクション、状態変化、報酬…
https://gym.openai.com/envs/
ChainerRLの始め方
● 制御の古典的問題(倒立振子)を深層強化学習アルゴリズムDQNで解くタスク
● https://github.com/chainer/chainerrl/blob/master/examples/quickstart/quickstart.ipynb
● データ解析に必要なものが全てパッケージング(Windows/Linux両対応)
– 分析:開発環境 / データ基盤 / 機械学習ツール
– GPUサポート:CUDA / cuDNN
– DL:フレームワーク / 関連ツール
ChainerおよびCV/RLはAzure Data Science VMにプリインストール済み
https://azure.microsoft.com/en-us/services/virtual-machines/data-science-virtual-machines/
アジェンダ
● ChainerCV: 画像認識
● ChainerRL: 深層強化学習
● Chainer Chemistry: グラフ構造
● Chainer GAN lib: Generative Adversarial Networks
● ChainerUI: モニタリングUI
● ChainerMN: 分散深層学習
● Menoh: ONNXモデルの推論エンジン
Chainer Chemistry: グラフ構造における深層学習ライブラリ
● https://github.com/pfnet-research/chainer-chemistry
通常の画像向けの畳込みニューラルネットワーク
グラフ向けの畳込みニューラルネットワーク(Graph Convolution)
• 画像分類
• 物体検出
• セグメンテーション
• 化学物質の性質
• 例:化合物の毒性
• 材料の性質
Chainer Chemistryのサポート
● 実装済みアルゴリズム
– NFP: Neural fingerprint
– GGNN: Gated Graph Neural Network
– WeaveNet
– SchNet
– RSGCN: Renormalized Spectral Graph Convolutional Network
● ベンチマークデータセット
– QM9
– Tox21
– MoleculeNet
● (参考)Preferred Networksは深層学習を用いた
阻害活性予測コンテストでIPAB賞を受賞
– →その成果をChainer Chemistryとして公開
アジェンダ
● ChainerCV: 画像認識
● ChainerRL: 深層強化学習
● Chainer Chemistry: グラフ構造
● Chainer GAN lib: Generative Adversarial Networks
● ChainerUI: モニタリングUI
● ChainerMN: 分散深層学習
● Menoh: ONNXモデルの推論エンジン
Chainer-GAN-lib: Generative Adversarial Network特化ライブラリ
● https://github.com/pfnet-research/chainer-gan-lib
http://corochann.com/cifar-10-cifar-100-dataset-introduction-1258.html
CIFAR-10データセット
ProgressiveGANの生成した画像
Chainer-GAN-libのサポート範囲
● 実装済みアルゴリズムと評価値(公式の値との比較)
Progressive Growing of GANs for Improved Quality,
Stability, and Variation [Karras+, 2017]
アジェンダ
● ChainerCV: 画像認識
● ChainerRL: 深層強化学習
● Chainer Chemistry: グラフ構造
● Chainer GAN lib: Generative Adversarial Networks
● ChainerUI: モニタリングUI
● ChainerMN: 分散深層学習
● Menoh: ONNXモデルの推論エンジン
ChainerUI: 可視化・実験管理ライブラリ
● https://github.com/chainer/chainerui
● 各種学習状況のモニタリング
– 経過時間
– エポック数
– 訓練ロス・精度
– 検証ロス・精度
● ハイパーパラメータの変更
– 学習率の変更
● スナップショット管理
– 例:数エポック毎に保存
アジェンダ
● ChainerCV: 画像認識
● ChainerRL: 深層強化学習
● Chainer Chemistry: グラフ構造
● Chainer GAN lib: Generative Adversarial Networks
● ChainerUI: モニタリングUI
● ChainerMN: 分散深層学習
● Menoh: ONNXモデルの推論エンジン
ChainerMN: モデル学習高速化のための分散深層学習ライブラリ
● https://github.com/chainer/chainermn
GPU
GPU
InfiniBand
GPU
GPU
InfiniBand
MPI
NVIDIA NCCL
All-
Reduce
Forward
Forward
Forward
Backward
Backward
Backward
Optimize
Optimize
Optimize
ChainerMNの基本的な使い方
● OptimizerをCommunicatorでラップするだけ
● ChainerMNが内部でAll-Reduceのための通信処理を実行
optimizer = chainer.optimizers.MomentumSGD()
comm = chainermn.create_communicator(‘hierarchical’)
optimizer = chainermn.create_multi_node_optimizer(
optimizer, comm)
ChainerMNのAzure環境における分散性能:128GPUまでほぼ線形に速度向上
● NC24rs_v2 (P100) x 32 nodes = 128 GPUs
ChainerMNの効果: 試行錯誤ループを簡単にすることで研究開発をスピードアップ
● 1024GPUによってImageNet学習を15分で完了(世界記録) [Akiba, Suzuki, Fukuda, 2017]
0
10
20
30
40
50
60
70
Goyal et al.
(Facebook)
Codreanu et al. Cho et al.
(IBM)
You et al. Akiba et al.
(This work)
Time[min]
Training time of ResNet-50 (90 epochs) on ImageNet-1K
62min.
60min.
誤解: ChainerMNはInfiniBand前提だからイーサネットでは性能が出ない?
● →Chainer v4.1 & ChainerMN v1.3以降をお使い下さい!
● 追加機能1: Double bufferingで通常のイーサネット環境でも高い分散性能
– 1ステップ古い勾配を利用してモデル計算を同時に行い通信遅延を隠蔽
● 追加機能2: FP16 All-Reduce: 半精度浮動小数点数を利用し通信量を半減
5/25リリース
Infinibandの無い環境におけるImageNet学習速度の向上
512
1024
2048
4096
8192
8 16 32
Samplespersecond
#GPUs
InfiniBand
10 Gb イーサネット
10 Gb イーサネット + Double
Buffering + FP16 Allreduce
● 10GbイーサネットにおいてもInfiniBand+FP32時と遜色ない学習速度
● FP16と1ステップ古い勾配を用いることによるモデル精度への影響は微少
モデル精度76.4%
モデル精度75.8%
モデル精度76.4%
5/25リリース
アジェンダ
● ChainerCV: 画像認識
● ChainerRL: 深層強化学習
● Chainer Chemistry: グラフ構造
● Chainer GAN lib: Generative Adversarial Networks
● ChainerUI: モニタリングUI
● ChainerMN: 分散深層学習
● Menoh: ONNXモデルの推論エンジン
Menoh公開:CPU向けのコンパクトなONNXモデル推論エンジン
● Chainer等で学習・保存したONNXフォーマットのモデルを読み込み可能
● MKL-DNN対応でインテルCPUにおける高速な推論を実現
● C++実装 & 多言語ラッパーによりエッジを中心に多様な環境に対応
https://github.com/pfnet-research/menoh
Menoh
(参考) ONNXとONNX-Chainer: Chainerで学習したモデルを広く活用するために
37
https://github.com/chainer/onnx-chainer
学習済み
モデル出力
message ModelProto {
optional int64 ir_version = 1;
:
optional GraphProto graph = 7;
};
message GraphProto {
repeated NodeProto node = 1;
optional string name = 2;
repeated TensorProto initializer = 5;
optional string doc_string = 10;
repeated ValueInfoProto input = 11;
repeated ValueInfoProto output = 12;
repeated ValueInfoProto value_info = 13;
}
message TensorProto {
repeated int64 dims = 1;
optional DataType data_type = 2;
optional Segment segment = 3;
repeated float float_data = 4 [packed = true];
:
optional string name = 8;
}
message NodeProto {
repeated string input = 1;
repeated string output = 2;
optional string name = 3;
optional string op_type = 4;
repeated AttributeProto attribute = 5;
optional string doc_string = 6;
}
Node
Tensor
Tensor
Open Neural Network Exchange Format:
学習済みモデルの標準フォーマット
Menohの構成: MKL-DNNの多言語ラッパーとしてのCoreと各言語バインディング
38
Intel CPU
MKL-DNN
ideep Menoh core
Chainer (Python)
NumPy
C++
C#
Haskell
JVM
Ruby
BLAS
Menohの推論性能: CPU版Chainerより6倍、iDeep対応Chainerより2倍高速
● VGG16モデルの平均推論時間(ミリ秒/画像、バッチサイズ=1)
● Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz、メモリ8GB
39
Menohの多言語サポート
● 本日同時公開
● C++: https://github.com/pfnet-research/menoh (コアに同梱)
● C#: https://github.com/pfnet-research/menoh-sharp
● Haskell: https://github.com/pfnet-research/menoh-haskell
● Hackage - http://hackage.haskell.org/package/menoh
● 近日公開予定
● Ruby
● JVM
● Node.js
40
Menoh core
C++
C#
Haskell
JVM
Ruby
まとめ
Menoh
● Chainerは研究開発の効率を第一に考えたディープラーニングフレームワークであり、
Chainer Familyによってユーザーはやりたいことをすぐ始められます
● ChainerCVやChainerRL等の分野特化ライブラリは最新の標準手法をサポートします
● ChaineMNはニューラルネットワークの分散学習で世界最先端を行くことで
Chainerユーザーの試行錯誤スピードの向上をもたらします
● MenohはPython以外の環境での学習済みモデル活用の道を開きます

研究を加速するChainerファミリー