Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A Few Ways to Accelerate Deep Learning

A Few Ways to Accelerate Deep Learning

UENISHI Kota

April 04, 2019
Tweet

More Decks by UENISHI Kota

Other Decks in Technology

Transcript

  1. Repro Tech Talk #7 2019/4/4
    Preferred Networks, Inc.
    Kota Uenishi
    A Few Ways to Accelerate
    Deep Learning

    View Slide

  2. 誰?
    Kota UENISHI
    @kuenishi
    • github.com
    • twitter.com
    • etc…
    分散深層学習をやっています
    25分しかないのでめっちゃ急ぎます

    View Slide

  3. なぜ深層学習を速くするのか?

    View Slide

  4. PFNは最新の研究や技術を最も早く実用化する
    お片付けロボット
    @画像認識、音声指示
    お片付けロボットアーム
    @画像認識、音声指示
    協調自動運転
    @画像認識、強化学習
    自動運転
    @画像認識、強化学習

    View Slide

  5. 機械学習(深層学習)の開発サイクル
    タスク(ビジネス仮
    説)を定義する
    よいモデルを
    開発する
    モデルをアプリに埋
    め込む
    アプリでビジネスを
    する
    学習データを
    集める
    深層ネットワークを
    定義する
    学習実験をしてモ
    デルを作る
    テストデータで精度
    を確認する
    モデルで推論する
    アプリをつくる
    アプリ開発
    データを集める
    データを分析する
    仮説 / 課題を明ら
    かにする
    解決方法を考える
    システム開発、
    運用の設計

    View Slide

  6. 試行錯誤のボトルネックは学習
    w/NVIDIA P100
    mlperf v0.5 results https://mlperf.org/results/
    タスク 画像分類 物体検出1 物体検出2 翻訳 RNN翻訳 推薦 強化学習
    データセット ImageNet COCO COCO WMT E-G WMT E-G
    MovieLens-2
    0M
    Pro games
    モデル ResNet-50
    SSD
    w/ResNet-34
    Mask-R-CNN NMT Transformer NCF Mini Go
    所要時間(分) 8831.3 827.7 4999.5 1134.5 1869.8 46.7 4388.7
    (時間) 147.2 13.8 83.3 18.9 31.2 0.8 73.2

    View Slide

  7. 強いモデルを作るために
    • よいデータで学習すること
    • よいネットワークであること
    • よいレシピで学習すること
    • よいハイパーパラメータが与えられること
    • 何度も繰り返し試行錯誤すること

    View Slide

  8. 1GPUで速くする

    View Slide

  9. 深層学習 ≒ DNNをSGDでデータに対して最適化する
    この手順を好きなだけ繰り返す
    1. データをシャッフルしてミニバッチに分割する
    2. 分割したミニバッチごとに、モデルに対してまとめて
    a. 前向き計算をして推論結果を出す
    b. 推論結果と正解データのズレ(距離)を計算
    c. ズレをもとに後ろ向き計算(backpropをする)
    d. 後ろ向き計算で得られた勾配の平均を計算
    e. 勾配をモデルのパラメータに反映

    View Slide

  10. データをシャッフルしてミニバッチに分割する
    Shuffle Minibatch
    MNIST
    ● トータルのデータ数は 6万
    ● 典型的にはバッチサイズ 10~100
    CIFAR10
    ● トータルのデータ数は 6万
    ● 典型的にはバッチサイズは 64
    ImageNet-1k
    ● トータルのデータ数は 158万枚
    ● 典型的にはバッチサイズ 32

    View Slide

  11. ミニバッチ毎に学習
    Forward Backward Optimize
    推論
    [fish, dog, …]
    正解
    [cat, dog, …]
    loss
    [1.0, 0.0, …]
    update
    param
    grad
    Forward
    バッチサイズを単純に大きくすると GPU内の並列
    度は上がるが、学習効率は落ちる

    View Slide

  12. 1GPUで速くする
    Forward Backward Optimize
    OpenCV
    DALI
    ChainerX
    chainer-compiler
    CuPy Kernel Fusion
    TensorCore (125TFLOPS)
    cProfile, nvprof
    必見
    Chainer/ChainerMNのCPUリソース不足
    による速度低下と解決法
    Chainer/ChainerMNのおすすめなプロ
    ファイルの取り方&プロファイルの見方
    の注意点

    View Slide

  13. 並列処理で速くする

    View Slide

  14. 並列処理で速くする@2017
    Akiba et al., 2017 https://arxiv.org/abs/1711.04325

    View Slide

  15. 並列処理で速くする@2019
    Mikami et al., https://arxiv.org/abs/1811.05233

    View Slide

  16. ChainerMNによる分散学習
    All-Reduce
    Forward
    Forward
    Forward
    Backward
    Backward
    Backward
    Optimize
    Optimize
    Optimize

    View Slide

  17. 並列化して速くなる、は自明か?
    • GPUあたりのバッチサイズはそんな
    に変わらない
    • GPU数を32倍にすると、全体のバッ
    チサイズも32倍
    • (2017年までは)バッチサイズをあま
    り大きくすると汎化性能にペナルティ
    があることが分かっていた
    • 頑張って512とか
    Keskar et al., “On Large-Batch Training for Deep Learning: Generalization Gap and
    Sharp Minima”, arXiv:1609.04836 [cs.LG]

    View Slide

  18. 並列化するテクニックが上手くいく場合がある
    Linear Scaling Rule:
    • バッチサイズを k 倍にしたいときは
    は学習率も k 倍すればよい
    バッチサイズが大きくなるとSharp
    minimaに陥ってぬけにくくなるので、そ
    の分だけ学習率を大きくすればよい
    ※他にもさまざまなテクニックがある
    Goyal et al., “Accurate, Large Minibatch SGD: Training ImageNet in 1
    Hour”, arXiv:1706.02677 [cs.CV]

    View Slide

  19. All-Reduceを速くする
    All-Reduce
    Forward
    Forward
    Forward
    Backward
    Backward
    Backward
    Optimize
    Optimize
    Optimize
    + + →

    View Slide

  20. All-Reduceを速くする
    ● All-Reduceが速ければ速いほどス
    ケールアウトすることができる
    ● NCCL: NVIDIAが提供している高速
    な集団通信ライブラリ
    ● RDMA: リモートのGPUメモリに直接
    データを読み書きする
    ● Ring All-Reduce: 帯域をフル利用
    できるアルゴリズム
    Akiba et al., 2017 https://arxiv.org/abs/1711.04325

    View Slide

  21. ハードウェアで速くする

    View Slide

  22. スパコンその1: MN-1 1024GPU
    • 計算ノード x128
    – NVIDIA Tesla P100 x8
    – InfiniBand FDR (56Gbps) x2
    • 19.1PFLOPS @半精度
    • TOP500 91位 (2017 Nov)
    – 国内13位
    – 産業用1位
    • ImageNet 学習の世界記録(当時)
    – Preferred Networks、深層学習の学習速度
    において世界最速を実現
    © NTT Communications

    View Slide

  23. スパコンその2: MN-1b 512GPU
    • 計算ノード x64
    – NVIDIA Tesla V100 (32GB) x8
    – InfiniBand EDR (100Gbps) x2
    • 57.3PFLOPS @混合精度
    • Open Images Challenge 2位
    – 世界454チームが参加した物体検出コンペティショ
    ン Google AI Open Images – Object Detection
    Trackで準優勝
    • 導入当初からFull Kubernetesクラスタ
    • 最新のNVIDIA Tesla V100 32GB GPUを採用した プラ
    イベート・スーパーコンピュータ「 MN-1b」を7月に稼働 © NTT Communications

    View Slide

  24. スパコンその3: MN-2 1024GPU
    • 計算ノード x128
    – NVIDIA Tesla V100 x8
    – 100GbE x4
    – NVLink (300GB/s)
    • 128PFLOPS @混合精度
    • Challenges
    – いろいろ自社運用
    – CLOSネットワーク w/ L3 ルーティング
    – NCCL AllReduce on RoCE v2
    – Fully containerized by Kubernetes
    – HDFSがプライマリのストレージ
    TBF

    View Slide

  25. • MN-2と同じ場所に設置
    • Powered by MN-Core
    – 深層学習に特化した自社設計チップ
    – ピーク性能 524TFLOPS @半精度
    – 消費電力 500W
    スパコンその4: MN-3
    x4

    View Slide

  26. MN-3完成イメージ

    View Slide

  27. We’re hiring! intern/fulltime

    View Slide

  28. Questions?

    View Slide

  29. まずは始めよう
    $ pip install chainer cupy-cuda100 mpi4py

    View Slide

  30. See also:
    • 最先端のディープラーニング 研究開発を支えるGPU計算機基盤 「MN-1」のご紹介
    • Massively Scale Your Deep Learning Training with NCCL 2.4
    • Preferred Networksの機械学習クラスタを支える技術
    • CuPy -NumPy互換GPUライブラリによるPythonでの高速計算
    • Optimizing Deep Learning with Chainer
    • ディープラーニングを応用した製品不良検査ソフトウェアおよびピッキングロボットソリューション
    • ViEW 2018 基調講演 2018-12-7 実世界で働くロボットのためのビジョン・言語処理技術
    • 東北大学講義資料 実世界における自然言語処理 - すべての人にロボットを


    View Slide