Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GPU上でのNLP向け深層学習の実装について
Search
Yuya Unno
November 11, 2015
Technology
0
8
GPU上でのNLP向け深層学習の実装について
Yuya Unno
November 11, 2015
Tweet
Share
More Decks by Yuya Unno
See All by Yuya Unno
深層学習で切り拓くパーソナルロボットの未来 @東京大学 先端技術セミナー 工学最前線
unnonouno
0
13
深層学習時代の自然言語処理ビジネス @DLLAB 言語・音声ナイト
unnonouno
0
36
ベンチャー企業で言葉を扱うロボットの研究開発をする @東京大学 電子情報学特論I
unnonouno
0
27
PFNにおけるセミナー活動 @NLP2018 言語処理研究者・技術者の育成と未来への連携WS
unnonouno
0
7
進化するChainer @JSAI2017
unnonouno
0
12
予測型戦略を知るための機械学習チュートリアル @BigData Conference 2017 Spring
unnonouno
0
5
深層学習フレームワーク Chainerとその進化
unnonouno
0
15
深層学習による機械とのコミュニケーション @DeNA TechCon 2017
unnonouno
0
21
最先端NLP勉強会 “Learning Language Games through Interaction” @第8回最先端NLP勉強会
unnonouno
0
10
Other Decks in Technology
See All in Technology
MCP server を作って Claude Desktop アプリから kintone へアクセスすると楽しい
r3_yamauchi
PRO
1
120
Women in Agile
kawaguti
PRO
2
170
20250125_Agent for Amazon Bedrock試してみた
riz3f7
2
110
Tech Blog執筆のモチベート向上作戦
imamura_ko_0314
0
730
消し忘れリソースゼロへ!私のResource Explorer活用法
cuorain
0
140
さいきょうのアーキテクチャを生み出すセンスメイキング
jgeem
0
270
プロダクト開発、インフラ、コーポレート、そしてAIとの共通言語としての Terraform / Terraform as a Common Language for Product Development, Infrastructure, Corporate Engineering, and AI
yuyatakeyama
6
1.6k
ブロックチェーンR&D企業における SREの実態 / SRE Kaigi 2025
datachain
0
3.9k
あなたの興味は信頼性?それとも生産性? SREとしてのキャリアに悩むみなさまに伝えたい選択肢
jacopen
6
3k
地方企業がクラウドを活用するヒント
miu_crescent
PRO
1
110
20250129 Findy_テスト高活用化
dshirae
0
220
Site Reliability Engineering on Kubernetes
nwiizo
6
4.4k
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
89
5.8k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Statistics for Hackers
jakevdp
797
220k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.5k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Typedesign – Prime Four
hannesfritz
40
2.5k
For a Future-Friendly Web
brad_frost
176
9.5k
Navigating Team Friction
lara
183
15k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Transcript
GPU上でのNLP向け深層学習 の実装について (株)Preferred Infrastructure 海野 裕也
概要 l データごとに構造の異異なる⾃自然⾔言語処理理の様な 分野で、効率率率的な学習をするにはどうすればよ いか? l 論論⽂文ベースで幾つかの⼯工夫を紹介 2
確率率率的勾配降降下法 until converge: for x, y in trianing data: grad
= calc_grad(x, y) update(w, grad) 3 こちらの並列列化は限度度がある こちらの並列列度度を上げる
ミニバッチ並列列化 until converge: for {x, y} in trianing data: grad
= calc_grad({x, y}) update(w, grad) 4 ⼀一度度にたくさん計算する 並列列に計算できる
ミニバッチの勾配計算の例例(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はミニバッチサイズ ⾏行行列列計算ライブラリに並列列化を押し込む
⾔言語処理理でのミニバッチ並列列化の問題 l = 0 for x, y in sentence: l
= l + dot(softmax(dot(W, h)), y) c, h = LSTM(c, h, x) 6 ループ回数がデータ依存
ミニバッチ並列列(Bunch training) l 複数⽂文をいっぺんに学習 l ⽂文⻑⾧長の差分はNULL(特別な記号)で埋めてごまかす 7
NULL埋めによる無駄 8 l ⽂文⻑⾧長はガンマ分布に従うとして[古橋12]、複数サンプリ ングした中で最⼤大⻑⾧長に合わせた時の計算効率率率をプロット 0 0.2 0.4 0.6 0.8
1 1.2 1 2 4 8 16 32 64 128 256
Sentence splicing [Chen+14] l NULLで埋めずに、次々に⽂文を処理理する l 実装は単純ではない気がするが 9
Splicingの効果 l Splicingしないと、50並列列程度度で性能は頭打ち 10
Pipeline [Chen+15] l 層ごとにGPUが担当して、層が深くなるごとに別GPUが 計算を⾏行行う 11
短いチャンクに切切る[Doetsch+14] l 単に短いチャンクに切切って並列列度度を上げる l NULLの量量も減る l 本当に⻑⾧長い依存は学習できなくなる 12
計算グラフを解析 [Hwang+15] l 計算グラフを強連結成分分解 l Recurrentの部分は1つの強連結成分に押し込める l 各強連結成分ごとに並列列計算する 13
⾃自動並列列化の効果 l 単⼀一ストリームでもスループット向上 l ストリーム数が増えると性能は変わらない 14
おまけ:Bucketing l 予め幾つかの⽂文⻑⾧長⽤用のネットワークを⽤用意して、 処理理データが収まる最⼩小のネットワークを利利⽤用 する l TensorFlowで使われている 15
並列列化の⼯工夫まとめ l ゼロ埋め l ⽂文⻑⾧長の違うデータに0を埋めて、無理理やり計算 l スプライシング l ストリームごとに次々データを流流す l
パイプライン l 層ごとに別GPUを割り当ててスループットを稼ぐ l チャンク l ⽂文を無理理やり切切って⽂文⻑⾧長の差を緩和 l グラフ解析 l 計算系列列中の独⽴立立部分を抽出して⾃自動割当 16
この辺から本題 l 今までみたのは全てシンプルなRecurrentだった ので、基本的に⽂文⻑⾧長(EOSのタイミング)しか 違いがない l より複雑なネットワークの並列列処理理には更更に⼯工 夫が必要 l Encoder-decoderモデル
l Recursive neural network l Attentionモデル系 l Memory networks系 17
並列列化のレベル l GPUデバイス内 l SIMD, メモリ, スレッド, カーネル l メモリ帯域:
~1TB/sec l GPUデバイス間(マルチGPU) l PCI-ex (~100GB/sec) l マシン間 l InfiniBand (~50GB/sec), Ethernet (~1GB/sec) 18
バッチ vs オンライン l ミニバッチサイズを増やしても実時間での精度度 向上が早くなってないように感じる l バッチ学習とオンライン学習と同じ議論論 l 更更新頻度度をあげようとすると、CPUの⽅方が有利利
な可能性は無いか? 19
実装レベルで⽐比較
⽬目についた実装を調査 l Embedding l Recurrent l Recursive 21
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
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
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