kumilog.net

データ分析やプログラミングの話などを書いています。

NVIDIA GPUで始めるディープラーニング

2017年7月に開催されたPyData.Tokyo Meetup #14のメインセッションである「NVIDIA GPUで始めるディープラーニング」のメモです。

  • スピーカー
    • 村上 真奈
    • NVIDIA Corporation
    • ソリューションアーキテクト、CUDA エンジニア
    • もともとは、画像処理のエンジニアをやっていた
  • NVIDA社について
    • 従業員は11,000人
    • 70%がエンジニア、意外とソフトウェアエンジニアが多い
    • 日本は90人、エンジニアは40~50人くらい
    • Nintendo SwitchGPUもNVIDAのが入っている

NVIDA GPUについて

f:id:xkumiyu:20170905230720p:plain

  • GPUアーキテクチャ
    • SM(streaming multiprocessor)の中に、CUDAコアがある
      • V100は5120CUDAコアある?
    • GPUのコア1つ1つは、単純な計算しかできないけど、たくさん入っているので早い
    • なんでもGPUが早くなるわけではない
    • 昔のGPUはキャッシュが入っていなかった

ディープラーニングに最適なGPU

f:id:xkumiyu:20170905230747p:plain

  • 学習にも推論にもGPUは使われている
  • ニューラルネットの層
    • GoogleNet(22層)
    • ResNet(152層)
  • 学習精度を上げるには、層を増やしたり、データを増やしたり…
  • 任意のネットワークを高速にするのは難しい
    • FPGAは特定のネットワークに特化している
  • 最近のCUDAは開発しやすくなった
    • CUDA C/C++で記述可能
  • ディープラーニング向けに特化

f:id:xkumiyu:20170905231121p:plain

  • 学習におすすめのGPU
    • Tesla K80, M40, P100(SXM2), P100(PCIM), P40
  • 推論におすすめのGPU
    • Tesla M4, P4
    • 補助電源がいらない、50-75W
  • P40, P4はFP64をハードウェアとしてはサポートしていない
    • ソフトウェアとしては計算できるが、遅くなる

f:id:xkumiyu:20170905231244p:plain

  • 2つのPASCAL
    • GP100 CC 6.0
      • FP64をサポートしている
      • INT8をサポートしていない
    • GP102 CC 6.1
      • FP64をサポートしていない
      • FP16をサポートしていない
      • INT8をサポートしている
  • どのハードウェアがなにをサポートしているかはここに書いてある
    • かなり深いところにあるので、たどり着くのは難しい
    • 数字は1秒間の処理回数?
  • Voltaになると、このややこしい問題は解決する
    • 今年の秋口とかに、世に出てくるらしい?
    • CVPR 2017でV100を配った
  • NVIDAのエンジニアは、Caffe担当者や、Chainer担当者がついている
    • Chainerの担当者はNVIDA Japanに担当者いる

ディープラーニングSDK / DIGIT

f:id:xkumiyu:20170905231323p:plain

  • 会場に参加している人へのアンケート(挙手)では、Tensorflow(Keras)とChainerが人気
  • GPUを使うとうまくいくと20倍くらい早くなる
  • NVIDA Linkでつなげると高速に通信ができる
    • NV Linkでつなげると、GPUの数でリニアに精度があがる
  • NVIDA ディープラーニング SDK
    • cuDNN
      • DNNのプリミティブ群
      • Tensorflowとかのライブラリは、cuDNNをよんでいる
      • バージョンもすごい勢いであがってる
      • 今日(2017.7.26)は7.0がでてるはずだが、まだでていない、来週にでるはず
      • これまでCNN系の最適化/高速化に注力していたが、
      • 6.0からRNN系の高速化に注力している
    • NCCL(にくる)
      • マルチGPUおよびマルチノードの為の集合通信ライブラリ
      • NCCL1はマルチGPU対応(OSS)
        • ChainerMNに使われている
          • NCCL2を使うことも検討しているらしい
      • NCCL2からマルチノード対応(coming soon)
        • 夏くらいに出るらしい
        • CNTKに一番一緒にやっている、かなりリニアにスケールする
  • DIGITS

nvidia-docker

f:id:xkumiyu:20170905231701p:plain

  • 生でdockerから使うと、GPUを使うのが大変
  • これを継承してtensorflowのイメージとかがある
  • python2と3の両立などで、環境が壊れることが防げる
  • コンテナを起動するときに明示的にどのGPUを利用するか指定できる
    • NV_GPU=‘1,2’ nvidia-docker-run -rm コンテナ名
  • nvidia-docker-plugin
    • GPUのリソース状態をRESTで取得できる
  • NVIDA社内の環境に入ってデモ

f:id:xkumiyu:20170905231805p:plain