GTC Japan, 2018/09/14 得居誠也, Preferred Networks Chainer における 深層学習の高速化 Optimizing Deep Learning with Chainer

Similar documents
第 1 回ディープラーニング分散学習ハッカソン <ChainerMN 紹介 + スパコンでの実 法 > チューター福 圭祐 (PFN) 鈴 脩司 (PFN)

VOLTA TENSOR コアで 高速かつ高精度に DL モデルをトレーニングする方法 成瀬彰, シニアデベロッパーテクノロジーエンジニア, 2017/12/12

Slide 1

ストリームを用いたコンカレントカーネルプログラミングと最適化 エヌビディアジャパン CUDAエンジニア森野慎也 GTC Japan 2014

Anaconda (2019/7/3)

PowerPoint Presentation

Microsoft Word J.^...O.|Word.i10...j.doc

Apache Arrow 須藤功平株式会社クリアコード RubyData Tokyo Meetup Apache Arrow Powered by Rabbit 2.2.2

PHP 開発ツール Zend Studio PHP アフ リケーションサーハ ー Zend Server OSC Tokyo/Spring /02/28 株式会社イグアスソリューション事業部

Rの基本操作

NGSハンズオン講習会

dlshogiアピール文章

Oracle Data Pumpのパラレル機能

WiFiの現状

SUALAB INTRODUCTION SUALAB Solution SUALAB は 人工知能 ( ディープラーニング ) による画像解析技術を通して 迅速 正確 そして使いやすいマシンビジョン用のディープラーニングソフトウェアライブラリーである SuaKIT を提供します これは 従来のマシン

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計

AGENDA ディープラーニングとは Qwiklab/Jupyter notebook/digits の使い方 DIGITS による物体検出入門ハンズオン

スライド 1

提案書

CuPy とは何か?

Pervasive PSQL v11 のベンチマーク パフォーマンスの結果

ディープラーニングが変える未来 - PFN の事業戦略と Chainer on AWS - Preferred Networks 研究担当 VP 比戸将平

PowerPoint プレゼンテーション

ディープラーニングとは AGENDA Qwiklabs/DIGITS の使い方 DIGITS による物体検出入門ハンズオン

FUJITSU Cloud Service for OSS 「コンテナサービス」 ご紹介資料

Mastering the Game of Go without Human Knowledge ( ) AI 3 1 AI 1 rev.1 (2017/11/26) 1 6 2

Images per Second Images per Second VOLTA: ディープラーニングにおける大きな飛躍 ResNet-50 トレーニング 2.4x faster ResNet-50 推論 TensorRT - 7ms レイテンシ 3.7x faster P100 V100 P10

,., ping - RTT,., [2],RTT TCP [3] [4] Android.Android,.,,. LAN ACK. [5].. 3., 1.,. 3 AI.,,Amazon, (NN),, 1..NN,, (RNN) RNN

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

About me! 足立昌彦 / +Masahiko.Adachi )! バイドゥ株式会社技術顧問 (Simeji)! 株式会社カブク Co-Founder! Google Developer Expert (Android)

XNA Framework

名称 : 日本 GPU コンピューティングパートナーシップ (G-DEP) 所在 : 東京都文京区本郷 7 丁目 3 番 1 号東京大学アントレプレナープラザ, 他工場 URL アライアンスパートナー コアテクノロジーパートナー NVIDIA JAPAN ソリュ

製品開発の現場では 各種のセンサーや測定環境を利用したデータ解析が行われ シミュレーションや動作検証等に役立てられています しかし 日々収集されるデータ量は増加し 解析も複雑化しており データ解析の負荷は徐々に重くなっています 例えば自動車の車両計測データを解析する場合 取得したデータをそのまま解析

パフォーマンス徹底比較 Seasar2 vs Spring 2006/04/12 株式会社電通国際情報サービスひがやすを株式会社アークシステム本間宏崇 Copyright the Seasar Foundation and the others all rights reserved.

Sylpheed とは オープンソースのメールソフト ライセンスは GPL+LGPL 高速 軽量 高機能 高い操作性 高い信頼性 導入が容易 マルチプラットフォーム Windows, Linux, etc. 多言語対応 ( 約 30 ヶ国語 )

MMUなしプロセッサ用Linuxの共有ライブラリ機構

course pptx

自己紹介 名前 : 竹田卓也 年齢 : 20 歳 ( 大学生 ) 経歴 : 人工知能歴 1ヶ月プログラミング歴 5 年くらい 言語 : PythonとかJavaとかGoとか 趣味 : オンライン オフラインゲーム 2

PowerPoint プレゼンテーション


自己紹介 小林由幸 1999 年にソニーに入社 2003 年より機械学習技術の研究開発を始め 音楽解析技術 12 音解析 のコアアルゴリズム 認識技術の自動生成技術 ELT などを開発 近年は Neural Network Console を中心にディープラーニング関連の技術 ソフトウェア開発を進め

