Top Banner
1

CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Aug 18, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTK deep dive- DeepLearning関連PJの進め方から本番展開まで

AI07

Page 2: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Agenda

Page 3: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Profile

岩崎 喬一(Kyoichi Iwasaki)

Page 4: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Today’s data

Page 5: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

データサイエンティスト、やっぱり要る?

Page 6: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

データサイエンティストのスキルセット

ビジネス力

データエンジ

ニアリング力

データサイエ

ンス力

Ref. データサイエンティスト協会:http://www.datascientist.or.jp/news/2014/pdf/1210.pdf

課題背景を理解→ビジネス課題を整理解決

データサイエンスを意味ある形に使えるようにし、実装、運用

情報処理、人工知能、統計学などの知恵を理解し、適用

Page 7: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

データ分析プロジェクトの進め方

ビジネス

要件定義

データ収

集・確認

データ分

析評価

展開

ビジネス力

データエンジ

ニアリング力

データサイエ

ンス力

Page 8: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

機械学習と深層学習

Page 9: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

深層学習?

Page 10: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

深層学習による主な画像解析(as of May2018)

深層学習による主な画像解析

画像分類

物体検知

セグメンテーション

What?

What? Where?

What? Where? Shape?

What are specified? Algorithms

CNN

Fast(er)

R-CNN

Mask

R-CNN

MSでの実装

Custom Vision, CNTK

Custom Vision, CNTK

..(In near future?)複雑

単純

Page 11: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

深層学習による主な画像解析(as of May2018)

2015

• Fast R-CNN

2015-16

• Faster R-CNN

2015-16

• YOLO

2015-16

• SSD

2017

• Mask R-CNN

物体検知 セグメンテーション

Page 12: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

深層学習の「学習」?

Page 13: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

深層学習(機械学習の観点から)

Page 14: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKとは?

Page 15: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKとは?

▪ GPU / マルチGPU(1-bit SGD)

https://www.microsoft.com/en-us/cognitive-toolkit/

Page 16: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKの実行速度

https://arxiv.org/pdf/1608.07249.pdf

DL F/W FCN-S AlexNet ResNet-50 LSTM-64

CNTK 0.017 0.031 0.168 0.017

Caffe 0.017 0.027 0.254 --

TensorFlow 0.020 0.317 0.227 0.065

Torch 0.016 0.043 0.144 0.324

小さいほど高速

Page 17: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Codes in CNTK

https://github.com/Microsoft/CNTK

Page 18: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKで2値分類をやってみる

赤 青

Page 19: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKで2値分類をやってみる

パラメータw、b

w、b

年齢

腫瘍

bias

z1

z2

疾患あり

疾患なし

𝑤11

𝑤21

𝑤12

𝑤22

𝑏1

𝑏2

Page 20: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKの処理フロー

入力・出力変数の定義

モデル評価

入力・出力変数の定義

ネットワークの定義

損失関数、最適化方法の定義

モデル学習

モデル評価

Page 21: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKの処理フロー – 1/5

入力・出力変数の定義

import cntk as C

## 入力変数(年齢, 腫瘍の大きさ)の2種類ありinput_dim = 2

## 分類数(疾患の有無なので2値)num_output_classes = 2

## 入力変数feature = C.input_variable(input_dim, np.float32)

## 出力変数label = C.input_variable(num_output_classes, np.float32)

Page 22: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKの処理フロー – 2/5

ネットワークの定義

def linear_layer(input_var, output_dim):input_dim = input_var.shape[0]## Define weight Wweight_param = C.parameter(shape=(input_dim,

output_dim))## Define bias bbias_param = C.parameter(shape=(output_dim))

## Wx + b. Pay attention to the order of variables!!return bias_param + C.times(input_var, weight_param)

z = linear_layer(input, num_outputs)

Page 23: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKの処理フロー – 3/5

損失関数、最適化方法の定義

## 損失関数loss = C.cross_entropy_with_softmax(z, label)## 分類エラー("分類として"当たっているか否か)eval_error = C.classification_error(z, label)

## 最適化learner = C.sgd(z.parameters, lr_schedule)trainer = C.Trainer(z, (loss, eval_error), [learner])

Page 24: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKの処理フロー – 4/5

モデル学習

for i in range(0, num_minibatches_to_train): ## Extract training datafeatures, labels =

generate_random_data_sample(minibatch_size, input_dim, num_output_classes)

## Traintrainer.train_minibatch({feature : features, label :

labels})

Page 25: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKの処理フロー – 5/5

モデル評価

out = C.softmax(z)result = out.eval({feature : features})

Page 26: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Demo: CNTK basic process

Page 27: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Tips :: Jupyter Notebookの起動

> activate py35(py35) > jupyter notebook

https://notebooks.azure.com/

Page 28: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Demo :: training - evaluate

https://youtu.be.com/70FMOdVUNPI

Page 29: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Tips 混同行列(Confusion Matrix)

疾患[実際] 非疾患[実際]

疾患[予測] 14 0

非疾患[予測] 2 9

非疾患と予測(緑線の下)実際は疾患 (緑線の下の赤2つ)▶モデルの見逃し

Page 30: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

物体検知からの分散学習

Page 31: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

物体検知って?(recap)

深層学習による主な画像解析

画像分類

物体検知

セグメンテーション

What?

What? Where?

What? Where? Shape?

What are specified? Algorithms

CNN

Fast(er)

R-CNN

Mask

R-CNN

MSでの実装

Custom Vision, CNTK

