hcj2014 myui

42
独)産業技術総合研究所 情報技術研究部門 油井 誠 [email protected], @myui Hivemall: Apache Hiveを用いたスケーラ ブルな機械学習基盤 Hadoop Conference Japan 2014 English-version of this slide available on bit.ly/hivemall-slide 1 / 42

Upload: makoto-yui

Post on 10-May-2015

6.868 views

Category:

Documents


2 download

DESCRIPTION

Slide@Hadoop Conference Japan 2014 Video http://www.ustream.tv/recorded/49697833

TRANSCRIPT

Page 1: Hcj2014 myui

独)産業技術総合研究所情報技術研究部門

油井誠

[email protected], @myui

Hivemall: Apache Hiveを用いたスケーラブルな機械学習基盤

Hadoop Conference Japan 2014

English-version of this slide available onbit.ly/hivemall-slide

1 / 42

Page 2: Hcj2014 myui

発表の構成

• What is Hivemall

• Why Hivemall

• What Hivemall can do

• How to use Hivemall

• How Hivemall works• イテレーションへの対処方法(Sparkと比較)

•性能評価

•まとめ

Hadoop Conference Japan 2014

基本的にHadoop Summit 2014, San Joseで喋った内容を踏襲しております

2 / 42

Page 3: Hcj2014 myui

What is Hivemall

• Hiveのユーザ定義関数またはユーザ定義テーブル生成関数として実装された機械学習ライブラリ

• クラス分類と回帰分析

•推薦

• K近傍探索.. and more

•オープンソースプロジェクト• LGPLライセンス• github.com/myui/hivemall (bit.ly/hivemall)

• コントリビュータは現在4人

Hadoop Conference Japan 2014

3 / 42

Page 4: Hcj2014 myui

リリースへの反応

Hadoop Conference Japan 2014

4 / 42

Page 5: Hcj2014 myui

リリースへの反応

Hadoop Conference Japan 2014

5 / 42

Page 6: Hcj2014 myui

Hadoop Conference Japan 2014

Motivation –何故新しい機械学習基盤?

Mahout?

Vowpal Wabbit?(w/ Hadoop streaming)

Spark MLlib?

0xdata H2O? Cloudera Oryx?

既に巷にあるHadoopと協調動作する機械学習フレームワーク

Quick Poll: 現在いずれかのレームワークを使っていますか?

6 / 42

Page 7: Hcj2014 myui

Framework User interface

Mahout Java API プログラミング

Spark MLlib/MLI Scala API プログラミングScala Shell (REPL)

H2O R プログラミングGUI

Cloudera Oryx Http REST API プログラミング

Vowpal Wabbit(w/ Hadoop streaming)

C++ API プログラミングコマンドライン

Hadoop Conference Japan 2014

Motivation – 何故新しい機械学習基盤?

既存の分散機械学習フレームワークは利用するのにプログラミングが必要で敷居が高い

7 / 42

Page 8: Hcj2014 myui

Hadoop Conference Japan 2014

Mahoutを利用したクラス分類

org/apache/mahout/classifier/sgd/TrainNewsGroups.java

Find the complete code at bit.ly/news20-mahout

8 / 42

Page 9: Hcj2014 myui

Hadoop Conference Japan 2014

Why Hivemall

1. 利用が簡単• プログラミング不要

• 全ての機械学習のステップがHiveQLクエリで完結

• コンパイルやパッケージングが不要• 既存Hiveユーザにフレンドリー

• 5分もあればHivemallの簡易例を実行可能• インストールは次のとおり簡単

9 / 42

Page 10: Hcj2014 myui

Hadoop Conference Japan 2014

Why Hivemall

2. データに対してスケーラブル• 訓練事例/テスト事例の数に対してスケーラブル

• 特徴数に対してスケーラブル• Feature hashingと呼ばれるテクニックによる特徴数の削減をサポート

• 学習モデルのサイズに対してスケーラブル• 200ラベル* 1億の特徴⇒ 150GBのメモリが必要• Hivemallは学習時やテスト時に予測モデル全体がメモリに収まる必要がない

• 特徴エンジニアリングに関してもHiveを利用した並列処理によってスケーラブルに実行可能

