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

GPU上でのNLP向け深層学習の実装について

Avatar for Yuya Unno Yuya Unno
November 11, 2015

 GPU上でのNLP向け深層学習の実装について

Avatar for Yuya Unno

Yuya Unno

November 11, 2015
Tweet

More Decks by Yuya Unno

Other Decks in Technology

Transcript

  1. 確率率率的勾配降降下法 until converge: for x, y in trianing data: grad

    = calc_grad(x, y) update(w, grad) 3 こちらの並列列化は限度度がある こちらの並列列度度を上げる
  2. ミニバッチ並列列化 until converge: for {x, y} in trianing data: grad

    = calc_grad({x, y}) update(w, grad) 4 ⼀一度度にたくさん計算する 並列列に計算できる
  3. ミニバッチの勾配計算の例例(SVM) L hinge (yxTw) l  W ∈ RD l  x

    ∈ RD l  y ∈ {-1, 1} l  L hinge : R à R 5 ∑ L hinge (y⦿(xTw)) l  W ∈ RD l  x ∈ R{B, D} l  y ∈ {-1, 1}B l  L hinge : RB à RB Bはミニバッチサイズ ⾏行行列列計算ライブラリに並列列化を押し込む
  4. ⾔言語処理理でのミニバッチ並列列化の問題 l = 0 for x, y in sentence: l

    = l + dot(softmax(dot(W, h)), y) c, h = LSTM(c, h, x) 6 ループ回数がデータ依存
  5. 並列列化の⼯工夫まとめ l  ゼロ埋め l  ⽂文⻑⾧長の違うデータに0を埋めて、無理理やり計算 l  スプライシング l  ストリームごとに次々データを流流す l 

    パイプライン l  層ごとに別GPUを割り当ててスループットを稼ぐ l  チャンク l  ⽂文を無理理やり切切って⽂文⻑⾧長の差を緩和 l  グラフ解析 l  計算系列列中の独⽴立立部分を抽出して⾃自動割当 16
  6. 並列列化のレベル l  GPUデバイス内 l  SIMD, メモリ, スレッド, カーネル l  メモリ帯域:

    ~1TB/sec l  GPUデバイス間(マルチGPU) l  PCI-ex (~100GB/sec) l  マシン間 l  InfiniBand (~50GB/sec), Ethernet (~1GB/sec) 18
  7. Embedding l  word2vec l  CPU実装、スレッドで並列列化、ロックしないで更更新(ミニバッ チにはしていない)、勾配を陽に持たない l  gensim l  Python実装、Cythonで⾼高速化

    l  Polyglot2 l  Python実装、Cythonとblasで⾼高速化 l  Chainer (word2vec example) l  Python実装、cupyでGPUサポート、ミニバッチ 22
  8. Recurrent l  theano-rnn l  Python実装、theanoでGPU、batchsizeでchunkを作る l  Passage l  Python実装、theanoでGPU、iteratorでミニバッチを作り、 余ったところはゼロ埋め

    l  DL4J (rnn example) l  Java実装、ND4JでGPU、iteratorでミニバッチを作り、 batchsizeでchunkを作る l  Chainer (ptb example) l  Python実装、CuPyでGPU、batchsizeでchunkを作る 23
  9. Recursive l  Stanford core nlp l  Java実装、再帰関数で実装、ミニバッチしていない l  deep-recursive l 

    C++実装、Eigen利利⽤用、データ単位で処理理(ミニバッチしていな い) l  RecursiveNeuralTensorNetwork l  Python実装、theano利利⽤用、Treeをstack操作に変換してから学 習しているがミニバッチしていなさそう l  Chainer (sentiment example) l  Python実装、CuPyでGPU、再帰関数で実装、ミニバッチして いない 24