ヤフー音声認識サービスでのディープラーニングとGPU利用事例

147 Views

July 14, 16

スライド概要

Yahoo! JAPAN 音声認識プラットフォームでのディープラーニングの利用事例と,マルチGPUによる学習の検討
Chainer Meetup #03 http://chainer.connpass.com/event/32917/

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ヤフー音声認識サービスで のディープラーニングとGPU 利用事例 2016年7月2日 Chainer Meetup #03 石井 敬章、○磯部 洋平、磯 健一 (ヤフー株式会社)

2.

自己紹介:ヤフー音声認識チーム • Yahoo! JAPANで使われる 音声認識プラットフォームを開発運用 • 音声認識エンジン&サーバ • スマホ用SDK(Android, iOS) • 組織概要 • データ&サイエンスソリューション 統括本部 • • 2 Yahoo! JAPAN研究所(磯) サイエンス本部(石井,磯部)

3.

目次 1. 音声認識とディープラーニング 2. 学習高速化のためのマルチGPU実験 3. 学習高速化のための検討 3

4.

ヤフーの音声認識サービス:YJVOICE • スマートフォン向け分散型音声認識 • • 語彙数100万語(音声検索,対話) 弊社Android, iOS向けアプリで導入 • 2011年3月サービス開始 • • 4 2013年エンジン内製化 2015年5月にディープラーニング導入

5.

YJVOICEの中のディープラーニング 「あ」等の音を 表現する知識 ディープラーニングの 実装範囲 マイク入力 (音声波形) 音声区間 検出 音響モデル 単語と単語の繋がり 易さを表現する知識 言語モデル 音素列候補の出力 単語列候補の出力 (例) a sh i t a w a ... (例) 明日は ... 音声区間のみ 切り出し 音声認識エンジン ※ 音響モデル:音声データから音素の特徴パターンを確率表現(モデル化)したもの ※ 言語モデル:大規模テキストから単語間の連続のし易さを確率表現(モデル化)したもの 5 認識結果 「明日晴れます」

6.

DNNによる音声区間検出 • 10ミリ秒ごとに“音声”or“非音声”を判別 音声区間 ①音声波形の読込み ... ... ... ... ... ... ... ②音声波形から 特徴量を抽出 特徴量ベクトル40次元 *11フレーム(認識対象1+前後5フレーム) =440次元を入力に利用 ニューラルネットワークの構造:DNN 音声 特徴量 ベクトル 入力層 6 ... ... ... 非音声 音声 (雑音) ... ③DNNによる 音声/非音声の判定 ... 中間層 出力層 非音声

7.

DNNによる音響モデル • 10ミリ秒ごとに“音素”を判別 ①音声と判定された 特徴量を入力 ... ... ... ... ... ... ... ... 特徴量ベクトル40次元 *11フレーム(認識対象1+前後5フレーム) =440次元を入力に利用 ニューラルネットワークの構造:DNN sil-a+sh:0.9 ... ②DNNよる音素の推定 各発音記号の 事後確率 入力層 中間層 出力層 DNN-HMM hybrid 音響モデル 言語処理(発音辞書・言語モデル)へ 7 ... ... /a/sh/i/t/a/… ... ③HMMによる 時系列方向 の処理 ... ※実際は前後のつながりを考慮したtriphone (sil-a+sh a-sh+i sh-i+t i-t+a ...) a-sh+i:0.01 ... ... /a/a/a/sh/sh/i/i/t/a/… 特徴量 ベクトル

8.

DNNによる性能の向上 既存手法から 誤り率が 30〜40%改善 • • • 音声検索1万発話 による文正解率 約3%(1/32)の 学習データ量でもDNN の方が精度が 高い 耐雑音性能の向上 文正解率(%) • 1/32 1/16 1/8 1/4 1/2 1 (DNN=2048x5) GMMの学習データ量を1として DNNの学習データ量を1〜1/32の場合での比較 ※ GMM : Gaussian Mixture Models これまでのデファクト音響モデル 8 GMM

9.

DNN音響モデルの学習 • ツール • TheanoによるGPU学習 • データ量 • 1000時間以上の音声データ • 例:1000時間=590GB(360Mサンプル) • • • 学習時間 • 例:1000時間, 2048x5層, 15epoch • • 9 1サンプル(10ミリ秒)=440次元 440次元*(float32)=1.7KB Tesla M2090で約1ヶ月 TITAN Xで約2週間

10.

GPUを使ったDNN学習 • 学習データをGPUメモリに収まる サイズ(=チャンク)に分割しておく • 1チャンクごとに学習を行う • 学習時、予めGPUメモリに転送する • ミニバッチごとに転送すると効率が悪い … epoch 1 チャンク2 … チャンクN … 10 256 mini batch SGD→ チャンク1 256

11.