Custom Vision, CNTK

..(In near future?)複雑

単純

Page 32: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

VoTT

https://github.com/Microsoft/VoTT

静止画 動画

Page 33: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

物体検知における“座標”

xmin xmax

ymin

ymax

x., y.ともに、左上の●から計った両端点●

Page 34: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Quick demo on VoTT(静止画)

Page 35: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Quick demo for VoTT

https://youtu.be/j7OjxFY2Go8

Page 36: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Quick demo on VoTT(動画)

Page 37: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

https://youtu.be/RCuGLRtggrI

Quick demo for VoTT

Page 38: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Karugamo detection!

Page 39: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Movie inferred with Faster R-CNN

https://youtu.be/ziuEXyJ9SNs

Page 40: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKでの分散学習 – 1/6

深層学習での分散学習とは?→主に学習時間短縮のためにマルチGPUを利用すること

分散学習実行準備マルチGPU搭載 マルチホスト

1bit-SGD

Page 41: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKでの分散学習 – 2/6

入力・出力変数の定義

ネットワークの定義

損失関数、最適化方法の定義

モデル学習

モデル評価

Page 42: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKでの分散学習 – 3/6

from cntk import distributed...

learner = cntk.learner.momentum_sgd(...) # create local learner

distributed_after = epoch_size # number of samples to warm start with

distributed_learner = distributed.data_parallel_distributed_learner(learner = learner,num_quantization_bits = 32, # non-quantized gradient accumulationdistributed_after = 0) # no warm start

損失関数の定義

Page 43: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKでの分散学習 – 4/6

minibatch_source = MinibatchSource(...) ...trainer = Trainer(z, ce, pe, distributed_learner)...session = training_session(trainer=trainer, mb_source=minibatch_source, ...)session.train()...distributed.Communicator.finalize() # must be called to finalize MPI in case of successful distributed training

最適化方法の定義

https://docs.microsoft.com/en-us/cognitive-toolkit/multiple-gpus-and-machines#2-configuring-parallel-training-in-cntk-in-python

Page 44: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKでの分散学習 – 5/6

# GPUを2つ利用し、学習用スクリプトがtraining.py> mpiexec –n 2 python training.py

分散学習の実行方法

Page 45: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

CNTKでの分散学習 – 6/6

import cntk

## CPU利用時cntk.device.try_set_default_device(cntk.device.cpu())

## GPU利用時cntk.device.try_set_default_device(cntk.device.gpu())

CPU/GPU利用設定

Page 46: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Some preparation for Deep Learning!

CNTKから2つのGPUが見えている

GPU利用可能か確認

https://github.com/kyoro1/decode2018/blob/master/2.%20distributed%20learning%2

0with%20Faster%20R-CNN.ipynb

Page 47: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Faster R-CNN with single GPU

モデルパラメータ数は5700万超!

Page 48: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Single GPU vs Multi GPU

2つのGPU利用

Page 49: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Single GPU vs Multi GPU

GPU 学習時間 精度(mAP)

1 GPU (NC6) 7分22秒 0.9479

2 GPU (NC12) 3分43秒 0.9479

Page 50: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

本番稼働に向けて

Page 51: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Confusion Matrix for karugamo

karugamoが写っているのに、モデルは推定できなかった▶モデルの見逃し

あり[実際] なし[実際]

あり[予測] XX XX

なし[予測] XX XX

Page 52: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Confusion Matrix for karugamo

あり[実際] なし[実際]

あり[予測] XX XX

なし[予測] XX XX

karugamoでないものに、karugamoと推定▶モデルの過検知?

Page 53: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Original movie vs inferred movie

https://youtu.be/SYTw5OLBnzc

Page 54: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

データサイエンス活用推進体制(案)

【実際に手を動かして

データ分析をする人材】

【事業活動に結びつけるための

戦略づくり・設計を行う人材】

【分析結果を活用し、ビジネス企

画や改善を活かす人材】

ビジネス力

データエンジ

ニアリング力

データサイエ

ンス力

http://www.kantei.go.jp/jp/singi/keizaisaisei/miraitoshikaigi/jinzaiikusei_dai3/siryou4.pdf

#AI02

Page 55: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

本番展開あるある (技術寄り編)

Page 56: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

本番展開あるある (システム運用編)

Page 57: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Key takeaway

• 機械学習 ほぼ同等

本来の意味

ビジネスサイドとの協業

• どんなKPI

Page 58: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Key takeaway

平易にスクリプトが書け scrap & build

• 出来ること 出来ないこと

たち

Page 59: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Appendix

Page 60: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Referencehttps://github.com/Microsoft/CNTK

https://docs.microsoft.com/en-us/cognitive-toolkit/setup-cntk-on-your-machine

https://github.com/Microsoft/VoTT

https://github.com/onnx/onnx

https://www.edx.org/course/deep-learning-explained

https://www.edx.org/course/computer-vision-and-image-analysis

Page 61: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

Referencehttps://github.com/kyoro1/decode2018

https://youtu.be/s5W4c9q_SAw

https://youtu.be/ziuEXyJ9SNs

https://youtu.be/SYTw5OLBnzc

https://youtu.be.com/70FMOdVUNPI

https://youtu.be/j7OjxFY2Go8

https://youtu.be/RCuGLRtggrI

Page 62: CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6 深層学習での分散学習とは? →主に学習時間短縮のためにマルチgpuを利用すること

© 2018 Microsoft Corporation. All rights reserved.

本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、サービスなどはそれぞれ、各権利保有者に帰属します。