image

上野での移動に時間がかかってしまったのと、ゲートシティの地下1階で会場の入口がなかなかわからなかったのとで、4分遅刻した。小さな会議室が開場だったので受付で座席指定されて前から詰めていくスタイル。

image

[2017-11-28 18:34]

分散深層学習とChainerMNについて / PFN 鈴木脩司

  • 資料
  • PFN: 交通・製造業・バイオヘルスケアをやっている
  • data parallel vs model parallel
    • model parallelは並列化効率がよくない。GPUのメモリがすくないときにつかわれた。
  • sync vs async in data parallel
    • 非同期型はパラメータサーバの更新はワーカが同期をとらずに更新
  • 「distributed deep learning」で検索するとasyncがでてくる。
    • スループットをみるのは愚か!
    • gradient staleness のせいで学習精度があがらない。
    • stale gradients: 古い勾配
    • いまどきはsyncをつかっているチームがおおい。
    • 非同期型でもうまくチューニングすればいけるんじゃね?(予想)
    • 同期型のほうがチューニングしやすいのはたしか。
  • ChainerMNはMPI(SPMD: single program multi data)で動作。
  • AllReduceで全勾配の平均をくばる
    • forward-backward-optimize が
    • forward-backward-allreduce-optimize になる
    • 1024ノードでもスケール(weak scaling(台数ふやしたら問題も大きくしないと効率が落ちる))している
  • アプリを変えないといけないとろ
    • communicatorの作成 (allreduce用;ネットワークにあわせて選ぶ必要がある)
    • GPUの指定 (rank番号(comm.intra_rank)からGPU番号を生成するのが簡単)
    • マルチノード用のoptimizer optimizer_Adam()
    • データの分配 scatter_dataset() をつかう。
    • マルチノード用のEvaluatorの作成 create-multi_node_evaluator(evaluator, comm)
  • FAQ
    • Q: chainerMNをつかったら遅くなった
    • A: 通信を速くしてください
    • Q: MNISTが速くならない
    • A: データサイズが小さいので速くならない (MNISTは動作確認用)
  • 高速化: プロファイリング、バッチサイズをあげる、communicatorをえらぶ
  • アムダールの法則を理解しよう。 allreduceは逐次処理になっている。
  • プロファイラ: cProfile, NVPROF
  • cProfile:
    • import cProfile
    • import pstats
    • pr = cProfile.Profile()
    • pr.enable()
    • ...
    • pr.disable()
    • stats = pstats.Stats(pr)
  • NVPROF
    • mpiexec -n 2 nvprof -o '%h-%p.nvprof' python ...
    • NVPPP(nvidia-visual-profile)でみるのがおすすめ (データサイズがおおきくなるのでイテレーションを少なくする、設定ファイルで大きなファイルを読めるようにするなど)
  • バッチサイズを上げる -> AllReduceの時間が相対的に小さくなって並列化効率があがる(精度が落ちてないか注意) 学習率をいじるとか。
    • 学習率のliner scaling rule: バッチサイズをk倍にしたら学習率もk倍にする
    • gradual warmup: イテレーションごとに5 epochのところでk倍にする。
    • decaying learning rateの変わりにバッチサイズを大きくする
  • コミュニケータは PureNcclCommunicator がおすすめ(2017年11月現在)l
    • NCCLがネットワーク構成を自動判定してくれる
  • allreduceをfloat16にしてからやると通信量が(100MB->50MB)減って時間短縮。ほぼ精度に影響なし。
  • ChanerMNの今後
    • モデル並列をつかえるように
    • double bufferingでallreduceの時間を隠す
    • fault-tolerance
    • float16

[2017-11-28 19:24]

  • Q: ネットワークがIBじゃなくて10GbEだとどうなる?
  • A: 1GbEはやったことがあるが、ひどかった。allreduceおそすぎ。BWかlatencyかはモデルによる。

[2017-11-28 19:29]

[2017-11-28 19:31]

さくらインターネット高火力コンピューティング基盤でChainerMNを試す / fixstars 吉藤尚生

  • 資料
  • 結果: さくら高火力でうごかしたがChainerMNをつかっても速くならなかった。
  • {フレームワーク}×{クラウド} いろいろある
  • さくらは時間課金なのがうれしい。あとマシン貸しなのでつかいやすい。あと日本語ヘルプがある。
  • 性能が出ない理由はallreduceがおそかった。10GbEなのに0.04Gb/sしか出てなかった。(さくらに問い合わせたが回答なし)
    • 月課金ではなく時間課金だから遅いのかは分からず。月課金だとethernetではなくinfinibandにすることもできるらしい。
  • 学習データのダウンロード中も課金されるのがツラい。

[2017-11-28 20:11]

懇親会

imageimage

[2017-11-30 21:30]

NCCLはナックルなんだろうかニッケルなんだろうか。NVIDIA Collective Communication Libraryだからエヌックルあたりが無難そうな気がするが。

image