SlideShare a Scribd company logo
Spot	
  Instance	
  +	
  Spark	
  +	
  
MLlib	
  
で実現する簡単低コスト	
  
高速機械学習	
 
@yamakatu	
  
AWS	
  Casual	
  Talks#2	
  
2014/4/18
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
おまだれ	
 
•  @yamakatu	
  
•  お仕事:検索方面	
  
•  自称フルスタックイクメンエンジニア	
  
•  開発、インフラ、機械学習、統計、検索、育児	
  
•  gihyo.jp	
  連載「Mahoutで体感する機械学習の実践」	
  
•  合言葉は「読まずにはてブだけして」	
  
	
  
What’s	
  Spark	
 
の前にHadoopの話
Hadoopが苦手とする処理	
 
•  オンライン処理(リアルタイム性)	
  
•  バッチ処理で使おう	
  
•  繰り返し処理	
  
•  ?	
  
繰り返し処理@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ならね
Spark	
  vs.	
  Disk	
  I/O	
  	
 
•  キャッシュ	
  
•  データセットのキャッシュ	
  
•  計算結果のキャッシュ	
  
➡Disk	
  I/O減	
  
•  RDD(Resillient	
  Distributed	
  Datasets)	
  
•  キャッシュはクラスタノード間で分散保持	
  
➡一部が失われても復旧可能	
  
Spark	
  vs.	
  task	
  launching	
  time	
  	
 
•  論文曰く、「fast	
  event-­‐driven	
  RPC	
  libraryを使ったよ」	
  
	
  
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に
入力データをキャッシュさせる処理を書くけど	
  
Hadoop	
  vs.	
  Spark(+MLlib)	
 
•  速度比較	
  
•  ロジスティク回帰で100倍	
  
•  ref.	
  hYp://spark.apache.org/	
  
	
  
	
  
	
  
•  What’s	
  ロジスティク回帰
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	
  
•  機械学習	
  
•  繰り返し処理で実装されてるアルゴリズムだけだけどね	
  
Fin.

More Related Content

Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習

  • 1. Spot  Instance  +  Spark  +   MLlib   で実現する簡単低コスト   高速機械学習 @yamakatu   AWS  Casual  Talks#2   2014/4/18
  • 3. おまだれ •  @yamakatu   •  お仕事:検索方面   •  自称フルスタックイクメンエンジニア   •  開発、インフラ、機械学習、統計、検索、育児   •  gihyo.jp  連載「Mahoutで体感する機械学習の実践」   •  合言葉は「読まずにはてブだけして」    
  • 5. Hadoopが苦手とする処理 •  オンライン処理(リアルタイム性)   •  バッチ処理で使おう   •  繰り返し処理   •  ?  
  • 6. 繰り返し処理@Hadoop? •  ここで言うところの繰り返し処理   •  一般的に言うところの「繰り返し処理」というよりも   •  前回の計算結果を次の計算で利用するような繰り返し処理   HDFS➡Map➡Shuffle➡Reduce➡HDFS   HDFS➡Map➡Shuffle➡Reduce➡HDFS   HDFS➡Map➡Shuffle➡Reduce➡HDFS  
  • 7. Why  ? •  Disk  I/O   1.  前回の出力をHDFS経由で入力値として受け取る   •  そのまま持っとけよ。。。   2.  さらにMap処理の出力は各ノードのローカルディスク   •  バッファからあふれた分だけだっけ?   •  タスク処理の準備にかかる時間   1.  JVMの起動コスト   •  TaskTrackerはmap/reduceタスクごとに子プロセスを起動     2.  TaskTrackerへのタスク割当間隔   •  Heartbeatでスロットの空き数を通知   ➡最大でHeartbeat間隔の時間だけ何もしないスロットが存在   (dfs.heartbeat.intervalの値:デフォ3秒)  
  • 9. Spark  vs.  Disk  I/O   •  キャッシュ   •  データセットのキャッシュ   •  計算結果のキャッシュ   ➡Disk  I/O減   •  RDD(Resillient  Distributed  Datasets)   •  キャッシュはクラスタノード間で分散保持   ➡一部が失われても復旧可能  
  • 10. Spark  vs.  task  launching  time   •  論文曰く、「fast  event-­‐driven  RPC  libraryを使ったよ」    
  • 11. 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  
  • 12. 結果、繰り返し処理の高速化 Ref.   “Spark:  A  framework  for  iteraWve  and  interacWve  cluster  compuWng”   hYp://laser.inf.ethz.ch/2013/material/joseph/LASER-­‐Joseph-­‐6.pdf  
  • 13. 機械学習  on  Spark •  Sparkの代表的な用途として機械学習   •  What’s  機械学習   •  スパムフィルタ   •  レコメンド   •  顔認識、手書き文字認識   •  画像処理   •  広告のパーソナライズ   •  マルウェア検知   •  とかとか   •  機械学習のアルゴリズムの一部は繰り返し処理が激しい  
  • 14. What’s  MLlib •  Spark用の機械学習ライブラリ   •  実装済みアルゴリズム(まだ少ない)   •  SVM   •  ロジスティク回帰   •  線形回帰   •  リッジ回帰   •  Lasso   •  K-­‐Means   •  協調フィルタリング   •  ALS(交互最小二乗法)   •  Gradient  Descent(最急降下法)  
  • 15. Why  MLlib •  簡単!   •  JavaでK-­‐Meansを利用する場合   KMeansModel  model  =  KMeans.train(points.rdd(),  5,  3,  5);     というのは嘘で、実際には前段階で入力データをpointsに 入力データをキャッシュさせる処理を書くけど  
  • 16. Hadoop  vs.  Spark(+MLlib) •  速度比較   •  ロジスティク回帰で100倍   •  ref.  hYp://spark.apache.org/         •  What’s  ロジスティク回帰
  • 17. Why  EC2  (+Spot  Instance) •  機械学習  on  EC2   •  バッチ処理であることが多い   •  低い稼働率   •  計算量が多くなりがち   •  高いスペックのマシンを利用したい   •  Spot  Instance   •  安い   •  用途によってはリアルタイム性を重視しない   •  Spark  on  EC2   •  spark/ec2/spark-­‐ec2   •  EC2上にクラスタを構築、管理するためのスクリプト   •  コマンド一発でインスタンスの生成からsparkのインストール、設定まで   •  Spark公式   •  Spot  Instance対応   •  分散処理とSpot  Instance   •  1台でちんたらバッチ処理やってると相場が上昇してTerminateされる  
  • 18. 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   •  (略  
  • 19. まとめ •  簡単   •  /spark/ec2/ec2-­‐spark   •  MLlib   •  低コスト   •  EC2  +  Spot  Instance   •  高速   •  Spark   •  機械学習   •  繰り返し処理で実装されてるアルゴリズムだけだけどね  
  • 20. Fin.