雑音重畳学習 • • データ拡張(Data Augmentation) 手法イメージ 通常の音声データ Data0 学習 Data0 NoiseA • 様々なノイズを追加した学習データを 使用することで耐雑音性能を向上 データ量が倍増 • 学習データ12000時間の事例など • 11 … … • DataA Deep Speech 2(Baidu Research) NoiseAに 強いモデル

12.

モデルの学習に関する課題 • 学習データが多い・学習時間が長い • 例 • • 1000時間分の学習データ590GB TITAN Xで2週間 • 雑音重畳学習により学習データが倍増 →高速化が必要! 12

13.

学習高速化のための マルチGPU実験

14.

マルチGPUによる学習 • 複数のGPUを使用して学習 • 手法 • モデル並列 • モデルを分割して全データを学習 • データ並列 • データを分割してモデルを共有 • DNN音響モデルの場合 →密結合なDNNなのでデータ並列 14

15.

マルチGPUデータ並列の実験 実験1: 2GPUによる高速化 • 使用ツール 1. Theano(v0.7) • • マルチGPU非対応 既存の学習スクリプトをデータ並列に 拡張 • 2. Chainer(v1.6) • • 15 参考 https://github.com/uoguelph-mlrg/theano_multi_gpu マルチGPU, データ並列をサポート チュートリアルを参考に実装

16.

ChainerでマルチGPU試行錯誤 その1 1つ目のチャンクデータの処理が終わり, 2つ目のチャンクデータをGPUメモリに のせるとエラー • 原因:GPUメモリ上のcupy.ndarrayが 解放されなかった • 対応:解放されるように実装して回避 • フォーラムの情報が参考になった ↓”.copy()”でdeep copyするように明示して回避 チャンクのループ 終了時に明示↓ 16

17.

ChainerでマルチGPU試行錯誤 その2 GPUに送ったチャンクデータ(cupy.ndarray)からVariableを 作成しようとするとエラー • 原因:cupy.ndarrayにx[1,9,5]のようなアクセスができない • どうやらcupyが未対応だった(v1.6) • チュートリアルのインデックスをシャッフルするやり方をそのまま 使用していた • 対応:GPUに送る前に学習データtrain_x, train_y(numpy)に同じシャッフルをし ておく • numpy.random.get_state()/numpy.random.set_state() • こちらもフォーラムに情報あり 17

18.

マルチGPU結果(1) 1GPUの場合より遅 い Theano, TITAN X *2,1024x5 [sec] 250 synctime 200 calctime 150 100 512 1024 400 2048 multi-2048 4096 Chainer, M2090*2,1024x4 350 300 250 200 ERROR 150 →同期回数を減少 single-4096 multi-1024 multi-512 multi-256 0 single-2048 ミニバッチサイズを 大きくすることで改 善 50 single-1024 • モデルパラメータの 同期がボトルネック single-512 • 100 50 512 18 1024 2048 multi-2048 single-4096 multi-1024 single-2048 multi-512 single-1024 single-512 multi-256 0 4096

19.

マルチGPU結果(2) 実験2: ミニバッチサイズとマルチGPUによる速度変化 1sampleあたりの処理時間[usec] 80 74.2 70 60 50 40 30 23.7 20 25.9 15.8 1.6倍 3.1倍 10 0 256(x1) 16384(x64) 1GPU Theano 16384(x64) 16384(x64) 1GPU 4GPU TensorFlow • TheanoとTensorFlow(TITAN X*4, 同期SGD)を比較 • MAX:ミニバッチサイズ64倍&GPU*4で処理速度約4.7倍 • (まだまだ改良中:データ転送の効率化でもう少し高速化できそう) • 注:初期バッチサイズと同等の精度が出ない • 適切な学習率や初期値などのパラメータ探索が必要 19

20.

マルチGPU考察 • モデルパラメータ同期がボトルネック • ミニバッチサイズを大きくする事で改善 • • 学習パラメータ探索は必要 GPU間通信が高速なHWがベター • GPUの構成を要確認 1. GPU-GPU間で直接通信可能なパターン 2. GPU間の通信にCPUの同期が必要な パターン • 20 $ nvidia-smi topo --matrix コマンド

21.

$ nvidia-smi topo --matrix コマンド例 とあるTITAN X x4環境でのコマンド結果 おそらくCPUを介さず通信できるのはGPU0-GPU1, GPI2-GPU3のみ 21

22.

学習高速化のための検討

23.

学習高速化のために考えること その1 • ハードウェアが重要 • GPU性能の向上 • • • M2090:1ヶ月→TITAN X:2週間→Pascal Pascal 半精度演算(float16) CUDA, cuDNN • • • データの転送速度・転送効率 事例:Baidu Research • • HWに合わせた低レイヤからの最適化 Persistent RNNs • 23 CNN, RNNの高速化 GPUのレジスタを活用してRNNを数十倍の高速化

