Machine Learning Casual Talks #8 https://mlct.connpass.com/
分散深層学習 Distributed deep learning
MachineLearningCasual Talks #8[ Lightning Talk ]
View Slide
Hello!I’m Shunsuke Kawai@vaaaaanquishYahoo! JAPANAuction, ML Engineer(あと3日)2
Bigconcept1. ヤフオク!における分散深層学習3
In Yahoo! JAPAN ▶ kukaiによる分散深層学習 (P100 * 2 * 80)- マルチモーダルなDNNモデルを用いたヤフオク! 偽物検知(https://about.yahoo.co.jp/pr/release/2018/11/30a/)- LSTMによる知恵袋の不快投稿検知(https://headlines.yahoo.co.jp/hl?a=20181102-00000007-zdn_n-sci)- DNN-HMMによる音声認識YJVOICE(https://www.slideshare.net/techblogyahoo/yjvoice)- 画像検索、分類…etcMore info:Yahoo! JAPAN、ディープラーニングに特化したスパコンを開発スパコンの省エネランキング「 GREEN500」にて世界第2位を獲得https://about.yahoo.co.jp/pr/release/2017/06/19b/* 画像はhttp://www.hpc.co.jp/zettascaler1.6.htmlより引用4
5偽物検知モデルKaggle Avito Demand Prediction Challenge 1st solutionhttps://www.kaggle.com/c/avito-demand-prediction/discussion/59880 より▶ Avitoコンペ 1st solutionを参考にしたマルチモーダルCNN▶ Kukaiで最大GPU60個使った分散深層学習▶ コンペのモデルを参考にレイヤーの幅や層数、初期パラメータ、Samplerなどの実験▶ Kerasで初期モデル作成、分散化、デプロイ起因でChainerMN、MXNet、fasttextを利用▶ チャットbotとfabricを介した学習の仕組みで前一ヶ月作ってたLGBMなどのモデル群を圧倒
CtoCなe-commerceにおける違反検知の課題▶ 人が見るのには限界がある- 精度が重要▶ データのバラツキ- ニセモノを代表に違反者は全体から見れば少ない (Imbalance data)- カテゴリや価格帯、出品者(ストアetc)によって様々なバラツキ▷ Samplerが重要▶ 常に新しい手法が出続ける- 画像や文言をちょっと変えて出すのが流行ったりする- ユーザの通報や人間の巡回で未学習な手法のデータが増えていく- 定期的な再学習が必要でありpre-trainとして再利用できるモデルは嬉しい→ Overfitに注意する必要がある▷ CVが重要 (目視で見る結果の採用)▷ Samplerが重要▶ サービスの文化や変動の課題- カテゴリや価格帯の変動、バースト- ある程度、長期間のデータを利用しつつデータ量に対して効率良く学習する必要▷ Samplerが重要6* ここでSamplerはChainerならDataset、iterators、PyTorchならDataLoader、Samplerといったクラス
7深層学習に対する工夫▶ Samplerによる正例、負例のコントロール- 学習初期は負例が少なすぎて学習が進まないため5:5からスタート- 徐々に元のデータの比率に戻していく▷ Random minority oversampling▷ Random majority undersampling▶ 機械学習向けカテゴリの再編とサンプリング- ヤフオクの末端カテゴリ数3万3千 + シンボリックリンク- 事業目的で枝分かれ (例:ファッション -> ブランド別 -> ... -> Tシャツ ### ファッション -> Tシャツ ->...)- 目視で全部見て、機械学習観点(テキスト、画像)でそれぞれ分類できる粒度にマッピング- マッピングした辞書の情報を参考に学習データを収集していく▶ Categoricalやそれらになり得る情報をEmbeddingレイヤーで表現- 商品カテゴリなどをEmbeddingする事でカテゴリの位置関係を考慮できる- 数値でも出品時価格などで有効● 偽物かの判定における「数値的な大きさ」の相関小さい特徴量● [-1, 1, 100, 1000, 5000, 10000, 20000, ….]とrangeを設定しそのindexを取る (目視ノウハウが生きる)● サービスの特性として1円出品や負の値が発生するのもカバーしやすい▷ Entity Embeddings of Categorical Variables [1604.06737] Entity Embeddings of Categorical Variables
8分散深層学習に対する工夫▶ 特定ノードでCVを出し現在精度の低いカテゴリの算出しSamplerへ- Samplingのweightにしたり、足りないカテゴリがあればデータ取得のためhadoopクエリを生成▷ Cluster-based sampling▷ [1801.04396] Cost-Sensitive Convolution based Neural Networks for Imbalanced Time-Series Classification▷ [1710.05381] A systematic study of the class imbalance problem in convolutional neural networks▶ 画像同士のphashを計算し同一画像を同一のBatch内でなるべく学習しないように- 特定ノードや空いているメモリ、CPUを計算用に使い計算、GPUに送信し次回以降のSamplerに利用▷ Class-aware sampling [ILSVRC-2015] Winner Solution]▶ 複数のGPUを利用したパラメータ探索- 現在は手動、今後自動にしていきたい ( Optunaとかはその方向性の雰囲気がある...? )CVData AugCalc, SamplingTraining, predict
“分散深層学習は機械学習モデリングとソフトウェアエンジニアリングの総合格闘技9
◎ ヤフオクの分散深層学習○ モデルの工夫とSamplerの工夫について紹介○ 分散する事で高速かつ出来る事も増えるPDCAも回せる!10まとめ
Thank you!11
12ボトルネックとなるインターコネクトに対しInfinibandが使えるのは現状AzureかさくらだけAzureのChainerポチポチ設定が強力ChainerMNにdouble bufferingが入り通信のボトルネックが削減された(2018年5月)AWSのインスタンス申請が厳しめかそのっつさんが各インスタンスで実験Uber社のOSSであるHorovod良いOpenMPIを利用し少ないコード変更ですぐ分散Deep Learning AMIが強力生のdistributed TensorFlowが使いたい場合コード書いてCloud MLのTF_CONFIG設定するだけで分散(ノウハウや分散方法の違いもあり上に比べるとしんどい)個人的なオススメのライブラリとクラウド