10 / 42

Page 11: Hcj2014 myui

Hadoop Conference Japan 2014

Why Hivemall

3. 計算資源に対してスケーラブル• HadoopとHiveの利点を活用• Amazon Elastic MapReduce(EMR)による機械学習サービスのProvisioningが可能➞ EMRのHive環境にHivemallを自動セットアップするEMR bootstrapを用意している

Find an example on bit.ly/hivemall-emr

11 / 42

Page 12: Hcj2014 myui

Hadoop Conference Japan 2014

Why Hivemall

4. 最新のオンライン学習アルゴリズムをサポート(クラス分類)• ハイパーパラメータ/設定の細かい調整をしなくても十分な精度が出る (確率的勾配降下法ベースの場合は学習率の調整が困難)

• CW, AROW[1], SCW[2]のような最先端の機械学習アルゴリズムはMahout/Sparkではサポートされていない

• 学習の収束が高速• 一般的には10イテレーションが必要なところでもCW以降では2~3イテレーションもあれば収束する

1. Adaptive Regularization of Weight Vectors (AROW), Crammer et al., NIPS 20092. Exact Soft Confidence-Weighted Learning (SCW), Wang et al., ICML 2012

12 / 42

Page 13: Hcj2014 myui

Hadoop Conference Japan 2014

Why Hivemall

AlgorithmsNews20.binary

Classification Accuracy

Perceptron 0.9460 Passive-Aggressive(a.k.a. Online-SVM)

0.9604

LibLinear 0.9636 LibSVM/TinySVM 0.9643 Confidence Weighted (CW) 0.9656 AROW [1] 0.9660 SCW [2] 0.9662

精度が良い

4. 最新のオンライン学習アルゴリズムをサポート(クラス分類)

CWやその改良は賢いオンライン機械学習アルゴリズム

13 / 42

Page 14: Hcj2014 myui

Hadoop Conference Japan 2014

CWの精度が何故よいか?

文章をpositiveかnegativeかに分類する二値分類を想定してみる→ 単語(特徴)ごとに重みを計算する

I like this authorPositive

I like this author, but found this book dullNegative

Label Feature Vector(特徴ベクトル)

ナイーブな学習手法では重み を同様に更新するWlikeWdull

CWでは重みごとに異なる更新を行う

14 / 42

Page 15: Hcj2014 myui

Hadoop Conference Japan 2014

CWの精度が何故よいか?

weight

weight

重みを更新する

重みと確信度を更新する

0.6 0.80.6

0.80.6

At this confidence, the weight is 0.5

共分散(確信度)

0.5

15 / 42

Page 16: Hcj2014 myui

Hadoop Conference Japan 2014

Why Hivemall

4. 最新のオンライン学習アルゴリズムをサポート(クラス分類)• 学習の収束速度が早い

• 確信度が十分な重みについては小さな更新を行う

• 確信度が低い重みについては大きな更新を行う (e.g., 学習の初期)

• 極少ないイテレーションで収束する

16 / 42

Page 17: Hcj2014 myui

発表の構成

• What is Hivemall

• Why Hivemall

• What Hivemall can do

• How to use Hivemall

• How Hivemall works• イテレーションへの対処方法(Sparkと比較)

•性能評価

•まとめ

Hadoop Conference Japan 2014

17 / 42

Page 18: Hcj2014 myui

Hadoop Conference Japan 2014

What Hivemall can do

• クラス分類(二値分類/多値分類) Perceptron Passive Aggressive (PA) Confidence Weighted (CW) Adaptive Regularization of Weight Vectors (AROW) Soft Confidence Weighted (SCW)

•回帰分析 確率的勾配降下法に基づくロジスティック回帰 PA Regression AROW Regression

• K近傍法 & レコメンデーション Minhashとb-Bit Minhash (LSH variant) 類似度に基づくK近傍探索(cosine similarity)

• Feature engineering Feature hashing Feature scaling (normalization, z-score)

18 / 42

Page 19: Hcj2014 myui

Hadoop Conference Japan 2014

How to use Hivemall

MachineLearning

Training

Prediction

PredictionModel

