hcj2014 myui
DESCRIPTION
Slide@Hadoop Conference Japan 2014 Video http://www.ustream.tv/recorded/49697833TRANSCRIPT
独)産業技術総合研究所情報技術研究部門
油井誠
[email protected], @myui
Hivemall: Apache Hiveを用いたスケーラブルな機械学習基盤
Hadoop Conference Japan 2014
English-version of this slide available onbit.ly/hivemall-slide
1 / 42
発表の構成
• 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
What is Hivemall
• Hiveのユーザ定義関数またはユーザ定義テーブル生成関数として実装された機械学習ライブラリ
• クラス分類と回帰分析
•推薦
• K近傍探索.. and more
•オープンソースプロジェクト• LGPLライセンス• github.com/myui/hivemall (bit.ly/hivemall)
• コントリビュータは現在4人
Hadoop Conference Japan 2014
3 / 42
リリースへの反応
Hadoop Conference Japan 2014
4 / 42
リリースへの反応
Hadoop Conference Japan 2014
5 / 42
Hadoop Conference Japan 2014
Motivation –何故新しい機械学習基盤?
Mahout?
Vowpal Wabbit?(w/ Hadoop streaming)
Spark MLlib?
0xdata H2O? Cloudera Oryx?
既に巷にあるHadoopと協調動作する機械学習フレームワーク
Quick Poll: 現在いずれかのレームワークを使っていますか?
6 / 42
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
Hadoop Conference Japan 2014
Mahoutを利用したクラス分類
org/apache/mahout/classifier/sgd/TrainNewsGroups.java
Find the complete code at bit.ly/news20-mahout
8 / 42
Hadoop Conference Japan 2014
Why Hivemall
1. 利用が簡単• プログラミング不要
• 全ての機械学習のステップがHiveQLクエリで完結
• コンパイルやパッケージングが不要• 既存Hiveユーザにフレンドリー
• 5分もあればHivemallの簡易例を実行可能• インストールは次のとおり簡単
9 / 42
Hadoop Conference Japan 2014
Why Hivemall
2. データに対してスケーラブル• 訓練事例/テスト事例の数に対してスケーラブル
• 特徴数に対してスケーラブル• Feature hashingと呼ばれるテクニックによる特徴数の削減をサポート
• 学習モデルのサイズに対してスケーラブル• 200ラベル* 1億の特徴⇒ 150GBのメモリが必要• Hivemallは学習時やテスト時に予測モデル全体がメモリに収まる必要がない
• 特徴エンジニアリングに関してもHiveを利用した並列処理によってスケーラブルに実行可能
10 / 42
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
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
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
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
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
Hadoop Conference Japan 2014
Why Hivemall
4. 最新のオンライン学習アルゴリズムをサポート(クラス分類)• 学習の収束速度が早い
• 確信度が十分な重みについては小さな更新を行う
• 確信度が低い重みについては大きな更新を行う (e.g., 学習の初期)
• 極少ないイテレーションで収束する
16 / 42
発表の構成
• What is Hivemall
• Why Hivemall
• What Hivemall can do
• How to use Hivemall
• How Hivemall works• イテレーションへの対処方法(Sparkと比較)
•性能評価
•まとめ
Hadoop Conference Japan 2014
17 / 42
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
Hadoop Conference Japan 2014
How to use Hivemall
MachineLearning
Training
Prediction
PredictionModel
Label
Feature Vector
Feature Vector
Label
Data preparation19 / 42
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
Hadoop Conference Japan 2014
How to use Hivemall
MachineLearning
Training
Prediction
PredictionModel
Label
Feature Vector
Feature Vector
Label
Feature Engineering
21 / 42
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
Hadoop Conference Japan 2014
How to use Hivemall
MachineLearning
Training
Prediction
PredictionModel
Label
Feature Vector
Feature Vector
Label
Training
23 / 42
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
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
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
Hadoop Conference Japan 2014
How to use Hivemall
MachineLearning
Training
Prediction
PredictionModel
Label
Feature Vector
Feature Vector
Label
Prediction
27 / 42
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
発表の構成
• What is Hivemall
• Why Hivemall
• What Hivemall can do
• How to use Hivemall
• How Hivemall works• イテレーションへの対処方法(Sparkと比較)
•性能評価
•まとめ
Hadoop Conference Japan 2014
29 / 42
ユーザ定義テーブル生成関数として機械学習を実装している
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
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
如何に反復処理と向き合うか
機械学習ではよい予測精度を得るためには反復処理が不可欠
• 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
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
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は次のイテレーションで各ワーカに送信される
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
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
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
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
発表の構成
• What is Hivemall
• Why Hivemall
• What Hivemall can do
• How to use Hivemall
• How Hivemall works• イテレーションへの対処方法(Sparkと比較)
•性能評価
•まとめ
Hadoop Conference Japan 2014
39 / 42
性能評価
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
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
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