Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
1Copyright © 2014 NTT DATA Corporation
NTTデータ 基盤システム事業本部
OSSプロフェッショナルサービス
猿田 浩輔
2014年12月17日 JJUG ナイト・セミナー
Spark/MLlibではじめる...
2Copyright © 2014 NTT DATA Corporation
自己紹介
 所属/氏名
 NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス
 猿田 浩輔(さるた こうすけ)
 何をしている人?
 OS...
3Copyright © 2014 NTT DATA Corporation
自己紹介
すこしばかりApache Sparkの開発に貢献しています
4Copyright © 2014 NTT DATA Corporation
 Spark+MLlibを語る上で外せない話題
大量データを扱う上での従来の機械学習ライブラリの課題と、
分散処理基盤「Hadoop」が切り開いた道
Hadoo...
5Copyright © 2014 NTT DATA Corporation
 Apache HadoopやApache Sparkの詳細
 Apache Hadoop及びApache Sparkの内部挙動や詳細な機能/仕組みについての
解...
Copyright © 2014 NTT DATA Corporation 6
大量データを扱う上での従来の機械学習ライブラリ
の課題と分散処理基盤Hadoopが切り開いた道
7Copyright © 2014 NTT DATA Corporation
従来の機械学習ライブラリの
大量データの扱いに関する課題
機械学習で大量データを扱いたくなる場合がある
• モデルの精度を高めたい
 計算のもとになるデータ(標本)...
8Copyright © 2014 NTT DATA Corporation
従来の機械学習ライブラリの
大量データの扱いに関する課題
• 計算量やIO量が増えるが、現実的な時間で処理を
完了させる必要がある
• 大量のデータをどこに蓄積してお...
9Copyright © 2014 NTT DATA Corporation
• 機械学習は入力データをもとに計算した結果、事実を表す
モデルを作る
• 計算のもとになるデータが大量にあれば、より事実を正しく
説明した結果(精度の高い結果)が得...
10Copyright © 2014 NTT DATA Corporation
• 機械学習は入力データをもとに計算した結果、事実を表す
モデルを作る
• 計算のもとになるデータが大量にあれば、より事実を正しく
説明した結果(精度の高い結果)が...
Copyright © 2014 NTT DATA Corporation 11
大規模分散処理基盤
「Hadoop」が切り開いた道
12Copyright © 2014 NTT DATA Corporation
 オープンソースの大規模分散処理基盤
• Googleで利用されているソフトウェアのオープンソース実装(GFS,
MapReduce)
 Yahoo Resea...
13Copyright © 2014 NTT DATA Corporation
Hadoop MapReduceHDFS
HDFSとHadoop MapReduce
コモディティなサーバを大量に使用、故障発
生が前提の設計
データの多重化で可用...
14Copyright © 2014 NTT DATA Corporation
Apache Mahoutの登場
• Hadoop MapReduceを分散処理エンジンに据えたエ
コシステムが形成されるようになった
• 機械学習ライブラリ「Ap...
15Copyright © 2014 NTT DATA Corporation
Apache Mahoutの登場
• Hadoop MapReduceを分散処理エンジンに据えたエ
コシステムが形成されるようになった
• 機械学習ライブラリ「Ap...
Copyright © 2014 NTT DATA Corporation 16
Hadoopが苦手とする処理Hadoopによる機械学習
17Copyright © 2014 NTT DATA Corporation
MahoutでKMeansを実行してみる
デモ
Hadoop MapReduce+MahoutでKMeansを動作させ、
挙動を観察する
Hadoop MapRed...
18Copyright © 2014 NTT DATA Corporation
MahoutでKMeansを実行してみる
MahoutでKMeansを実行すると、反復処理の回数を
増やすほどに、モデルが作られるまでのレイテンシが
顕著になった。...
19Copyright © 2014 NTT DATA Corporation
KMeansはMapReduceでどのように処理されるか
M R
Map処理
Reduce処理ジョブ
個々のMapReduceジョブで
は特徴空間の点同士の距離
計...
20Copyright © 2014 NTT DATA Corporation
KMeansはMapReduceでどのように処理されるか
M R
Map処理
Reduce処理ジョブ
個々のMapReduceジョブで
は特徴空間の点同士の距離
計...
21Copyright © 2014 NTT DATA Corporation
KMeansはMapReduceでどのように処理されるか
M R
Map処理
Reduce処理ジョブ
個々のMapReduceジョブで
は特徴空間の点同士の距離
計...
22Copyright © 2014 NTT DATA Corporation
KMeansはMapReduceでどのように処理されるか
M R
 MahoutによるKMeansがどのようなMapReduceジョブに展開
されるのか観察する
...
23Copyright © 2014 NTT DATA Corporation
KMeansはMapReduceでどのように処理されるか
M R
結果が収束するまで、反復の
数だけジョブが実行される
 MahoutによるKMeansがどのよう...
