HivemallとSpark MLlibの比較2. はじめに
2
[1] http://www.slideshare.net/myui/sigmodj-myui
Disclaimer:
Hivemallについての技術詳細はこれまでに色々なところ1 で話しているので詳しく述べません.また実験の詳細など はスライドではなく口頭説明します
発表内容:HivemallとSpark MLlibの比較
発表趣旨:最初に性能比較から入り,その性能差の理由 をそれぞれの動作原理からご紹介する
2 / 16
ビッグデータ基盤勉強会(2014/12/11)
3. HivemallとSpark MLlib
Hadoop HDFS
MapReduce
(MRv1)
Hive/PIG
クエリ処理系
Hivemall
Apache YARN
Apache Tez
DAG処理系
Apache MESOS
Apache Spark
DAG処理系
Spark MLlib
MR
v2
SparkSQL
分散ファイルシステム
リソース管理システム
並列処理フレームワーク
問合せ処理系
機械学習ライブラリ
3
3 / 16
ビッグデータ基盤勉強会(2014/12/11)
4. SQLベースの宣言的かつ容易な記述
Hivemallの特徴
Mahoutによるプログラミング
CREATE TABLE lr_modelAS
SELECT
feature, --reducers perform model averaging in parallel
avg(weight) as weight
FROM (
SELECT logress(features,label,..) as (feature,weight)
FROM train
) t --map-only task
GROUP BY feature; --shuffled to reducers
一般的なエンジニアでも機械学習を扱える
4
4 / 16
ビッグデータ基盤勉強会(2014/12/11)
6. 性能評価–KDD Cup 2012 Track2での比較
KDD Cup 2012, Track 2:
データ:中国の検索エンジンプロバイダ提供の実データ(機械学習のPublicなデータとして最大級)
訓練データは2億レコード以上、特徴数は5千万以上
タスク:検索エンジン広告の広告クリックスルー率(CTR)推定
6
Sparkでもイテレーション
は重い処理
SparkだとAUC 0.6以下
6 / 16
ビッグデータ基盤勉強会(2014/12/11)
7. 性能評価–KDD Cup 2010のデータセットを用いた比較
KDD Cup 2010a:
2クラス分類のPublicデータセットとして最大級(特徴数: 8百万以上,特徴数2千万以上,2.73GB)
7
Sparkが向いているタスクもある
7 / 16
ビッグデータ基盤勉強会(2014/12/11)
9. 푤푡+1=푤푡−훾푡1 푛 푖=0 푛 훻푙표푠푠(푓(푥푖;푤푡),푦)
新しい重み
古い重み
経験損失の勾配
学習率
勾配降下法(Gradient Descent)
経験損失の勾配
を基に重みを更新
9
10 / 16
ビッグデータ基盤勉強会(2014/12/11)
10. 1.Distributed Gradient
•勾配効果法の勾配計算の並列化
•重みの更新は基本的に単一ノード
2.Parameter Mixing
•確率的勾配降下法の学習処理を並列化
•重みの更新が各学習器の計算ノードで行われ,その 後モデルの平均化処理が行われる
機械学習の分散処理
機械学習の分散処理手法は
基本的にこの2種類かその亜種に分類できる
HivemallやJubatus, Down Pour SGDは②を採用
Spark Mllibは①の亜種
Vowpal WabbitはAllReduceを利用した①の亜種および②を共にサポート
10
11 / 16
ビッグデータ基盤勉強会(2014/12/11)
11. Distributed Gradient
푤푡+1=푤푡−훾푡1 푛 푖=0 푛 훻푙표푠푠(푓(푥푖;푤푡),푦)
mappers
single reducer
勾配をmapperで並列に計算
重みの更新をreducerで行う
SGDによる更新も可能
11
12 / 16
ビッグデータ基盤勉強会(2014/12/11)
12. Distributed Gradientwith Mini-batch Updates
正確な勾配を算出できるが更新幅が
小さくなりがちで多くのイテレーションが必要
CTR推定ではクリックありの訓練事例数が広告クリックなしに比べて
極端に小さい(広告クリック率0.2%程度)ためにSGDの方が向いている
12
13 / 16
ビッグデータ基盤勉強会(2014/12/11)
13. Spark MLlibでは実際どうなっている?
Val data = ..
for (i <-1 to numIterations) {
valsampled =
valgradient =
w -= gradient
}
サンプリングを利用したMini-batch勾配降下法
で勾配の計算をdistributed gradientで並列化
データのサブセットをサンプリング
Spark MapReduceを利用してSampled[1..N]の勾配をN個のワー カで並列に計算してN個の予測モデルを構築し、N個のご予測モデルを マスターノードで(逐次的に)マージ
Wは次のイテレーションで各ワーカに送信される
13
14 / 16
ビッグデータ基盤勉強会(2014/12/11)
14. Parameter Mixing
푤푡+1=푤푡−훾푡훻푙표푠푠(푓(푥;푤푡),푦)
train
train
+1, <1,2>
..
+1, <1,7,9>
-1, <1,3, 9>
..
+1, <3,8>
tuple
<label, featues>
array<weight>
Training
table
-1, <2,7, 9>
..
+1, <3,8>
MIX
-1, <2,7, 9>
..
+1, <3,8>
train
train
array<weight>
データ分割して各学習器でSGDに より並列に重みを算出
重みの統合/平均化処理
14
15 / 16
ビッグデータ基盤勉強会(2014/12/11)
15. Hivemallにおける工夫
15
学習器1
学習器2
学習器N
パラメタ
交換
学習
モデル
分割された訓練例
データ並列
データ並列
(モデルパラメタ)
①訓練事例の増幅
②Mix Serverによるパラメタ交換
16 / 16
ビッグデータ基盤勉強会(2014/12/11)
16. 学習器1
学習器2
学習器N
パラメタ
交換
学習
モデル
分割された訓練例
データ並列
データ並列
(モデルパラメタ)
システム系研究者とタッグを組めそうな話題
超低レイテンシ/Line rateのパラメタ交換
(FPGA+高速ネットワーク)
FPGAボードにNICが刺さっているもので超低レイテンシかつ
機械学習向けのaccumulatorを実現する..など
ビッグデータ基盤勉強会(2014/12/11) 16