20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

55
Chainerで加速する深層学習と フレームワークの未来 Preferred Networks 海野 裕也 1

Transcript of 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

Page 1: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

Chainerで加速する深層学習とフレームワークの未来

Preferred Networks 海野裕也

1

Page 2: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

自己紹介

海野裕也

-2008 東大情報理工修士,自然言語処理

2008-2011 日本アイ・ビー・エム(株)東京基礎研

2011-2016 (株)プリファードインフラストラクチャー

2016-(株)プリファードネットワークス 自然言語処理、機械学習、テキストマイニング

ChainerやCuPyなどのOSS開発

機械とのコミュニケーションの研究開発

NLP若手の会

「オンライン機械学習」(2015, 講談社)

「深層学習による自然言語処理」(2017, 講談社)

2

Page 3: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

http://chainer.org/

3

Page 4: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

Chainerの目標

高い自由度で直感的に記述できる

十分に高速に実行できる

容易にデバッグできる

社内の深層学習の研究開発を加速させる世の中

4

Page 5: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

Chainer開発時のフレームワークの状況

旧 新

5

Page 6: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

深層学習研究者・エンジニアがすること

1. ネットワークを考案 2. ネットワーク定義を記述

3. データを用意4. 計算機で最適化

フレームワークが担当する所6

Page 7: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

深層学習フレームワークがやるべきこと

どのようにネットワーク定義を記述するか

複雑なモデルを簡単に記述するには?

定義の間違いを防ぐには?

デバッグするには?

どのように最適化するか

自動微分(誤差逆伝播)と最適化ルーチンを提供

いかに高速・省メモリで実行するか?

7

Page 8: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

ニューラルネットワーク=計算グラフ

ネットワーク定義さえできれば誤差逆伝播によって学習は

自動化される

x matmul a

W

+

b

ŷ MSE l

y

l = MSE(matmul(x, W) + b, y)

8

Page 9: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

計算グラフの作成戦略 define-and-runとdefine-by-run

define-and-run(静的グラフ)

ネットワーク定義と計算実行の2ステップに別れる

Caffe, theano, TensorFlowなど

define-by-run(動的グラフ)

計算実行のコード自体がネットワーク定義を兼ねる

Chainer, DyNet, PyTorchなど

9

Page 10: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

擬似コードで比較する

define-and-run

# ネットワーク定義

x = Variable(‘x’)

y = Variable(‘y’)

z = x + 2 * y

# 計算

for xi, yi in data:

eval(z, (xi, yi))

define-by-run

# 定義と計算が同時

for xi, yi in data:

x = Variable(xi)

y = Variable(yi)

z = x + 2 * y

データを見ながら違う処理をしてもよい

10

Page 11: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

デバッグのしやすさで比較する

define-and-run

# ネットワーク定義

x = Variable(‘x’)

y = Variable(‘y’)

z = x + 2 / y

# 計算

for xi, yi in data:

eval(z, (xi, yi))

define-by-run

for xi, yi in data:

x = Variable(xi)

y = Variable(yi)

z = x + 2 / y

実行時エラーと定義の対応が取りづらい

エラーはただちに確認できる

11

Page 12: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

デバッグコードで比較する

define-and-run

x = Variable(‘x’)

y = Variable(‘y’)

w = 2 * y

w = PrintNode(w)

z = x + w

define-by-run

for xi, yi in data:

x = Variable(xi)

y = Variable(yi)

w = 2 * y

print(w)

z = x + w

特殊なノードを追加 ただのPythonのprint文

12

Page 13: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

define-by-runのお陰で生産性が向上

直感的に記述できる

デバッグも簡単に

13

Page 14: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

GPUはCuPyという行列ライブラリを独自に作成して利用

Chainer

CPU

BLAS

NumPyCuPy

CUDA/cuDNN

NVIDIA GPU

14

Page 15: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

CuPyはCUDAを利用したNumPy互換の行列計算ライブラリ

CUDAとその周辺ライブラリを利用した行列ライブラリ

CUDA、cuDNNのAPI変更を吸収

NumPyの挙動を忠実に再現

自分でカーネルを簡単に書く機能も提供

15

Page 16: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

CuPyとNumPyの比較

16

import numpy

x = numpy.array([1,2,3], numpy.float32)

y = x * x

s = numpy.sum(y)

print(s)

import cupy

x = cupy.array([1,2,3], cupy.float32)

y = x * x

s = cupy.sum(y)

print(s)

Page 17: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

高い互換性のため生産性が向上

ライブラリを新たに覚える必要がない

CuPyとNumPyでコードを共通化できる

既存のNumPyのコードをそのまま流用できる

17

Page 18: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

CuPyは深層学習以外にも利用できる

サンプルコードとして深層学習以外のコードを公開

古典的な機械学習(K-MeansやGMM)、数値計算(CG法)、

金融向け(モンテカルロ法)など

NumPyと高い互換性があるので、numpyをcupyに書き

換えるだけで既存コードが動作する

18

Page 19: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

Chainer公開から2年半

19

Page 20: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

多くのライブラリがdefine-by-runの重要性に気づいた

PyTorch Chainerをforkして、バックエンドをTorchにした

TensorFlow define-by-run (Eager mode) を最近サポート

Gluon mxnetやCNTKにdefine-by-runのインターフェースを提供

20

Page 21: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

深層学習自体のトレンドもどんどん変わる

データセットは大規模化

異なるデータや手法の組み合わせ

急速に進む実用化

21

Page 22: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

フレームワークの役割が広がっている

単に誤差逆伝播を実行すればよいだけではなくなった

大規模なデータを学習するための分散学習

複雑な手法のサポートする高レベルライブラリ