24Copyright © 2014 NTT DATA Corporation
 MahoutによるKMeansがどのようなMapReduceジョブに展開
されるのか観察する
KMeansはMapReduceでどのように処理されるか
M RM...
25Copyright © 2014 NTT DATA Corporation
 MahoutによるKMeansがどのようなMapReduceジョブに展開
されるのか観察する
KMeansはMapReduceでどのように処理されるか
M RM...
Copyright © 2014 NTT DATA Corporation 26
Spark+MLlibが解決した
従来の機械学習ライブラリの課題
27Copyright © 2014 NTT DATA Corporation
 Hadoopが苦手としていた、スループットとレイテンシの両立が必要な問
題領域にアプローチするために開発されたOSSのインメモリ分散処理
基盤
 Hadoop...
28Copyright © 2014 NTT DATA Corporation
Map
Reduce
Spark
HDFS
YARN
 HDFS上をストレージとして活用できる。大きなデータを高スループットで並列
に読み書きできる
 Hado...
29Copyright © 2014 NTT DATA Corporation
Hadoop MapReduceとSparkの処理の流れの違い
M RM R
Map処理 Reduce処理
HDFSに書き出し
HDFSから読み出し
 従来のHa...
30Copyright © 2014 NTT DATA Corporation
Sparkのエコシステムのひとつ「MLlib」
• Sparkの目標のひとつはコアとなる分散処理エン
ジンを中心に据え、それを活用するためのライブラ
リを充実させる...
31Copyright © 2014 NTT DATA Corporation
 プログラミングインターフェイス
 Scala/Java/Pythonでプログラミング可能
 ポピュラーな機械学習アルゴリズム
 分類(SVM、ロジスティッ...
32Copyright © 2014 NTT DATA Corporation
 プログラミングインターフェイス
 Scala/Java/Pythonでプログラミング可能
 ポピュラーな機械学習アルゴリズム
 分類(SVM、ロジスティッ...
33Copyright © 2014 NTT DATA Corporation
MLlibのコード例(KMeans学習部分@Scala)
学習用データをベクタデータに
変換し、更にRDDに変換
学習用データは何度も読み込む
ので、メモリ上にキャ...
34Copyright © 2014 NTT DATA Corporation
MLlibのコード例(KMeans学習部分@Java)
学習データからRDDを作成
学習
35Copyright © 2014 NTT DATA Corporation
MLlibのコード例(KMeans学習部分@Java)
これはSpark 0.9まで
またはJava7までの書き方!
36Copyright © 2014 NTT DATA Corporation
MLlibのコード例(KMeans学習部分@Java8)
Spark 1.0以降ではラムダ式で
すっきり記述できる
学習データからRDDを作成
学習
37Copyright © 2014 NTT DATA Corporation
Spark+MLlibでKMeansを実行してみる
デモ
Spark+MLlibでKMeansを動作させ、挙動を観察する
MLlibのスピード感を体感してみよう
38Copyright © 2014 NTT DATA Corporation
Spark+MLlibでKMeansを実行してみる
Mahout+Hadoop MapReduceの場合と比較して、収
束のための反復処理が早々に終了した。なぜ?
...
39Copyright © 2014 NTT DATA Corporation
KMeansはSparkでどのように処理されるか
RDD
HDFS
ジョブ
・・・
変換
学習用
データ
RDD
RDDの複数回の変
換が特徴空間の
点同士の距離計...
40Copyright © 2014 NTT DATA Corporation
KMeansはSparkでどのように処理されるか
RDD
HDFS
ジョブ
・・・
変換
学習用
データ
RDD
学習用データは何度も
読み込むのでキャッシュ
する...
41Copyright © 2014 NTT DATA Corporation
KMeansはSparkでどのように処理されるか
RDD RDD
ジョブ
・・・ RDD ・・・
計算結果が収束するか、指
定された回数まで同様の計
算を実行する
...
42Copyright © 2014 NTT DATA Corporation
KMeansはSparkでどのように処理されるか
RDD RDD
ジョブ
・・・ RDD ・・・
計算結果が収束するか、指
定された回数まで同様の計
算を実行する
...
43Copyright © 2014 NTT DATA Corporation
KMeansはSparkでどのように処理されるか
RDD RDD
ジョブ
・・・ RDD ・・・
計算結果が収束するか、指
定された回数まで同様の計
算を実行する
...
44Copyright © 2014 NTT DATA Corporation
KMeansはSparkでどのように処理されるか
RDD RDD
ジョブ
・・・ RDD ・・・
計算結果が収束するか、指
定された回数まで同様の計
算を実行する
...
45Copyright © 2014 NTT DATA Corporation
KMeansはSparkでどのように処理されるか
RDD RDD RDD
HDFS
ジョブ
・・・ RDD ・・・
計算結果が収束するか、指
定された回数まで同様の...
Copyright © 2014 NTT DATA Corporation 46
機械学習の活用を加速する仕組み
47Copyright © 2014 NTT DATA Corporation
 Sparkには試行錯誤のための道具がそろっている
Sparkに付属するインタラクティブシェルで、試行錯誤しながら
パラメータのチューニングや使用するアルゴリズ...
48Copyright © 2014 NTT DATA Corporation
Map
Reduce
Spark
MLlibなど
HDFS分散ファイルシステム
YARN分散リソース管理基盤
分散処理フレームワーク
そのほかの
フレームワーク
フ...
49Copyright © 2014 NTT DATA Corporation
 大量データを扱う上での従来の機械学習ライブラリの課題と分
散処理基盤「Hadoop」が切り開いた道
 リーズナブルにスケールアウト可能な処理系が必要であり、H...
50Copyright © 2014 NTT DATA Corporation
【余談】その後のMahout
MahoutもSparkでの動作をサポートするようです
Copyright © 2011 NTT DATA Corporation
Copyright © 2014 NTT DATA Corporation
お問い合わせ先:
株式会社NTTデータ 基盤システム事業本部
OSSプロフェッショナルサービ...
Upcoming SlideShare
Loading in …5
×

Spark MLlibではじめるスケーラブルな機械学習

31,137 views

Published on

JJUG ナイト・セミナー「機械学習・自然言語処理特集!」(2014/12/17) 講演資料
『Spark MLlibではじめるスケーラブルな機械学習』

NTTデータ 基盤システム事業本部
OSSプロフェッショナルサービス
猿田 浩輔

Published in: Software
  • Be the first to comment

Spark MLlibではじめるスケーラブルな機械学習

  1. 1. 1Copyright © 2014 NTT DATA Corporation NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス 猿田 浩輔 2014年12月17日 JJUG ナイト・セミナー Spark/MLlibではじめるスケーラブルな機械学習
  2. 2. 2Copyright © 2014 NTT DATA Corporation 自己紹介  所属/氏名  NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス  猿田 浩輔(さるた こうすけ)  何をしている人?  OSSを使ったR&Dやシステム開発、テクニカルサポートに携わっています  6年ほど大規模分散処理基盤「Hadoop」関連のR&Dやシステム開発に関わってきま した  近年はHadoopから派生して、インメモリ分散処理基盤「Spark」にも携わっています  著作物(共著)  Hadoop徹底入門(初版/第2版) - 翔泳社  HADOOP HACKS - オライリージャパン
  3. 3. 3Copyright © 2014 NTT DATA Corporation 自己紹介 すこしばかりApache Sparkの開発に貢献しています
  4. 4. 4Copyright © 2014 NTT DATA Corporation  Spark+MLlibを語る上で外せない話題 大量データを扱う上での従来の機械学習ライブラリの課題と、 分散処理基盤「Hadoop」が切り開いた道 Hadoopが苦手とする処理とHadoopによる機械学習  Spark+MLlibが解決した従来の機械学習ライブラリの課題  Sparkやその周辺の、機械学習の活用を加速するしくみ 本日お話しすること
  5. 5. 5Copyright © 2014 NTT DATA Corporation  Apache HadoopやApache Sparkの詳細  Apache Hadoop及びApache Sparkの内部挙動や詳細な機能/仕組みについての 解説は本筋からそれるため、最低限の説明にとどめます。  Spark+MLlibのセットアップ方法  Sparkの公式ドキュメントにセットアップ方法が記載されています。 - https://spark.apache.org/docs/latest/  幾つか動作モードがありますが、ライブラリの使用感を確かめるだけならば、クラスタ をセットアップしなくても手元のマシンでSparkの動作を確認できる「ローカルモード」 がお手軽です。  MLlibの個別の学習ライブラリの使い方  Spark Summit 2013で開催されたトレーニング教材や、AMP Campで用いられた教 材が参考になります。 - http://spark-summit.org/2013/exercises/ - http://ampcamp.berkeley.edu/5/exercises/ 本日お話ししないこと
  6. 6. Copyright © 2014 NTT DATA Corporation 6 大量データを扱う上での従来の機械学習ライブラリ の課題と分散処理基盤Hadoopが切り開いた道
  7. 7. 7Copyright © 2014 NTT DATA Corporation 従来の機械学習ライブラリの 大量データの扱いに関する課題 機械学習で大量データを扱いたくなる場合がある • モデルの精度を高めたい  計算のもとになるデータ(標本)が大量にあれば、より事 実を正しく表したモデル(精度の高いモデル)が得られる • 扱っているデータが爆発的に増え続ける性質を持つ  全商品/全ユーザの情報をもとに協調フィルタリングを活 用してレコメンデーションしたい場合など。商品データや ユーザデータは増え続ける • などなど・・・
  8. 8. 8Copyright © 2014 NTT DATA Corporation 従来の機械学習ライブラリの 大量データの扱いに関する課題 • 計算量やIO量が増えるが、現実的な時間で処理を 完了させる必要がある • 大量のデータをどこに蓄積しておくか 機械学習で大量データを扱いたくなる場合がある • モデルの精度を高めたい  計算のもとになるデータ(標本)が大量にあれば、より事 実を正しく表したモデル(精度の高いモデル)が得られる • 扱っているデータが爆発的に増え続ける性質を持つ  全商品/全ユーザの情報をもとに協調フィルタリングを活 用してレコメンデーションしたい場合など。商品データや ユーザデータは増え続ける • などなど・・・
  9. 9. 9Copyright © 2014 NTT DATA Corporation • 機械学習は入力データをもとに計算した結果、事実を表す モデルを作る • 計算のもとになるデータが大量にあれば、より事実を正しく 説明した結果(精度の高い結果)が得られる 従来の機械学習ライブラリの 大量データの扱いに関する課題 機械学習において大量のデータを扱う際の悩みの種 • 計算量やIO量が増えるが、現実的な時間で処理を 完了させる必要がある • データを蓄積しておく場所が必要になる 機械学習の一般的なセオリー• 従来の機械学習ライブラリは、単一マシンでの動作を前提として いたものが多く、処理能力やデータの格納容量も単一マシンが 持つの能力の範囲に制約を受けた • 特別な製品を用いることで解決できた道もあるが、やりたいこと に対してコストパフォーマンスが良くない場合が多かった • 機械学習に限らず、増え続けるデータを処理する業務などでも 同様の問題に直面した 特別な機器を用いず、リーズナブルにスケールアウ トが可能な分散処理基盤が必要
  10. 10. 10Copyright © 2014 NTT DATA Corporation • 機械学習は入力データをもとに計算した結果、事実を表す モデルを作る • 計算のもとになるデータが大量にあれば、より事実を正しく 説明した結果(精度の高い結果)が得られる 従来の機械学習ライブラリの 大量データの扱いに関する課題 機械学習において大量のデータを扱う際の悩みの種 • 計算量やIO量が増えるが、現実的な時間で処理を 完了させる必要がある • データを蓄積しておく場所が必要になる 機械学習の一般的なセオリー• 従来の機械学習ライブラリは、単一マシンでの動作を前提として いたものが多く、処理能力やデータの格納容量も単一マシンが 持つの能力の範囲に制約を受けた • 特別な製品を用いることで解決できた道もあるが、やりたいこと に対してコストパフォーマンスが良くない場合が多かった • 機械学習に限らず、増え続けるデータを処理する業務などでも 同様の問題に直面した Apache Hadoopが、 分散処理のコモディティ化の道を切り開いた 特別な機器を用いず、リーズナブルにスケールアウ トが可能な分散処理基盤が必要
  11. 11. Copyright © 2014 NTT DATA Corporation 11 大規模分散処理基盤 「Hadoop」が切り開いた道
  12. 12. 12Copyright © 2014 NTT DATA Corporation  オープンソースの大規模分散処理基盤 • Googleで利用されているソフトウェアのオープンソース実装(GFS, MapReduce)  Yahoo ResearchのDoug Cutting氏(現 Cloudera社)が Java で 開発  特別な機器を用いず、コモディティなサーバ機器を複数束ねてク ラスタを形成し、並列分散処理が可能  大量のサーバを用いても現実的な運用が可能  分散処理に関わる面倒な制御は基盤が面倒を見てくれる  データの大きさ故にためられなかったり、現実的な時間で処理し きることが従来のITアーキテクチャでは難しかった、もしくは高コス トでしか実現できなかったデータ活用が可能となる』 Apache Hadoopとは?
  13. 13. 13Copyright © 2014 NTT DATA Corporation Hadoop MapReduceHDFS HDFSとHadoop MapReduce コモディティなサーバを大量に使用、故障発 生が前提の設計 データの多重化で可用性を担保する ブロックサイズが大きく(64MB)、巨大なデータを 高スループットで読み書きするのに向いている HDFSクライアント SW SW SW ファイルをブロックに 分割して分散配置 コピーをRackの内外に 多重作成して冗長化(3つ) DataNodes Rack SHUFFLE MAP REDUCE 大規模分散処理向けフレームワーク HDFSと連携し、ディスク上のデータ処理のスルー プットを最大化 バッチ処理向けのフレームワーク NameNode
  14. 14. 14Copyright © 2014 NTT DATA Corporation Apache Mahoutの登場 • Hadoop MapReduceを分散処理エンジンに据えたエ コシステムが形成されるようになった • 機械学習ライブラリ「Apache Mahout」はエコシステム のひとつ Hadoop Map Reduce HDFS分散ファイル システム 分散処理 フレームワーク Mahout/Hive/Pig... 高レベル ライブラリ/ツール
  15. 15. 15Copyright © 2014 NTT DATA Corporation Apache Mahoutの登場 • Hadoop MapReduceを分散処理エンジンに据えたエ コシステムが形成されるようになった • 機械学習ライブラリ「Apache Mahout」はエコシステム のひとつ Hadoop Map Reduce HDFS分散ファイル システム 分散処理 フレームワーク Mahout/Hive/Pig... 高レベル ライブラリ/ツール • HadoopとMahoutの登場により、大量のデータを用いたスケーラ ブルな機械学習が、リーズナブルに実現可能になった • 一方で、MapReduceを前提とすると、不得意となる問題領域が 存在することが分かってきた
  16. 16. Copyright © 2014 NTT DATA Corporation 16 Hadoopが苦手とする処理Hadoopによる機械学習
  17. 17. 17Copyright © 2014 NTT DATA Corporation MahoutでKMeansを実行してみる デモ Hadoop MapReduce+MahoutでKMeansを動作させ、 挙動を観察する Hadoop MapReduce+Mahoutが、 何が不得意なのか観察するために
  18. 18. 18Copyright © 2014 NTT DATA Corporation MahoutでKMeansを実行してみる MahoutでKMeansを実行すると、反復処理の回数を 増やすほどに、モデルが作られるまでのレイテンシが 顕著になった。なぜ? 原因を究明するために、 KMeansがMapReduceでどのように処理されるのか観察する
  19. 19. 19Copyright © 2014 NTT DATA Corporation KMeansはMapReduceでどのように処理されるか M R Map処理 Reduce処理ジョブ 個々のMapReduceジョブで は特徴空間の点同士の距離 計算や重心計算が、反復1 回分行われる  MahoutによるKMeansがどのようなMapReduceジョブに展開 されるのか観察する R HDFS 学習用 データ
  20. 20. 20Copyright © 2014 NTT DATA Corporation KMeansはMapReduceでどのように処理されるか M R Map処理 Reduce処理ジョブ 個々のMapReduceジョブで は特徴空間の点同士の距離 計算や重心計算が、反復1 回分行われる  MahoutによるKMeansがどのようなMapReduceジョブに展開 されるのか観察する R HDFS 学習用 データ ジョブ1つを実行するたびに、計算 リソースの確保なやスケジューリン グが発生する
  21. 21. 21Copyright © 2014 NTT DATA Corporation KMeansはMapReduceでどのように処理されるか M R Map処理 Reduce処理ジョブ 個々のMapReduceジョブで は特徴空間の点同士の距離 計算や重心計算が、反復1 回分行われる  MahoutによるKMeansがどのようなMapReduceジョブに展開 されるのか観察する R HDFS 学習用 データ ジョブ1つを実行するたびに、計算 リソースの確保なやスケジューリン グが発生する ジョブごとに計算 結果を書き出す モデル データ1
  22. 22. 22Copyright © 2014 NTT DATA Corporation KMeansはMapReduceでどのように処理されるか M R  MahoutによるKMeansがどのようなMapReduceジョブに展開 されるのか観察する M R Map処理 Reduce処理ジョブ HDFS 個々のMapReduceジョブで は特徴空間の点同士の距離 計算や重心計算が、反復1 回分行われる 学習用 データ ジョブ1つを実行するたびに、計算 リソースの確保なやスケジューリン グが発生する モデル データ1 モデル データ1 学習用 データ 2回目以降の反復では、計算 過程のモデルデータと学習用 データをHDFSから読み出す
  23. 23. 23Copyright © 2014 NTT DATA Corporation KMeansはMapReduceでどのように処理されるか M R 結果が収束するまで、反復の 数だけジョブが実行される  MahoutによるKMeansがどのようなMapReduceジョブに展開 されるのか観察する M R Map処理 Reduce処理ジョブ HDFS 個々のMapReduceジョブで は特徴空間の点同士の距離 計算や重心計算が、反復1 回分行われる 学習用 データ ジョブ1つを実行するたびに、計算 リソースの確保なやスケジューリン グが発生する モデル データ1 反復のたびに、精度が よくなったモデルが出 力される モデル データ1 学習用 データ 2回目以降の反復では、計算 過程のモデルデータと学習用 データをHDFSから読み出す モデル データ2
  24. 24. 24Copyright © 2014 NTT DATA Corporation  MahoutによるKMeansがどのようなMapReduceジョブに展開 されるのか観察する KMeansはMapReduceでどのように処理されるか M RM R Map処理 Reduce処理 ジョブ HDFS データ M R 結果が収束するまで、反復の 数だけジョブが実行される 個々のMapReduceジョブで は点同士の距離計算や重心 計算が、反復1回分行われる ジョブ1つを実行するたびに、計算 リソースのアロケーション(コンテナ の確保など)が発生する ジョブ間はHDFSを介し てデータを受け渡す KMeansの実行プロセスから MapReduce+Mahoutのレイテンシが大きい理由を整理すると・・・  複数回の反復が、MapReduceの多段のジョブで構成され、個々 のジョブの起動に関わるオーバーヘッドが大きい  反復のたびにHDFSへのアクセスが発生する。 Hadoop MapReduceは大規模なデータに対して、個々のジョブのス ループットは最大化されるが、ジョブが多段になった際の全体のレイ テンシが顕著になる
  25. 25. 25Copyright © 2014 NTT DATA Corporation  MahoutによるKMeansがどのようなMapReduceジョブに展開 されるのか観察する KMeansはMapReduceでどのように処理されるか M RM R Map処理 Reduce処理 ジョブ HDFS データ M R 結果が収束するまで、反復の 数だけジョブが実行される 個々のMapReduceジョブで は点同士の距離計算や重心 計算が、反復1回分行われる ジョブ1つを実行するたびに、計算 リソースのアロケーション(コンテナ の確保など)が発生する ジョブ間はHDFSを介し てデータを受け渡す KMeansの実行プロセスから MapReduce+Mahoutのレイテンシが大きい理由を整理すると・・・  複数回の反復が、MapReduceの多段のジョブで構成され、個々 のジョブの起動に関わるオーバーヘッドが大きい  反復のたびにHDFSへのアクセスが発生する。 Hadoop MapReduceは大規模なデータに対して、個々のジョブのス ループットは最大化されるが、ジョブが多段になった際の全体のレイ テンシが顕著になる Apache Sparkが スループットとレイテンシの両立にアプローチ
  26. 26. Copyright © 2014 NTT DATA Corporation 26 Spark+MLlibが解決した 従来の機械学習ライブラリの課題
  27. 27. 27Copyright © 2014 NTT DATA Corporation  Hadoopが苦手としていた、スループットとレイテンシの両立が必要な問 題領域にアプローチするために開発されたOSSのインメモリ分散処理 基盤  Hadoop同様、大量のコモディティサーバを束ねて分散処理を行う  UC Barkeleyに所属していたMatei Zaharia(現Databricks CTO)が Scalaで開発  RDDと呼ばれるフォールトトレラント性を考慮した分散コレクションに対し、 mapやfilter、reduceなどの典型的なデータ変換操作を繰り返して目的 の結果を得る処理モデル  Hadoopと異なり、MapReduceの処理パラダイムの制約を受けない Apache Sparkとは? 最新安定バージョンは1.1.1。12月中には1.2.0がリリースされる見込み
  28. 28. 28Copyright © 2014 NTT DATA Corporation Map Reduce Spark HDFS YARN  HDFS上をストレージとして活用できる。大きなデータを高スループットで並列 に読み書きできる  Hadoopの分散リソース管理基盤「YARN」上で動作可能  現在のHadoopは従来の分散処理フレームワークからリソース管理基盤 「YARN」を切り出し、様々な分散処理フレームワークのための汎用的か つスケーラブルな分散処理基盤になっている Sparkのスケーラビリティや高スループットを 達成する仕組みはHadoopの上に成り立つ 従来から処理フレー ムワークの層とリ ソース管理の層を分 離した YARN上で動作す ることで、Hadoop が持つスケーラビ リティ/高スルー プットの恩恵を受 けられる
  29. 29. 29Copyright © 2014 NTT DATA Corporation Hadoop MapReduceとSparkの処理の流れの違い M RM R Map処理 Reduce処理 HDFSに書き出し HDFSから読み出し  従来のHadoopではMapReduceの単位が1つのジョブ。複雑な処理はジョブ を多段構成にする RDD RDD RDD データ変換(フィルター、フォーマット変換など)  SparkではRDD(Resilient Distributed Dataset)の変換チェインで複雑な処 理でも1つのジョブで定義できる ジョブ フォールトトレラントな分散コレク ション「RDD」が基本のデータ構造 HDFSに書き出し HDFSから読み出し 何度も読み込むデータはキャッ シュしておくことで、都度発生する 計算量やIO量を削減できる M R RDD RDD RDD RDD
  30. 30. 30Copyright © 2014 NTT DATA Corporation Sparkのエコシステムのひとつ「MLlib」 • Sparkの目標のひとつはコアとなる分散処理エン ジンを中心に据え、それを活用するためのライブラ リを充実させること • 機械学習ライブラリ「MLlib」はそのひとつ Apache Spark Core (分散処理エンジン) Spark SQL Spark Streaming MLlib GraphX Sparkアプリ内で SQL/HQLを 利用できる ストリーム処理を マイクロバッチ方式で実現 Sparkアプリ内で 機械学習を 利用できる Sparkアプリ内で グラフ処理を 利用できる
  31. 31. 31Copyright © 2014 NTT DATA Corporation  プログラミングインターフェイス  Scala/Java/Pythonでプログラミング可能  ポピュラーな機械学習アルゴリズム  分類(SVM、ロジスティック回帰、ナイーブベイズ、デシジョンツリー)  線形回帰(最小二乗法/Lasso/Ridge)  協調フィルタリング(ALS)  クラスタリング(KMeans)  次元削減処理  SVD(特異値分解)  PVA(主成分分析)  前処理用のライブラリ  TF-IDF  カイ二乗検定  共分散行列計算  サンプリング  テスト用のランダムなデータ生成 MLlibが提供する道具の一例
  32. 32. 32Copyright © 2014 NTT DATA Corporation  プログラミングインターフェイス  Scala/Java/Pythonでプログラミング可能  ポピュラーな機械学習アルゴリズム  分類(SVM、ロジスティック回帰、ナイーブベイズ、デシジョンツリー)  線形回帰(最小二乗法/Lasso/Ridge)  協調フィルタリング(ALS)  クラスタリング(KMeans)  次元削減処理  SVD(特異値分解)  PVA(主成分分析)  前処理用のライブラリ  TF-IDF  カイ二乗検定  共分散行列計算  サンプリング  テスト用のランダムなデータ生成 MLlibが提供する道具の一例 時期安定バージョンのSpark 1.2.0からは、MLlib の後継となるSpark MLのα版パッケージがMLlib に付属する形で同梱される
  33. 33. 33Copyright © 2014 NTT DATA Corporation MLlibのコード例(KMeans学習部分@Scala) 学習用データをベクタデータに 変換し、更にRDDに変換 学習用データは何度も読み込む ので、メモリ上にキャッシュしておく 学習 大まかに、 • 学習データを特徴ベクトルに変換する • 特徴ベクトル群をSparkの共通的な分散コレクション「RDD」に変換する • 学習ベクトルを表したRDDは反復のたびに何度も使用するのでキャッシュしておく • 生成したRDDをもとに学習させる の流れでモデルを作る
  34. 34. 34Copyright © 2014 NTT DATA Corporation MLlibのコード例(KMeans学習部分@Java) 学習データからRDDを作成 学習
  35. 35. 35Copyright © 2014 NTT DATA Corporation MLlibのコード例(KMeans学習部分@Java) これはSpark 0.9まで またはJava7までの書き方!
  36. 36. 36Copyright © 2014 NTT DATA Corporation MLlibのコード例(KMeans学習部分@Java8) Spark 1.0以降ではラムダ式で すっきり記述できる 学習データからRDDを作成 学習
  37. 37. 37Copyright © 2014 NTT DATA Corporation Spark+MLlibでKMeansを実行してみる デモ Spark+MLlibでKMeansを動作させ、挙動を観察する MLlibのスピード感を体感してみよう
  38. 38. 38Copyright © 2014 NTT DATA Corporation Spark+MLlibでKMeansを実行してみる Mahout+Hadoop MapReduceの場合と比較して、収 束のための反復処理が早々に終了した。なぜ? Mahoutの場合と同様、 KMeansがSparkでどのように処理されるのか観察する
  39. 39. 39Copyright © 2014 NTT DATA Corporation KMeansはSparkでどのように処理されるか RDD HDFS ジョブ ・・・ 変換 学習用 データ RDD RDDの複数回の変 換が特徴空間の 点同士の距離計 算や重心の計算 に対応
  40. 40. 40Copyright © 2014 NTT DATA Corporation KMeansはSparkでどのように処理されるか RDD HDFS ジョブ ・・・ 変換 学習用 データ RDD 学習用データは何度も 読み込むのでキャッシュ する RDDの複数回の変 換が特徴空間の 点同士の距離計 算や重心の計算 に対応
  41. 41. 41Copyright © 2014 NTT DATA Corporation KMeansはSparkでどのように処理されるか RDD RDD ジョブ ・・・ RDD ・・・ 計算結果が収束するか、指 定された回数まで同様の計 算を実行する 変換 HDFS 学習用 データ 学習用データは何度も 読み込むのでキャッシュ する 反復過程 のモデル RDDの複数回の変 換が特徴空間の 点同士の距離計 算や重心の計算 に対応
  42. 42. 42Copyright © 2014 NTT DATA Corporation KMeansはSparkでどのように処理されるか RDD RDD ジョブ ・・・ RDD ・・・ 計算結果が収束するか、指 定された回数まで同様の計 算を実行する 変換 HDFS 学習用 データ 学習用データは何度も 読み込むのでキャッシュ する 2回目以降の反復では、 学習用データは都度 HDFSから読み込まず、 キャッシュを利用できる 反復過程 のモデル 最終結果の モデル RDDの複数回の変 換が特徴空間の 点同士の距離計 算や重心の計算 に対応
  43. 43. 43Copyright © 2014 NTT DATA Corporation KMeansはSparkでどのように処理されるか RDD RDD ジョブ ・・・ RDD ・・・ 計算結果が収束するか、指 定された回数まで同様の計 算を実行する RDDの複数回の変 換が特徴空間の 点同士の距離計 算や重心の計算 に対応 変換 HDFS 学習用 データ 学習用データは何度も 読み込むのでキャッシュ する 2回目以降の反復では、 学習用データは都度 HDFSから読み込まず、 キャッシュを利用できる 反復過程 のモデル 最終結果の モデル 反復間でネット ワーク転送が発 生するのは、反 復過程のモデ ルなど最低限に 抑えられる
  44. 44. 44Copyright © 2014 NTT DATA Corporation KMeansはSparkでどのように処理されるか RDD RDD ジョブ ・・・ RDD ・・・ 計算結果が収束するか、指 定された回数まで同様の計 算を実行する RDDの複数回の変 換が特徴空間の 点同士の距離計 算や重心の計算 に対応 変換 HDFS 学習用 データ 学習用データは何度も 読み込むのでキャッシュ する 2回目以降の反復では、 学習用データは都度 HDFSから読み込まず、 キャッシュを利用できる 反復過程 のモデル 最終結果の モデル 反復間でネット ワーク転送が発 生するのは、反 復過程のモデ ルなど最低限に 抑えられる 一連の反復が 1つのジョブで 表現される
  45. 45. 45Copyright © 2014 NTT DATA Corporation KMeansはSparkでどのように処理されるか RDD RDD RDD HDFS ジョブ ・・・ RDD ・・・ 計算結果が収束するか、指 定された回数まで同様の計 算を実行する 反復ごとのデータの受け渡し にはHDFSを介さない RDDの複数回の変換が特徴 空間の点同士の距離計算や 重心の計算に対応 KMeansの実行プロセスからSpark+MLlibの特徴をまとめると・・・  複数回の反復処理を1回のジョブとして定義できるので、ジョブ起 動に関わるオーバーヘッドがジョブ全体に占める割合が小さくなる  キャッシュ機構を活用することで、反復ごとに学習データをHDFSか ら読みだす必要がなく、IOのオーバーヘッドを削減できる  反復処理間でのデータ交換に関わるネットワーク転送やディスクIO が最低限に抑えられるようにスケジューリングが工夫されている 反復処理全体のレイテンシを 小さくすることに貢献している
  46. 46. Copyright © 2014 NTT DATA Corporation 46 機械学習の活用を加速する仕組み
  47. 47. 47Copyright © 2014 NTT DATA Corporation  Sparkには試行錯誤のための道具がそろっている Sparkに付属するインタラクティブシェルで、試行錯誤しながら パラメータのチューニングや使用するアルゴリズムの選定など、 試行錯誤の回転率を上げることができる  MLlibはSparkプロジェクトに包含されたエコシステムで ある Sparkプロジェクトに包含されているほかのエコシステムとの連 携が容易 - Spark Streaming+MLlibでオンライン機械学習 - Spark SQLで作成したテーブルデータを機械学習で活用 機械学習の活用を加速する
  48. 48. 48Copyright © 2014 NTT DATA Corporation Map Reduce Spark MLlibなど HDFS分散ファイルシステム YARN分散リソース管理基盤 分散処理フレームワーク そのほかの フレームワーク フレームワーク間でデータを共有可能 Hive/Pig・・・高レベルライブラリ/ツール 分散処理フレームワーク間で連携が可能 YARN上のフレームワーク間でデータの共有や処理系の使い分けによって、  もともと機械学習とは別の目的で利用していたデータを機械学習に活用  クラスタのメモリの総量におさまらないような大量の未整形データを、従来の MapReducedで処理し、Spark+MLlibでの機械学習に適した形に成形 などが可能になる
  49. 49. 49Copyright © 2014 NTT DATA Corporation  大量データを扱う上での従来の機械学習ライブラリの課題と分 散処理基盤「Hadoop」が切り開いた道  リーズナブルにスケールアウト可能な処理系が必要であり、Hadoop がそれを可能にした  Hadoopが苦手とする処理とHadoopによる機械学習  反復処理をMapReduceで表現すると多段のジョブ構成になるが、 ジョブが多段になると処理全体のレイテンシが大きくなる  Spark+MLlibが解決した従来の機械学習ライブラリの課題  Hadoopの仕組みの活用でスケーラブルな機械学習を可能にした  複雑な処理のレイテンシを小さくする工夫で反復処理を高速化した  機械学習の活用を加速するしくみ  Sparkには試行錯誤しやすい仕組みが備わっている  Sparkのエコシステム間連携や、分散処理フレームワーク間連携に よって、機械学習の活用の幅出しが可能 まとめ
  50. 50. 50Copyright © 2014 NTT DATA Corporation 【余談】その後のMahout MahoutもSparkでの動作をサポートするようです
  51. 51. Copyright © 2011 NTT DATA Corporation Copyright © 2014 NTT DATA Corporation お問い合わせ先: 株式会社NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス URL: http://oss.nttdata.co.jp/hadoop メール: hadoop@kits.nttdata.co.jp TEL: 050-5546-2496 ご清聴ありがとうございました

×