HivemallとSpark MLlibの比較

16
独)産業技術総合研究所 情報技術研究部門 データサイエンス研究グループ主任研究員 油井 誠 @myui HivemallSpark MLlibの比較 1 1 / 16 ビッグデータ基盤勉強会(2014/12/11

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)

学習器1

学習器2

学習器N

パラメタ交換

学習モデル

分割された訓練例

データ並列

データ並列(モデルパラメタ)

システム系研究者とタッグを組めそうな話題

超低レイテンシ/Line rateのパラメタ交換(FPGA+高速ネットワーク)

FPGAボードにNICが刺さっているもので超低レイテンシかつ機械学習向けのaccumulatorを実現する..など

16ビッグデータ基盤勉強会(2014/12/11)