Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

51,830 views

Published on

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

Published in: Technology
  • Be the first to comment

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

  1. 1. 石井 敬章、○磯部 洋平、磯 健一 (ヤフー株式会社) ヤフー音声認識サービスで のディープラーニングとGPU 利用事例 2016年7月2日 Chainer Meetup #03
  2. 2. 自己紹介:ヤフー音声認識チーム • Yahoo! JAPANで使われる 音声認識プラットフォームを開発運用 • 音声認識エンジン&サーバ • スマホ用SDK(Android, iOS) • 組織概要 • データ&サイエンスソリューション 統括本部 • Yahoo! JAPAN研究所(磯) • サイエンス本部(石井,磯部) 2
  3. 3. 目次 1. 音声認識とディープラーニング 2. 学習高速化のためのマルチGPU実験 3. 学習高速化のための検討 3
  4. 4. ヤフーの音声認識サービス:YJVOICE • スマートフォン向け分散型音声認識 • 語彙数100万語(音声検索,対話) • 弊社Android, iOS向けアプリで導入 • 2011年3月サービス開始 • 2013年エンジン内製化 • 2015年5月にディープラーニング導入 4
  5. 5. YJVOICEの中のディープラーニング 5 音声認識エンジン 認識結果 ディープラーニングの 実装範囲 マイク入力 (音声波形) 「明日晴れます」 ※ 音響モデル:音声データから音素の特徴パターンを確率表現(モデル化)したもの ※ 言語モデル:大規模テキストから単語間の連続のし易さを確率表現(モデル化)したもの 音声区間 検出 音響モデル 言語モデル 単語列候補の出力 (例) 明日は ... 音素列候補の出力 (例) a sh i t a w a ... 音声区間のみ 切り出し 単語と単語の繋がり 易さを表現する知識 「あ」等の音を 表現する知識
  6. 6. DNNによる音声区間検出 音声区間 ③DNNによる 音声/非音声の判定 非音声 (雑音) 音声 ... ... ... ... ... ... . . . 音声 非音声 入力層 中間層 出力層 特徴量 ベクトル ニューラルネットワークの構造:DNN 6 ①音声波形の読込み ②音声波形から 特徴量を抽出 . . . . . . ... ... ... 特徴量ベクトル40次元 *11フレーム(認識対象1+前後5フレーム) =440次元を入力に利用 • 10ミリ秒ごとに“音声”or“非音声”を判別
  7. 7. DNNによる音響モデル • 10ミリ秒ごとに“音素”を判別 ③HMMによる 時系列方向 の処理 ①音声と判定された 特徴量を入力 ②DNNよる音素の推定 ... ... ... ... ... ... . . . /a/a/a/sh/sh/i/i/t/a/… /a/sh/i/t/a/… ※実際は前後のつながりを考慮したtriphone (sil-a+sh a-sh+i sh-i+t i-t+a ...) . . . 特徴量ベクトル40次元 *11フレーム(認識対象1+前後5フレーム) =440次元を入力に利用 言語処理(発音辞書・言語モデル)へ ... ... ... . . . 入力層 中間層 出力層 特徴量 ベクトル ニューラルネットワークの構造:DNN ... ...... sil-a+sh:0.9 a-sh+i:0.01 各発音記号の 事後確率 DNN-HMM hybrid 音響モデル 7
  8. 8. DNNによる性能の向上 • 既存手法から 誤り率が 30〜40%改善 • 音声検索1万発話 による文正解率 • 約3%(1/32)の 学習データ量でもDNN の方が精度が 高い • 耐雑音性能の向上 8 GMM (DNN=2048x5) 文正解率(%) 1/32 1/16 1/8 1/4 1/2 1 GMMの学習データ量を1として DNNの学習データ量を1〜1/32の場合での比較 ※ GMM : Gaussian Mixture Models これまでのデファクト音響モデル
  9. 9. DNN音響モデルの学習 • ツール • TheanoによるGPU学習 • データ量 • 1000時間以上の音声データ • 例:1000時間=590GB(360Mサンプル) • 1サンプル(10ミリ秒)=440次元 • 440次元*(float32)=1.7KB • 学習時間 • 例:1000時間, 2048x5層, 15epoch • Tesla M2090で約1ヶ月 • TITAN Xで約2週間 9
  10. 10. GPUを使ったDNN学習 • 学習データをGPUメモリに収まる サイズ(=チャンク)に分割しておく • 1チャンクごとに学習を行う • 学習時、予めGPUメモリに転送する • ミニバッチごとに転送すると効率が悪い 10 epoch1 チャンク1 チャンク2 チャンクN minibatchSGD→ … … 256 256 …
  11. 11. 雑音重畳学習 • データ拡張(Data Augmentation) • 手法イメージ • 様々なノイズを追加した学習データを 使用することで耐雑音性能を向上 • データ量が倍増 • 学習データ12000時間の事例など • Deep Speech 2(Baidu Research) 11 Data0 DataANoiseA Data0 NoiseAに 強いモデル 学習 … …通常の音声データ
  12. 12. モデルの学習に関する課題 • 学習データが多い・学習時間が長い • 例 • 1000時間分の学習データ590GB • TITAN Xで2週間 • 雑音重畳学習により学習データが倍増 →高速化が必要! 12
  13. 13. 学習高速化のための マルチGPU実験
  14. 14. マルチGPUによる学習 • 複数のGPUを使用して学習 • 手法 • モデル並列 • モデルを分割して全データを学習 • データ並列 • データを分割してモデルを共有 • DNN音響モデルの場合 →密結合なDNNなのでデータ並列 14
  15. 15. マルチGPUデータ並列の実験 実験1: 2GPUによる高速化 • 使用ツール 1. Theano(v0.7) • マルチGPU非対応 • 既存の学習スクリプトをデータ並列に 拡張 • 参考 https://github.com/uoguelph-mlrg/theano_multi_gpu 2. Chainer(v1.6) • マルチGPU, データ並列をサポート • チュートリアルを参考に実装 15
  16. 16. ChainerでマルチGPU試行錯誤 その1 1つ目のチャンクデータの処理が終わり, 2つ目のチャンクデータをGPUメモリに のせるとエラー • 原因:GPUメモリ上のcupy.ndarrayが 解放されなかった • 対応:解放されるように実装して回避 • フォーラムの情報が参考になった 16 チャンクのループ 終了時に明示↓ ↓”.copy()”でdeep copyするように明示して回避
  17. 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. 18. マルチGPU結果(1) 1GPUの場合より遅 い • モデルパラメータの 同期がボトルネック • ミニバッチサイズを 大きくすることで改 善 →同期回数を減少 18 0 50 100 150 200 250 single-512 multi-256 single-1024 multi-512 single-2048 multi-1024 single-4096 multi-2048 512 1024 2048 4096 [sec] synctime calctime Theano, TITAN X *2,1024x5 0 50 100 150 200 250 300 350 400 single-512 multi-256 single-1024 multi-512 single-2048 multi-1024 single-4096 multi-2048 512 1024 2048 4096 Chainer, M2090*2,1024x4 ERROR
  19. 19. マルチGPU結果(2) 実験2: ミニバッチサイズとマルチGPUによる速度変化 19 • TheanoとTensorFlow(TITAN X*4, 同期SGD)を比較 • MAX:ミニバッチサイズ64倍&GPU*4で処理速度約4.7倍 • (まだまだ改良中:データ転送の効率化でもう少し高速化できそう) • 注:初期バッチサイズと同等の精度が出ない • 適切な学習率や初期値などのパラメータ探索が必要 74.2 23.7 25.9 15.8 0 10 20 30 40 50 60 70 80 256(x1) 16384(x64) 16384(x64) 16384(x64) 1GPU 1GPU 4GPU Theano TensorFlow 1sampleあたりの処理時間[usec] 3.1倍 1.6倍
  20. 20. マルチGPU考察 • モデルパラメータ同期がボトルネック • ミニバッチサイズを大きくする事で改善 • 学習パラメータ探索は必要 • GPU間通信が高速なHWがベター • GPUの構成を要確認 1. GPU-GPU間で直接通信可能なパターン 2. GPU間の通信にCPUの同期が必要な パターン • $ nvidia-smi topo --matrix コマンド 20
  21. 21. $ nvidia-smi topo --matrix コマンド例 21 とあるTITAN X x4環境でのコマンド結果 おそらくCPUを介さず通信できるのはGPU0-GPU1, GPI2-GPU3のみ
  22. 22. 学習高速化のための検討
  23. 23. 学習高速化のために考えること その1 • ハードウェアが重要 • GPU性能の向上 • M2090:1ヶ月→TITAN X:2週間→Pascal • Pascal 半精度演算(float16) • CUDA, cuDNN • CNN, RNNの高速化 • データの転送速度・転送効率 • 事例:Baidu Research • HWに合わせた低レイヤからの最適化 • Persistent RNNs • GPUのレジスタを活用してRNNを数十倍の高速化 23
  24. 24. 学習高速化のために考えること その2 • マルチGPUによる並列化 • デバイス間の高速な通信 (インターコネクト) • 例: Infiniband, NVLink • 非同期/分散の最適化アルゴリズム • asynchronous SGD • 通信するデータ量の削減 • 例: 1bit-SGD (Microsoft) 24
  25. 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. • 40台までリニアにスケール, 80台まで改善 25
  26. 26. まとめ • 音声認識のディープラーニングモデル学習 • 大規模な学習データ量 • 学習の高速化が求められる • 高速化のためのマルチGPU • フレームワークの対応状況 • パラメータの同期がボトルネック • ミニバッチサイズ(同期回数) • デバイス間通信の高速化 • 非同期/分散の最適化アルゴリズム • 通信データ量の削減 • マルチノード 26
  27. 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" • 音声系エンジニアほかいろいろ募集中 → http://hr.yahoo.co.jp 27
  28. 28. 参考資料 • GTC JAPAN 2015 • 1011:ヤフー音声認識サービス「YJVOICE」におけるディープラーニング 活用事例 • https://youtu.be/PzyV7cPe5bk • ICASSP 2016 : Plenary talk (http://2016.ieeeicassp.org/PlenarySpeakers.asp) • Li Deng - Microsoft Research “Deep Learning for AI: From Machine Perception to Machine Cognition” • http://2016.ieeeicassp.org/SP16_PlenaryDeng_Slides.pdf 29
  29. 29. 参考資料 • 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 30
  30. 30. 参考資料 • 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 • http://deeplearning.net/software/theano/tutorial/using_multi_gpu.html • Chainer User Group • Free memory of cupy.ndarray - Google グループ • https://groups.google.com/d/msg/chainer/E5ygPRt-hD8/YHIz7FHbBQAJ • ミニバッチ学習でのデータシャッフルの方法 (GPUを使って学習する場合) - Google グループ • https://groups.google.com/d/msg/chainer/ZNyjR2Czo1c/uNVeHuTXAwAJ 31
  31. 31. 参考資料 • 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-stochastic- gradient-descent-and-application-to-data-parallel-distributed-training-of- speech-dnns/ • http://www.isca-speech.org/archive/interspeech_2014/i14_1058.html 32
  32. 32. 参考資料 • Google : Tensorflow (Distributed Tensorflow) • https://www.tensorflow.org • https://research.googleblog.com/2016/04/announcing-tensorflow- 08-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-most- efficient-distributed-deep-learning-computational-performance/ 33
  33. 33. 参考資料 • Amazon Strom, Nikko. "Scalable distributed dnn training using commodity gpu cloud computing." INTERSPEECH. Vol. 7. 2015. • http://www.nikkostrom.com/publications/interspeech2015/strom_inter speech2015.pdf • http://www.isca-speech.org/archive/interspeech_2015/i15_1488.html 34

×