VelilogHDL 回路を「言語」で記述する

Slide 1

Poincaré Embedding による 分散表現の獲得 M1 橋本隼人 森信介 京都大学情報学研究科 / 学術情報メディアセンター森研究室 1

Source Insight

CUDA を用いた画像処理 画像処理を CUDA で並列化 基本的な並列化の考え方 目標 : 妥当な Naïve コードが書ける 最適化の初歩がわかる ブロックサイズ メモリアクセスパターン

Oracle SQL Developerの移行機能を使用したOracle Databaseへの移行

PowerPoint プレゼンテーション

MMC Unity講座

3次多項式パラメタ推定計算の CUDAを用いた実装 (CUDAプログラミングの練習として) Implementation of the Estimation of the parameters of 3rd-order-Polynomial with CUDA

適応フィルタのSIMD最適化

ホワイトペーパー FUJITSU AI Zinraiディープラーニング システム FUJITSU Storage ETERNUS NR1000A Series 増大する学習データに対応するディープラーニングシステム

プログラミング基礎I(再)

Microsoft Word - Python利用環境構築ガイド_ docx

智美塾 ゆもつよメソッドのアーキテクチャ

MATLAB EXPO 2019 Japan プレゼン資料の検討

UMLプロファイル 機能ガイド

Java知識テスト問題

1. GPU コンピューティング GPU コンピューティング GPUによる 汎用コンピューティング GPU = Graphics Processing Unit CUDA Compute Unified Device Architecture NVIDIA の GPU コンピューティング環境 Lin

b4-deeplearning-embedded-c-mw


Transcription:

GTC Japan, 2018/09/14 得居誠也, Preferred Networks Chainer における 深層学習の高速化 Optimizing Deep Learning with Chainer

Chainer のミッション Deep Learning とその応用の研究開発を加速させる 環境セットアップが速い すぐ習熟 素早いコーディング 実験の高速化 結果をさっと公開 論文化 モデルをすぐ応用へ 3

Chainer のミッション Deep Learning とその応用の研究開発を加速させる 環境セットアップが速い すぐ習熟 素早いコーディング 実験の高速化 結果をさっと公開 論文化 モデルをすぐ応用へ 4

Agenda 1. Chainer の基本 2. Chainer での深層学習の高速化 5

1. Chainer の基本 6

の前に Deep Learning の基本 7

イヌ ネコ 車 入力とパラメータから予測を計算するプログラムを記述して 予測が合うようにパラメータを学習する 8

訓練データセット ミニバッチ取得 前処理 順伝播 逆伝播 W W λδw パラメータ更新 9

Dataset Updater Iterator, converter Link, Variable, FunctionNode W W λδw Optimizer 10

誤差逆伝播 w f x g y h z 0.5 x -2 y -2 z 1 w x y 11

誤差逆伝播の実装方法 : Define and Run 計算グラフを作る データをグラフに流す グラフを逆方向にたどって 勾配を計算する 12

誤差逆伝播の実装方法 : Define by Run 順伝播を計算する Python コードを実行 実行中に計算の過程をグラフに記録 グラフを逆順にたどって 勾配を計算 13

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() 14

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 月にかけて開催 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 18

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) Data load/preprocess: 0.069sec Iteration: 0.112sec データの読み込み 前処理が間に合っていない 29

Visual Profiler で見てみる (fp16 mode) Data load/preprocess: 0.138sec Iteration: 0.079sec GPU 側が速くなった分カーネル発行の余裕がなくなり ロード 前処理が隠蔽できなくなっている ロード 前処理自体にもさらに時間がかかるように 30

データ前処理の高速化 NumPy の float16 計算は遅い 前処理までは float32 でやることにする 31

前処理 fp32 化 Data load/preprocess: 0.070sec Iteration: 0.077sec カーネル発行の余裕がなくなった分 まだデータ前処理のオーバーヘッドが露出している 32

データ前処理の高速化 前処理を並列化する MultiprocessIterator を使う データ間の並列化に加え データの先読みも行う 33 参考 :FP32

FP16 FP32 34

forward/backward の高速化 (beta 版機能 ) 静的グラフ最適化 ( 今月中にリリース予定 ) 計算グラフのうち静的 (iteration ごとに不変 ) な部分をキャッシュし Python オーバーヘッドを減らす モデルの forward メソッドに @static_graph とつけるだけ 35

特に backward 側に余裕ができた 36

cudnn の使用 様々なテクニック Chainer の機能を組合せることでおよそ 3.7 倍の高速化修正は 8 行 37

おまけ : バッチサイズを増やす メモリに余裕がある場合 バッチサイズを増やすことで GPU を相対的に重くできる 学習を速く進めるにはテクニックが必要 ( 学習率を同じ比率で上げるなど ) FP16 の方がデータあたりのメモリ消費が少ないのでより大きなバッチサイズを使える FP32 (batchsize x4) FP16 (batchsize x8) 38

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