ユースケースに合わせた多様な実行環境のサポート

22

Page 23: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

分散学習を可能にするChainerMN

23

Page 24: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

典型的なケースでフレームワーク間の速度差はなくなってきている

https://github.com/ilkarman/DeepLearningFrameworks

0 50 100 150 200 250

Keras(CNTK)

Tensorflow

PyTorch

CNTK

Chainer

Knet(Julia)

Gluon

Caffe2

MXNet

Training CNN (VGG-style) on CIFAR-1

Training Time (s)

24

Page 25: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

速度における貢献度

GPU

CUDA

GPU

CUDA

cuDNN

フレームワーク

以前 2017年

フレームワーク

CUDA/cuDNNが典型的な実装をカバーしたため、速度はそれらが担保するようになってきた

25

Page 26: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

そうだ分散だ!

26

Page 27: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

ChainerMN

Chainerの使いやすさはそのままに,複数GPU,複数ノード環境で高

速に学習することができる

GPU

GPU

InfiniBand

GPU

GPU

InfiniBand

27

Page 28: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

ノード内通信とノード間通信をそれぞれ最適化

InfiniBand

MPI

ChainerMN

pyMPI

NCCL

NVIDIA GPU

ノード内 ノード間

CuPy

28

Page 29: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

GPUの数にほぼ比例した性能向上

29

Page 30: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

学習速度が向上することが最も重要

30

Page 31: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

他のフレームワークに比べても高速

31

Page 32: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

MN-1: an in-house supercomputer

NVIDIA Tesla P100 × 10248 GPUs per node, 128 nodes in total

Inter-connected by InfiniBand FDR2 HCAs per node, tree-like topology

スパコンランキング、産業領域で国内1位(世界12位)

32

Page 33: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

ResNet-50のImageNetによる学習が15分

Team Hardware Software Batchsize Time Accuracy

He et al. P100 × 8 Caffe 256 29 hr 75.3 %

Goyal et al. P100 × 256 Caffe2 8,192 1 hr 76.3 %

Codreanu

et al.

KNL 7250 ×

720Intel Caffe 11,520 62 min 75.0 %

You et al.Xeon 8160 ×

1600Intel Caffe 16,000 31 min 75.3 %

Akiba et al. P100 × 1024 Chainer 32,768 15 min 74.9 %

33

Page 34: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

Microsoft AzureのInfiniBand付きノード上でスケール

自前でサーバーを持たなくても分散学習できる34

Page 35: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

分散深層学習をコモディティー化していく

深層学習は分散させるのが当たり前になるように

35

Page 36: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

様々な手法を組み合わせるための高レベルライブラリ

36

Page 37: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

どんどん複雑になる深層学習の課題

画像処理 自然言語 音声処理 ・・・

かつては各領域ごとに研究していたが・・・

画像+言語 画像+音声 画像+強化学習 ・・・

領域横断的な課題に取り組めるようになった

37

Page 38: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

具体例:言葉を理解して作業するロボットの研究

38

Page 39: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

深層学習が簡単になったため,手法や課題が複雑化

Chainer

全部自作

深層学習

Chainer

深層学習が複雑化

Chainer

よりハイレベルなサポートが必用

深層学習

39

Page 40: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

分野特化した高レベルライブラリをリリース

強化学習

画像処理

Coming soon …

40

Page 41: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

ChainerRL:深層強化学習ライブラリ

環境やエージェントなど強化学習の要素を抽象化

最新の強化学習アルゴリズムをサポート DQN, DDPG, A3C, ACER, ...

Agent Environment

Action

Reward

41

Page 42: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

42

Page 43: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

ChainerCV:画像処理ライブラリ

物体検知、セグメンテーション、画像分類といった、典

型的な画像処理を前処理・後処理含めてサポート

Faster R-CNN, SSD, SegNet, VGG…

可視化などのユーティリティーも提供

43

Page 44: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

複雑な研究をサポートするため可視化・管理ツールをリリース予定

44

Page 45: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

周辺ライブラリがより重要度を増していく

深層学習の適用領域は今後も増え続ける

実験管理やデバッグのしやすさまで、効率的に実験を進

められるようにする

45

Page 46: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

多様な実行環境のサポート

46

Page 47: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

急速に実用化される深層学習技術

音声認識

各社のエンジンにすでに搭載されている

画像認識

実用化段階で、一部のサービスの裏ではすでに利用されている

自然言語処理

機械翻訳など、一部は実用化されている

47

Page 48: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

ハードウェアの選択は速度だけが重要ではない

利用シーンの違い

運用コストの違い

消費電力の違い

48

Page 49: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

多様な環境をサポートするための取り組み

標準形式ONNXへのエクスポート

Intel CPU向けの最適化

Windows向けバイナリの配布

49

Page 50: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

ONNX (Open Neural Network Exchange) のサポート

50

Page 51: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

Chainerで学習した結果を様々なプラットフォーム上で動作可能に

NNVM/TVM TensorRT

Jetson

51

Page 52: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

バックエンドを切り替えてCPUしかない環境にも最適化できるように

Chainer

ideep

MKL-DNN

MKL (Math Kernel Library)

Intel CPU

MKL NumPy

BLAS

NumPyCuPy

CUDA/cuDNN

NVIDIA GPU

52

Page 53: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

おわりに

今日お話したのは今のトレンド

今後の新しい研究トレンドにも

迅速に対応していきます

53

Page 54: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

まとめ

Chainerは自由度の高い深層学習フレームワーク

大規模分散学習のためのChainerMN

多様な研究を支えるためのChainerRL, ChainerCVなど

の高レベルライブラリ

実運用向けのONNXサポートなど

54

Page 55: 20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来

55