Label

Feature Vector

Feature Vector

Label

Data preparation19 / 42

Page 20: Hcj2014 myui

Hadoop Conference Japan 2014

Create external table e2006tfidf_train (rowid int,label float,features ARRAY<STRING>

) ROW FORMAT DELIMITED

FIELDS TERMINATED BY '¥t' COLLECTION ITEMS TERMINATED BY ",“

STORED AS TEXTFILE LOCATION '/dataset/E2006-tfidf/train';

How to use Hivemall –データの準備

訓練とテストデータ用のテーブルを定義HDFSに置いた(HiveのSERDEでパース可能な)任意フォーマットのデータを利用可能

20 / 42

Page 21: Hcj2014 myui

Hadoop Conference Japan 2014

How to use Hivemall

MachineLearning

Training

Prediction

PredictionModel

Label

Feature Vector

Feature Vector

Label

Feature Engineering

21 / 42

Page 22: Hcj2014 myui

Hadoop Conference Japan 2014

create view e2006tfidf_train_scaled asselect

rowid,rescale(target,${min_label},${max_label})

as label,features

from e2006tfidf_train;

Min-Max正規化による特徴量の正規化

How to use Hivemall - Feature Engineering

Target値を0~1の範囲に変換

22 / 42

Page 23: Hcj2014 myui

Hadoop Conference Japan 2014

How to use Hivemall

MachineLearning

Training

Prediction

PredictionModel

Label

Feature Vector

Feature Vector

Label

Training

23 / 42

Page 24: Hcj2014 myui

Hadoop Conference Japan 2014

How to use Hivemall - Training

CREATE TABLE lr_model ASSELECT

feature,avg(weight) as weight

FROM (SELECT logress(features,label,..)

as (feature,weight)FROM train

) tGROUP BY feature

ロジスティック回帰による学習

予測モデルを学習するmap-onlyのtask

Featureの値によってmap出力結果をreducerにShuffle

特徴ごとに学習した重みの平均を取る処理をreducer側で並列に処理

24 / 42

Page 25: Hcj2014 myui

Hadoop Conference Japan 2014

How to use Hivemall - Training

CREATE TABLE news20b_cw_model1 ASSELECT

feature,voted_avg(weight) as weight

FROM(SELECT

train_cw(features,label) as (feature,weight)

FROMnews20b_train

) t GROUP BY feature

Confidence Weightedによる学習

投票に基づきPositive or Negativeな重みの平均

+0.7, +0.3, +0.2, -0.1, +0.7

CWクラス分類器による学習

25 / 42

Page 26: Hcj2014 myui

Hadoop Conference Japan 2014

create table news20mc_ensemble_model1 asselect label, cast(feature as int) as feature,cast(voted_avg(weight) as float) as weightfrom (select

train_multiclass_cw(addBias(features),label) as (label,feature,weight)

from news20mc_train_x3

union allselect

train_multiclass_arow(addBias(features),label) as (label,feature,weight)

from news20mc_train_x3

union allselect

train_multiclass_scw(addBias(features),label)as (label,feature,weight)

from news20mc_train_x3

) t group by label, feature;

アンサンブル学習 for stable prediction performance

個別に学習した予測モデルをUnion allでまとめる

26 / 42

Page 27: Hcj2014 myui

Hadoop Conference Japan 2014

How to use Hivemall

MachineLearning

Training

Prediction

PredictionModel

Label

Feature Vector

Feature Vector

Label

Prediction

27 / 42

Page 28: Hcj2014 myui

Hadoop Conference Japan 2014

How to use Hivemall - Prediction

CREATE TABLE lr_predict asSELECTt.rowid, sigmoid(sum(m.weight)) as prob

FROMtesting_exploded t LEFT OUTER JOINlr_model m ON (t.feature = m.feature)

GROUP BY t.rowid

予測はテスト事例と予測モデルのLEFT OUTER JOINによって行う予測モデル全体をメモリに載せる必要がない

28 / 42

Page 29: Hcj2014 myui

発表の構成

• What is Hivemall

• Why Hivemall

• What Hivemall can do

• How to use Hivemall

