20
Spot Instance + Spark + MLlib で実現する簡単低コスト 高速機械学習 @yamakatu AWS Casual Talks#2 2014/4/18

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

Embed Size (px)

DESCRIPTION

Spot Instance + Spark + MLlib で実現する簡単低コスト 高速機械学習 AWS Casual Talks#2 LT 2014/4/18

Citation preview

Spot  Instance  +  Spark  +  MLlib  で実現する簡単低コスト  高速機械学習 @yamakatu  AWS  Casual  Talks#2  2014/4/18

おまだれ

•  @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.