Upload
katsushi-yamashita
View
8.406
Download
5
Embed Size (px)
DESCRIPTION
Spot Instance + Spark + MLlibで実現する簡単低コスト高速機械学習 AWS Casual Talks#2 LT 2014/4/18
Citation preview
おまだれ
• @yamakatu
• お仕事:検索方面
• 自称フルスタックイクメンエンジニア • 開発、インフラ、機械学習、統計、検索、育児
• gihyo.jp 連載「Mahoutで体感する機械学習の実践」 • 合言葉は「読まずにはてブだけして」
繰り返し処理@Hadoop? • ここで言うところの繰り返し処理 • 一般的に言うところの「繰り返し処理」というよりも • 前回の計算結果を次の計算で利用するような繰り返し処理
HDFS➡Map➡Shuffle➡Reduce➡HDFS
HDFS➡Map➡Shuffle➡Reduce➡HDFS
HDFS➡Map➡Shuffle➡Reduce➡HDFS
Why ? • Disk I/O
1. 前回の出力をHDFS経由で入力値として受け取る • そのまま持っとけよ。。。
2. さらにMap処理の出力は各ノードのローカルディスク • バッファからあふれた分だけだっけ?
• タスク処理の準備にかかる時間 1. JVMの起動コスト
• TaskTrackerはmap/reduceタスクごとに子プロセスを起動
2. TaskTrackerへのタスク割当間隔 • Heartbeatでスロットの空き数を通知 ➡最大でHeartbeat間隔の時間だけ何もしないスロットが存在 (dfs.heartbeat.intervalの値:デフォ3秒)
Spark vs. Disk I/O • キャッシュ • データセットのキャッシュ • 計算結果のキャッシュ ➡Disk I/O減
• RDD(Resillient Distributed Datasets) • キャッシュはクラスタノード間で分散保持 ➡一部が失われても復旧可能
Spark vs. task launching time • 論文曰く、「fast event-‐driven RPC libraryを使ったよ」 • 5〜10sec ➡ 5ms
• Ref. “Shark: SQL and Rich AnalyWcs at Scale” hYps://www.icsi.berkeley.edu/pubs/networking/ICSI_sharksql12.pdf
結果、繰り返し処理の高速化
Ref. “Spark: A framework for iteraWve and interacWve cluster compuWng” hYp://laser.inf.ethz.ch/2013/material/joseph/LASER-‐Joseph-‐6.pdf
機械学習 on Spark • Sparkの代表的な用途として機械学習
• What’s 機械学習 • スパムフィルタ • レコメンド • 顔認識、手書き文字認識 • 画像処理 • 広告のパーソナライズ • マルウェア検知 • とかとか
• 機械学習のアルゴリズムの一部は繰り返し処理が激しい
What’s MLlib • Spark用の機械学習ライブラリ
• 実装済みアルゴリズム(まだ少ない) • SVM • ロジスティク回帰 • 線形回帰 • リッジ回帰 • Lasso • K-‐Means • 協調フィルタリング • ALS(交互最小二乗法) • Gradient Descent(最急降下法)
Why MLlib • 簡単!
• JavaでK-‐Meansを利用する場合
KMeansModel model = KMeans.train(points.rdd(), 5, 3, 5); というのは嘘で、実際には前段階で入力データをpointsに入力データをキャッシュさせる処理を書くけど
Why EC2 (+Spot Instance) • 機械学習 on EC2 • バッチ処理であることが多い
• 低い稼働率 • 計算量が多くなりがち
• 高いスペックのマシンを利用したい • Spot Instance
• 安い • 用途によってはリアルタイム性を重視しない
• Spark on EC2 • spark/ec2/spark-‐ec2
• EC2上にクラスタを構築、管理するためのスクリプト • コマンド一発でインスタンスの生成からsparkのインストール、設定まで • Spark公式 • Spot Instance対応
• 分散処理とSpot Instance • 1台でちんたらバッチ処理やってると相場が上昇してTerminateされる
How to use spark-‐ec2 • 例えば • masterをm3.large • slaveをm3.xlargeで3台 • Amazon Linux(64bit) • Tokyo Region
$ spark-‐ec2 –t m3.xlarge –s 3 –m m3.large –a ami-‐84f1cfc1 –r ap-‐northeast-‐1 –k hoge launch spark-‐test
• 上記構成のslaveをspot instance($0.3で入札)で構築 $ spark-‐ec2 -‐-‐spot-‐price=0.3 –t m3.xlarge –s 3 –m m3.large –a ami-‐84f1cfc1 –r ap-‐northeast-‐1 –k hoge launch spark-‐test
• 他にもオプション色々 • -‐z ZONE, -‐-‐zone=ZONE • -‐-‐ebs-‐vol-‐size=SIZE • -‐-‐use-‐exisWng-‐master • (略
まとめ
• 簡単 • /spark/ec2/ec2-‐spark • MLlib
• 低コスト • EC2 + Spot Instance
• 高速 • Spark
• 機械学習 • 繰り返し処理で実装されてるアルゴリズムだけだけどね