SlideShare a Scribd company logo
GTC Japan, 2018/09/14
得居 誠也, Preferred Networks
Chainer における
深層学習の高速化
Optimizing Deep Learning with Chainer
[GTCJ2018] Optimizing Deep Learning with Chainer PFN得居誠也
Chainer のミッション
Deep Learning とその応用の研究開発を加速させる
• 環境セットアップが速い
• すぐ習熟
• 素早いコーディング
• 実験の高速化
• 結果をさっと公開・論文化
• モデルをすぐ応用へ
3
Chainer のミッション
Deep Learning とその応用の研究開発を加速させる
• 環境セットアップが速い
• すぐ習熟
• 素早いコーディング
• 実験の高速化
• 結果をさっと公開・論文化
• モデルをすぐ応用へ
4
Agenda
1. Chainer の基本
2. Chainer での深層学習の高速化
5
1. Chainer の基本
6
…の前に Deep Learning の基本
7
8
入力とパラメータから予測を計算するプログラムを記述し
て、予測が合うようにパラメータを学習する
イヌ
ネコ
車
9
訓練
データセット
ミニバッチ
取得、前処理 順伝播・逆伝播
𝑊 ← 𝑊 − 𝜆Δ𝑊
パラメータ更新
10
Dataset
Iterator,
converter
Link, Variable, FunctionNode
𝑊 ← 𝑊 − 𝜆Δ𝑊
Optimizer
Updater
誤差逆伝播
11
𝑓𝑤 𝑥 𝑔 𝑦 ℎ 𝑧
1-2-20.5
𝑦
𝑧𝑦
𝑥
𝑥
𝑤
誤差逆伝播の実装方法: Define and Run
• 計算グラフを作る
• データをグラフに流す
• グラフを逆方向にたどって、勾配を計算する
12
誤差逆伝播の実装方法: Define by Run
• 順伝播を計算する Python コードを実行
– 実行中に計算の過程をグラフに記録
• グラフを逆順にたどって、勾配を計算
13
14
a = F.linear(x, W1, b1)
h = F.relu(a)
y = F.linear(h, W2, b2)
loss = F.softmax_cross_entropy(y, t)
loss.backward()
Define by Run の利点
順伝播が Python プログラムとして自然に書ける
• デバッグが容易
– print デバッグ、デバッガ (pdb) の使用、etc.
• Python 制御構文がそのまま使える
– 入力に応じて計算を変える、というのが Python プロ
グラムとして自然に書ける
15
Define by Run の実行特性
計算グラフが毎 iteration で構築される
→ CPU オーバーヘッドを考慮する必要
→ グラフ最適化はしづらい
→ アドホックな高速化はしやすい
16
Chainer はスケールする
• Python は遅いが、GPU の計算コストが十分高ければ
オーバーヘッドは隠蔽できる
• ChainerMN を使うことで複数 GPU にスケールできる
17
Google AI Open Images Challenge
(Object Detection Track)
• 500 クラスのオブジェクト
• 1.7M 枚の訓練画像、
12M オブジェクト (bounding box)
• Kaggle 上で 7-8 月にかけて開催
18
Mark Paul Gosselaar plays the guitar by Rhys A
(https://www.flickr.com/photos/rhysasplundh/5738556102). CC BY 2.0. Annotated image
borrowed from https://www.kaggle.com/c/google-ai-open-images-object-detection-track
Google AI Open Images Challenge
PFDet チーム
• MN-1b: Tesla V100 x 512枚
• 1回の実験で 33 時間、これをくり返し安定して実施
• 83% のスケーリング効率
T. Akiba, T. Kerola, Y. Niitani, T. Ogawa, S. Sano, S. Suzuki. PFDet:
2nd Place Solution to Open Images Challenge 2018 Object
Detection Track https://arxiv.org/abs/1809.00778
19
2. Chainer での深層学習の高速化
20
まず高速化の前に……
• 究極的に、高い精度のモデルを素早く手に入れるのが目
標であることを忘れない
• 学習プログラムの完了が速くなっても、得られるモデル
の予測性能が落ちていたら意味がない
• (という claim をつけた上で、今日のトークでは予測性
能の話はほとんどしません)
21
Chainer におけるパフォーマンスの勘所
• GPU の計算が効率的かどうか
• GPU カーネルがちゃんと詰まっているかどうか
(CPU ボトルネック)
22
ResNet 50
• Tesla V100 (16GB RAM)
• ImageNet
• 前処理:random crop + flip
• バッチサイズ 32
• SerialIterator, StandardUpdater
23
GPU 計算の高速化
• cuDNN を使う
– で
cuDNN 同梱パッケージが入る
(92 の部分は使用している CUDA
toolkit のバージョンに合わせる)
24
GPU 計算の高速化
• cuDNN autotune 機能を使う
–
– 各 convolution の初回実行時に最適なカーネ
ルを探す(初回のみオーバーヘッドがある)
25
GPU 計算の高速化
• FP16 で計算する
– メモリ使用量・速度ともに改善する
– TensorCore が使えればさらに高速に
• 計算精度が落ちるので、最終的なモデルの予測性能が
保たれることを確認する
26
GPU 計算の高速化
FP16 で精度を上げる手段
• TensorCore を使う(gemm 内の accumulation が fp32)
• FP32 update
– 勾配をパラメータの fp32 コピーに足し込む
– Optimizer の .use_fp32_update() を呼ぶ
• Loss scaling
– Backprop 時に定数倍されたエラーを扱うことで underflow を防
ぐ
– StandardUpdater 等の loss_scale= や Optimizer の
set_loss_scale() で設定可能
27
GPU 計算の高速化
• FP16 モードを使う(beta 版機能)
–
– or
– デフォルトで float16 が使われる
–
と組合せると TensorCore も有効に
28
Visual Profiler で見てみる (fp32 mode)
データの読み込み・前処理が間に合っていない
29
Iteration: 0.112sec
Data load/preprocess: 0.069sec
Visual Profiler で見てみる (fp16 mode)
GPU 側が速くなった分カーネル発行の余裕がなくなり、
ロード・前処理が隠蔽できなくなっている。ロード・前処
理自体にもさらに時間がかかるように。
30
Iteration: 0.079sec
Data load/preprocess: 0.138sec
データ前処理の高速化
• NumPy の float16 計算は遅い
• 前処理までは float32 でやることにする
31
前処理 fp32 化
カーネル発行の余裕がなくなった分、まだデータ前処理の
オーバーヘッドが露出している
32
Iteration: 0.077sec
Data load/preprocess: 0.070sec
データ前処理の高速化
• 前処理を並列化する
– MultiprocessIterator を使う
– データ間の並列化に加え、
データの先読みも行う
33
参考:FP32
34
FP16
FP32
forward/backward の高速化 (beta 版機能)
• 静的グラフ最適化
(今月中にリリース予定)
– 計算グラフのうち静的(iteration ごとに
不変)な部分をキャッシュし、Python
オーバーヘッドを減らす
– モデルの forward メソッドに
@static_graph とつけるだけ
35
特に backward 側に余裕ができた
36
37
Chainer の機能を組合せることでおよそ3.7倍の高速化
修正は 8 行
cuDNN の使用 様々なテクニック
おまけ:バッチサイズを増やす
• メモリに余裕がある場合、バッチサイズを
増やすことで GPU を相対的に重くできる
– 学習を速く進めるにはテクニックが必
要(学習率を同じ比率で上げるなど)
– FP16 の方がデータあたりのメモリ消
費が少ないのでより大きなバッチサイ
ズを使える
38
FP16 (batchsize x8)
FP32 (batchsize x4)
FP16, Large batch (256)
39
カーネルがちゃんと詰まっている
さらなる高速化
ChainerMN による multi GPU 学習
(次バージョンで Chainer 本体に統合予定)
40
Chainer 本体のパフォーマンスに対する取り組み
• CuPy の CPU オーバーヘッド削減
– Kernel launch の高速化
• Chainer のメモリオーバーヘッド削減
– メモリを削減することで、より大きなモデル・ミニ
バッチが使えるようになり、GPU 負荷を上げる
• Chainer の CPU オーバーヘッド削減
• (今後)”Static subgraph” の範囲を広げ、グラフ最適化
などを盛り込んでいく
41
まとめ
• cuDNN の様々な高速化機能を Chainer から使う
• FP16 + TensorCore を使う
• 思い通りに速くならなかったら Visual Profiler
• CPU ボトルネックを解消するには
– NumPy での fp16 計算を避ける
– iterator を並列化する
– Static subgraph optimization を有効にする
• ChainerMN でさらにスケール
• Chainer/CuPy の高速化にも引き続き取り組んでいきます
42

More Related Content

PDF
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
PDF
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
PDF
NVIDIA 更新情報: Tesla P100 PCIe/cuDNN 5.1
PDF
Pythonによる並列プログラミング -GPGPUも-
PDF
プログラムを高速化する話Ⅱ 〜GPGPU編〜
PDF
Anaconda & NumbaPro 使ってみた
PDF
1072: アプリケーション開発を加速するCUDAライブラリ
PDF
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
NVIDIA 更新情報: Tesla P100 PCIe/cuDNN 5.1
Pythonによる並列プログラミング -GPGPUも-
プログラムを高速化する話Ⅱ 〜GPGPU編〜
Anaconda & NumbaPro 使ってみた
1072: アプリケーション開発を加速するCUDAライブラリ
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...

What's hot (20)

PDF
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
PDF
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
PDF
EnrootとPyxisで快適コンテナ生活
PDF
20170421 tensor flowusergroup
PDF
20170726 py data.tokyo
PDF
CUDAプログラミング入門
PDF
Maxwell と Java CUDAプログラミング
PDF
pgconfasia2016 lt ssd2gpu
KEY
PyOpenCLによるGPGPU入門
PDF
Volta は、Chainer で使えるの?
PDF
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
PDF
2015年度先端GPGPUシミュレーション工学特論 第6回 プログラムの性能評価指針 (Flop/Byte,計算律速,メモリ律速)
PDF
ディープラーニングイメージで構築する快適・高速な機械学習環境
PDF
20170329_BigData基盤研究会#7
PDF
2015年度先端GPGPUシミュレーション工学特論 第1回 先端シミュレーションおよび産業界におけるGPUの役割
PDF
(JP) GPGPUがPostgreSQLを加速する
PDF
2015年度GPGPU実践基礎工学 第15回 GPGPU開発環境 (OpenCL)
PDF
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
PPTX
関東GPGPU勉強会資料
PDF
20170127 JAWS HPC-UG#8
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
EnrootとPyxisで快適コンテナ生活
20170421 tensor flowusergroup
20170726 py data.tokyo
CUDAプログラミング入門
Maxwell と Java CUDAプログラミング
pgconfasia2016 lt ssd2gpu
PyOpenCLによるGPGPU入門
Volta は、Chainer で使えるの?
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
2015年度先端GPGPUシミュレーション工学特論 第6回 プログラムの性能評価指針 (Flop/Byte,計算律速,メモリ律速)
ディープラーニングイメージで構築する快適・高速な機械学習環境
20170329_BigData基盤研究会#7
2015年度先端GPGPUシミュレーション工学特論 第1回 先端シミュレーションおよび産業界におけるGPUの役割
(JP) GPGPUがPostgreSQLを加速する
2015年度GPGPU実践基礎工学 第15回 GPGPU開発環境 (OpenCL)
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
関東GPGPU勉強会資料
20170127 JAWS HPC-UG#8
Ad

Similar to [GTCJ2018] Optimizing Deep Learning with Chainer PFN得居誠也 (20)

PDF
深層学習フレームワークChainerの紹介とFPGAへの期待
PDF
Introduction to Chainer (LL Ring Recursive)
PDF
Chainer で Tensor コア (fp16) を使いこなす
PDF
研究を加速するChainerファミリー
PDF
Chainerチュートリアル -v1.5向け- ViEW2015
PDF
Chainer, Cupy入門
PDF
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
PDF
DEEP LEARNING、トレーニング・インファレンスのGPUによる高速化
PDF
Chainerの使い方と自然言語処理への応用
PDF
「深層学習」勉強会LT資料 "Chainer使ってみた"
PDF
Chainer on Azure 2 年の歴史
PDF
20180729 Preferred Networksの機械学習クラスタを支える技術
PDF
深層学習フレームワーク Chainer の開発と今後の展開
PPTX
ChainerでDeep Learningを試す為に必要なこと
PPTX
DLフレームワークChainerの紹介と分散深層強化学習によるロボット制御
PDF
NVIDIA Deep Learning SDK を利用した画像認識
PDF
Deep Learning Lab: DIMo & Chainer
PDF
FPGAX2016 ドキュンなFPGA
PDF
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
PDF
深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの紹介とFPGAへの期待
Introduction to Chainer (LL Ring Recursive)
Chainer で Tensor コア (fp16) を使いこなす
研究を加速するChainerファミリー
Chainerチュートリアル -v1.5向け- ViEW2015
Chainer, Cupy入門
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
DEEP LEARNING、トレーニング・インファレンスのGPUによる高速化
Chainerの使い方と自然言語処理への応用
「深層学習」勉強会LT資料 "Chainer使ってみた"
Chainer on Azure 2 年の歴史
20180729 Preferred Networksの機械学習クラスタを支える技術
深層学習フレームワーク Chainer の開発と今後の展開
ChainerでDeep Learningを試す為に必要なこと
DLフレームワークChainerの紹介と分散深層強化学習によるロボット制御
NVIDIA Deep Learning SDK を利用した画像認識
Deep Learning Lab: DIMo & Chainer
FPGAX2016 ドキュンなFPGA
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
深層学習フレームワークChainerの特徴
Ad

More from Preferred Networks (20)

PDF
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
PDF
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
PDF
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...
PDF
深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...
PDF
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
PDF
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
PDF
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
PDF
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
PDF
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
PPTX
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
PPTX
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
PDF
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
PDF
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
PDF
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
PDF
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
PDF
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
PDF
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
PDF
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
PDF
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50
PodSecurityPolicy からGatekeeper に移行しました / Kubernetes Meetup Tokyo #57
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher...
深層学習の新しい応用と、 それを支える計算機の進化 - Preferred Networks CEO 西川徹 (SEMICON Japan 2022 Ke...
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kaggle Happywhaleコンペ優勝解法でのOptuna使用事例 - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
自然言語処理を 役立てるのはなぜ難しいのか(2022/10/25東大大学院「自然言語処理応用」)
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
PFNのオンプレ計算機クラスタの取り組み_第55回情報科学若手の会
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
KubeCon + CloudNativeCon Europe 2022 Recap - Batch/HPCの潮流とScheduler拡張事例 / Kub...
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後! / Kubernetes Meetup Tokyo 50

[GTCJ2018] Optimizing Deep Learning with Chainer PFN得居誠也