24.

学習高速化のために考えること その2 • マルチGPUによる並列化 • デバイス間の高速な通信 (インターコネクト) • 例: Infiniband, NVLink • 非同期/分散の最適化アルゴリズム • asynchronous SGD • 通信するデータ量の削減 • 24 例: 1bit-SGD (Microsoft)

25.

学習高速化のために考えること その3 • 複数台での並列化(マルチノード) • Google • • Distributed TensorFlow(r0.8) Microsoft • • CNTK: Computational Network Toolkit 事例:Amazon • Strom, Nikko. "Scalable distributed dnn training using commodity gpu cloud computing." INTERSPEECH. Vol. 7. 2015. • 25 40台までリニアにスケール, 80台まで改善

26.

まとめ • 音声認識のディープラーニングモデル学習 • 大規模な学習データ量 • 学習の高速化が求められる • 高速化のためのマルチGPU • フレームワークの対応状況 • パラメータの同期がボトルネック • 26 • ミニバッチサイズ(同期回数) • デバイス間通信の高速化 • 非同期/分散の最適化アルゴリズム • 通信データ量の削減 マルチノード

27.

ありがとうございました&お知らせ • Interspeech2016 http://www.interspeech2016.org • Sept. 8-12, San Francisco • 音声系の国際学会 • Gold Sponsor • ブース出展 • 採択:Yuya Fujita@音声チーム "Robust DNN-based VAD augmented with phone entropy based rejection of background speech" • 27 音声系エンジニアほかいろいろ募集中 → http://hr.yahoo.co.jp

29.

参考資料 • GTC JAPAN 2015 • 1011:ヤフー音声認識サービス「YJVOICE」におけるディープラーニング 活用事例 • • ICASSP 2016 : Plenary talk (http://2016.ieeeicassp.org/PlenarySpeakers.asp) • Li Deng - Microsoft Research “Deep Learning for AI: From Machine Perception to Machine Cognition” • 29 https://youtu.be/PzyV7cPe5bk http://2016.ieeeicassp.org/SP16_PlenaryDeng_Slides.pdf

30.

参考資料 • 30 Baidu Research : Deep Speech 2 Amodei, Dario, et al. "Deep speech 2: End-to-end speech recognition in english and mandarin." Proceedings of The 33rd International Conference on Machine Learning, pp. 173–182, 2016. • http://jmlr.org/proceedings/papers/v48/amodei16.html • https://arxiv.org/abs/1512.02595

31.

参考資料 • Theano : multi GPU • https://github.com/Theano/Theano/wiki/Using-Multiple-GPUs • https://github.com/uoguelph-mlrg/theano_multi_gpu • Using multiple GPUs — Theano 0.8.2 documentation • • Chainer User Group • Free memory of cupy.ndarray - Google グループ • • https://groups.google.com/d/msg/chainer/E5ygPRt-hD8/YHIz7FHbBQAJ ミニバッチ学習でのデータシャッフルの方法 (GPUを使って学習する場合) - Google グループ • 31 http://deeplearning.net/software/theano/tutorial/using_multi_gpu.html https://groups.google.com/d/msg/chainer/ZNyjR2Czo1c/uNVeHuTXAwAJ

32.

参考資料 • • 32 Baidu Research : Persistent RNNs Diamos, Gregory, et al. "Persistent RNNs: Stashing Recurrent Weights On-Chip." Proceedings of The 33rd International Conference on Machine Learning, pp. 2024–2033, 2016. • https://svail.github.io/persistent_rnns/ • http://jmlr.org/proceedings/papers/v48/diamos16.html • https://github.com/baidu-research/persistent-rnn Microsoft : 1bit-SGD Seide, Frank, et al. "1-bit stochastic gradient descent and its application to data-parallel distributed training of speech DNNs." INTERSPEECH. 2014. • https://www.microsoft.com/en-us/research/publication/1-bit-stochasticgradient-descent-and-application-to-data-parallel-distributed-training-ofspeech-dnns/ • http://www.isca-speech.org/archive/interspeech_2014/i14_1058.html

33.

参考資料 • • 33 Google : Tensorflow (Distributed Tensorflow) • https://www.tensorflow.org • https://research.googleblog.com/2016/04/announcing-tensorflow08-now-with.html Microsoft : CNTK • https://cntk.ai • https://blogs.technet.microsoft.com/inside_microsoft_research/201 5/12/07/microsoft-computational-network-toolkit-offers-mostefficient-distributed-deep-learning-computational-performance/

34.

参考資料 • Amazon Strom, Nikko. "Scalable distributed dnn training using commodity gpu cloud computing." INTERSPEECH. Vol. 7. 2015. • • 34 http://www.nikkostrom.com/publications/interspeech2015/strom_inter speech2015.pdf http://www.isca-speech.org/archive/interspeech_2015/i15_1488.html