HivemallとSpark MLlibの比較
-
Upload
makoto-yui -
Category
Data & Analytics
-
view
2.448 -
download
3
Transcript of HivemallとSpark MLlibの比較
独)産業技術総合研究所情報技術研究部門
データサイエンス研究グループ主任研究員油井誠
@myui
HivemallとSpark MLlibの比較
1
1 / 16
ビッグデータ基盤勉強会(2014/12/11)
はじめに
2
[1] http://www.slideshare.net/myui/sigmodj-myui
Disclaimer:Hivemallについての技術詳細はこれまでに色々なところ1
で話しているので詳しく述べません.また実験の詳細などはスライドではなく口頭説明します
発表内容: HivemallとSpark MLlibの比較
発表趣旨:最初に性能比較から入り,その性能差の理由をそれぞれの動作原理からご紹介する
2 / 16
ビッグデータ基盤勉強会(2014/12/11)
HivemallとSpark MLlib
Hadoop HDFS
MapReduce(MRv1)
Hive/PIGクエリ処理系
Hivemall
Apache YARN
Apache TezDAG処理系
Apache MESOS
Apache SparkDAG処理系
Spark MLlib
MRv2
SparkSQL
分散ファイルシステム
リソース管理システム
並列処理フレームワーク
問合せ処理系
機械学習ライブラリ
3
3 / 16
ビッグデータ基盤勉強会(2014/12/11)
SQLベースの宣言的かつ容易な記述
Hivemallの特徴
Mahoutによるプログラミング
CREATE TABLE lr_model ASSELECTfeature, -- reducers perform model averaging in
parallelavg(weight) as weight
FROM (SELECT logress(features,label,..) as (feature,weight)FROM train
) t -- map-only taskGROUP BY feature; -- shuffled to reducers
一般的なエンジニアでも機械学習を扱える
4
4 / 16
ビッグデータ基盤勉強会(2014/12/11)
SparkとHadoopにおける繰り返し処理
• MapReduceはIN/OUTがHDFSを介すために反復処理には適さない(注: Tezを利用した場合はHDFSのIN/OUTがスキップ可能)
• Sparkはオンメモリ処理によって効率的に反復を扱う
iter. 1 iter. 2 . . .
Input
HDFSread
HDFSwrite
HDFSread
HDFSwrite
iter. 1 iter. 2
Input5
5 / 16
ビッグデータ基盤勉強会(2014/12/11)
性能評価 – KDD Cup 2012 Track2での比較
KDD Cup 2012, Track 2:データ:中国の検索エンジンプロバイダ提供の実データ(機械学習のPublicなデータとして最大級)
訓練データは2億レコード以上、特徴数は5千万以上
タスク:検索エンジン広告の広告クリックスルー率(CTR)推定
6
Sparkでもイテレーションは重い処理
SparkだとAUC 0.6以下
6 / 16
ビッグデータ基盤勉強会(2014/12/11)
性能評価 – KDD Cup 2010のデータセットを用いた比較
KDD Cup 2010a:2クラス分類のPublicデータセットとして最大級 (特徴数: 8百万以上,特徴数2千万以上,2.73GB)
7
Sparkが向いているタスクもある
7 / 16
ビッグデータ基盤勉強会(2014/12/11)
機械学習の基本 –勾配降下法
https://speakerdeck.com/lintool/large-scale-machine-learning-at-twitterより抜粋
実際に学習して求めるのは特徴ごとの重みw
8
9 / 16
ビッグデータ基盤勉強会(2014/12/11)
𝑤𝑡+1 = 𝑤𝑡 − 𝛾𝑡1
𝑛
𝑖=0
𝑛
𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥𝑖 ; 𝑤𝑡), 𝑦)
新しい重み 古い重み
経験損失の勾配
学習率
勾配降下法 (Gradient Descent)
経験損失の勾配を基に重みを更新
9
10 / 16
ビッグデータ基盤勉強会(2014/12/11)
1. Distributed Gradient• 勾配効果法の勾配計算の並列化• 重みの更新は基本的に単一ノード
2. Parameter Mixing• 確率的勾配降下法の学習処理を並列化• 重みの更新が各学習器の計算ノードで行われ,その後モデルの平均化処理が行われる
機械学習の分散処理
機械学習の分散処理手法は基本的にこの2種類かその亜種に分類できる
HivemallやJubatus, Down Pour SGDは②を採用Spark Mllibは①の亜種Vowpal WabbitはAllReduceを利用した①の亜種および②を共にサポート
10
11 / 16
ビッグデータ基盤勉強会(2014/12/11)
Distributed Gradient
𝑤𝑡+1 = 𝑤𝑡 − 𝛾𝑡1
𝑛
𝑖=0
𝑛
𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥𝑖 ; 𝑤𝑡), 𝑦)
mappers
single reducer
勾配をmapperで並列に計算重みの更新をreducerで行う
SGDによる更新も可能
11
12 / 16
ビッグデータ基盤勉強会(2014/12/11)
Distributed Gradient with Mini-batch Updates
正確な勾配を算出できるが更新幅が小さくなりがちで多くのイテレーションが必要
CTR推定ではクリックありの訓練事例数が広告クリックなしに比べて極端に小さい(広告クリック率0.2%程度)ためにSGDの方が向いている
12
13 / 16
ビッグデータ基盤勉強会(2014/12/11)
Spark MLlibでは実際どうなっている?
Val data = ..
for (i <- 1 to numIterations) {val sampled = val gradient =
w -= gradient}
サンプリングを利用したMini-batch勾配降下法で勾配の計算をdistributed gradientで並列化
データのサブセットをサンプリング
Spark MapReduceを利用してSampled[1..N]の勾配をN個のワーカで並列に計算してN個の予測モデルを構築し、N個のご予測モデルをマスターノードで(逐次的に)マージ
Wは次のイテレーションで各ワーカに送信される
13
14 / 16
ビッグデータ基盤勉強会(2014/12/11)
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)
Hivemallにおける工夫
15
学習器1
学習器2
学習器N
パラメタ交換
学習モデル
分割された訓練例
データ並列
データ並列
(モデルパラメタ)
①訓練事例の増幅 ②Mix Serverによるパラメタ交換
16 / 16
ビッグデータ基盤勉強会(2014/12/11)