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

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

Yuya Unno
November 11, 2015

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

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