• How Hivemall works• イテレーションへの対処方法(Sparkと比較)

•性能評価

•まとめ

Hadoop Conference Japan 2014

29 / 42

Page 30: Hcj2014 myui

ユーザ定義テーブル生成関数として機械学習を実装している

Hadoop Conference Japan 2014

Hivemallでどのように学習が行われるか

+1, <1,2>..+1, <1,7,9>

-1, <1,3, 9>..+1, <3,8>

tuple<label, array<features>>

tuple<feature, weights>

Prediction model

UDTF

Relation<feature, weights>

param-mix param-mix

Training table

Shuffle by feature

train train

Hiveのリレーショナル問合せ処理エンジンに適している

• 結果として出力される予測モデルは特徴とその重みからなるリレーション

Embarrassingly parallel• Mapper数とreducer数はそれぞれ設定可能

Baggingと似た効果分類器の学習結果のvarianceを

減らす(ランダムフォレストの決定木で過学習が減るのと同様の理屈)

30 / 42

Page 31: Hcj2014 myui

Hadoop Conference Japan 2014

train train

+1, <1,2>..+1, <1,7,9>

-1, <1,3, 9>..+1, <3,8>

merge

tuple<label, array<features >

array<weight>

array<sum of weight>, array<count>

Training table

Prediction model

-1, <2,7, 9>..+1, <3,8>

final merge

merge

-1, <2,7, 9>..+1, <3,8>

train train

array<weight>

Why not UDAF

4 ops in parallel

2 ops in parallel

No parallelism

機械学習を集約関数として実行するアプローチMadlib、Bismarckなどの機械学習 on RDBMSはこのアプローチ

Final mergeがボトルネックになるFinal mergeのFan-outによってスループットが律速される

メモリ消費量が増える

並列度が下がる

31 / 42

Page 32: Hcj2014 myui

如何に反復処理と向き合うか

機械学習ではよい予測精度を得るためには反復処理が不可欠

• MapReduceはIN/OUTがHDFSを介すために反復処理には適さない(注: Tezを利用した場合はHDFSのIN/OUTがスキップ可能)

• Sparkはオンメモリ処理によって効率的に反復を扱う

iter. 1 iter. 2 . . .

Input

HDFSread

HDFSwrite

HDFSread

HDFSwrite

iter. 1 iter. 2

InputHadoop Conference Japan 2014

32 / 42

Page 33: Hcj2014 myui

val data = spark.textFile(...).map(readPoint).cache()

for (i <- 1 to ITERATIONS) {val gradient = data.map(p =>(1 / (1 + exp(-p.y*(w dot p.x))) - 1) * p.y * p.x

).reduce(_ + _)w -= gradient

}反復的なMapReduceで勾配降下を行う

個々のノードで担当パーティションをメモリにキャッシュ

これは単なるtoy example! Why?

Sparkにおける反復学習

Logistic Regression example of Spark

勾配の計算に使う訓練例は反復ごとに異なるものを利用する必要がある(そうしないと精度がでないし、より多くの反復が必要となる)

Hadoop Conference Japan 2014

33 / 42

Page 34: Hcj2014 myui

Hadoop Conference Japan 2014

Spark Mllibでは実際どうなっている?

Val data = ..

for (i <- 1 to numIterations) {val sampled = val gradient =

w -= gradient}

サンプリングを利用したMini-batch勾配降下法

それぞれのイテレーションではデータの一部だけを利用するため、反復処理は学習の収束に不可欠

GradientDescent.scalabit.ly/spark-gd

データのサブセットをサンプリング

Spark MapReduceを利用してSampled[1..N]の勾配をN個のワーカで並列に計算してN個の予測モデルを構築し、N個のご予測モデルをマスターノードで(逐次的に)マージ

34 / 42

Wは次のイテレーションで各ワーカに送信される

Page 35: Hcj2014 myui

Hivemallでどのように反復に対処?

Hivemallでは、複数のMapReduce Jobを利用した反復処理なしに機械学習における反復学習の効果をエミュレートするためにamplify UDTFを提供

SET hivevar:xtimes=3;

CREATE VIEW training_x3asSELECT

* FROM (

SELECTamplify(${xtimes}, *) as (rowid, label, features)FROMtraining

) tCLUSTER BY RANDOM

Hadoop Conference Japan 2014

入力データを増幅してshuffleする

35 / 42

Page 36: Hcj2014 myui

Map-only shuffling and amplifying

rand_amplify UDTFはmapタスク内で入力された訓練事例を増幅&shuffleする

CREATE VIEW training_x3asSELECT

rand_amplify(${xtimes}, ${shufflebuffersize}, *) as (rowid, label, features)

FROMtraining;

Hadoop Conference Japan 2014

36 / 42

Page 37: Hcj2014 myui

map-local shuffleを利用した場合の実行プラン

Shuffle (distributed by feature)R

edu

ce task

Merge

Aggregate

Reduce write

Map

task

Table scan

Rand Amplifier

Map write

Logress UDTF

Partial aggregate

Map

task

Table scan

Rand Amplifier

Map write

Logress UDTF

Partial aggregate

Red

uce task

Merge

Aggregate

Reduce write

スキャンされた行が増幅されてバッファリングされてshuffleされるなお、このオペレータはパイプライン処理される

Rand amplifierオペレータがテーブルスキャンオペレータと学習を行うオペレータの間に挿入される

Hadoop Conference Japan 2014

37 / 42

Page 38: Hcj2014 myui

Hadoop Conference Japan 2014

Method 実行時間(秒)AUC

(予測精度)

Plain 89.718 0.734805

amplifier+clustered by(a.k.a. global shuffle)

479.855 0.746214

rand_amplifier(a.k.a. map-local shuffle)

116.424 0.743392

Amplifiersの性能への影響

map-local shuffleを利用することで受容可能なオーバヘッドで予測精度が向上

38 / 42

Page 39: Hcj2014 myui

発表の構成

• What is Hivemall

• Why Hivemall

• What Hivemall can do

• How to use Hivemall

• How Hivemall works• イテレーションへの対処方法(Sparkと比較)

•性能評価

•まとめ

Hadoop Conference Japan 2014

39 / 42

Page 40: Hcj2014 myui

性能評価

Hivemallと最先端の機械学習フレームワークの性能を比較• 比較対象

• Vowpal Wabbit、Bismarck、Spark 1.0 MLlib• データセット

KDD Cup 2012, Track 2データセット中国の検索エンジンプロバイダから提供された実データセット機械学習のPublicなデータセットとしても最も大きい規模のもの

• 訓練データは2億レコード以上(33GB)• 特徴数は5千万以上

• タスク検索エンジン広告の広告クリックスルー率(CTR)推定

• テスト環境33のコモディティサーバからなるインハウスのクラスタ• 32ノードがHadoopのSlaveノード• 個々のノードは8物理コアと24GBの主記憶からなる

bit.ly/hivemall-kdd-datasetHadoop Conference Japan 2014

40 / 42

Page 41: Hcj2014 myui

Hadoop Conference Japan 2014

116.4

596.67

493.81

755.24

465

0

100

200

300

400

500

600

700

800

Hivemall VW1 VW32 Bismarck Spark 1.0

0.64

0.66

0.68

0.7

0.72

0.74

0.76

Hivemall VW1 VW32 Bismarck

スループット: 2.3 million tuples/sec on 32 nodesレイテンシ: 235 million records(33GB)の学習に2分以内

性能比較

予測性能(AUC)がよい

学習時間(秒)が短い

41 / 42

Page 42: Hcj2014 myui

Hadoop Conference Japan 2014

本日のまとめ

Hiveのユーザ定義関数またはユーザ定義テーブル

生成関数として実装されたオープンソースの機械学習ライブラリ

利用が簡単 計算資源に対してスケールする

Amazon EMRでも動作する 最先端のオンライン機械学習をサポート Spark SQLでの動作を検証予定 Apache Incubator化(するかも?) コントリビュータ募集

プロジェクトサイト:github.com/myui/hivemall or bit.ly/hivemall

最後に: 是非Hivemallをご自身で評価ください5分もあればクイックスタートは動かせるはずです

Slide available onbit.ly/hcj14-hivemall

42 / 42