post Image
機械学習向け並列分散処理フレームワーク Petuum について調べてみた

機械学習アドベントカレンダー 3 日目の記事です。

IBIS の招待講演で聴いた、機械学習向けの並列分散処理フレームワーク Petuum について書きます。

現在ビッグデータ処理のデファクトスタンダード的存在として Hadoop がありますが、その Hadoop 上で MapReduce を高速に行えるようにしたものが Spark です。

Petuum は、Hadoop 上でデータを処理するところまでは Spark と同じですが、機械学習に特化することで、最適化などの特定の種類の問題を Spark より高速に処理できるようにしているようです。

Petuum がなぜ速いのか興味がある方は、公式の Research ページ に載っているスライドや論文を読んでみてもよいかもしれません。

どれくらい速いのか

Petuum 開発の中心的存在であるカーネギーメロン大学の Eric P. Xing が出していた論文に、以下のようなグラフが出ていました。

petuum.png
cf: http://www.cs.cmu.edu/~./seunghak/petuum_kdd15.pdf

左のグラフは、既存のプラットフォームと比べてどれだけ性能が出ているかというもので、 LDA なら YahooLDA の 5 倍強、行列の因子分解では Spark の 2 倍のパフォーマンスが出ています。
右のグラフは、サーバーの台数を増やしたときに、理想的な演算能力にどれだけ近づけているかを示すものですが、 CNN ではサーバー 4 台で 3 倍強、計量学習ではほぼ理想に近いくらいの(サーバー 4 台にしたら 4 倍)スピードアップができているようでした。

手前味噌という感もないではないので、額面通りに受け取ってよいかどうかは微妙なところですが、これからビッグデータに対して機械学習で何かやろうという人や、今やっているけど遅くて悩んでいるという人は、検討してみてもよいかもしれません。

なにが使えるか

いくら速いといっても、使えるアルゴリズムが少なければ使い道がありません。
公式マニュアルでラインナップを覗いてみたところ、以下のような感じでした。

  1. Topic Models
    1. Latent Dirichlet Allocation (topic modeling)
    2. MedLDA (supervised topic modeling)
  2. Deep Learning
    1. Poseidon: Distributed Deep Learning Framework on Petuum
    2. General-purpose Deep Neural Network (DNN)
    3. DNN for Speech Recognition
  3. Matrix Factorization and Sparse Coding
    1. Matrix Factorization (collaborative filtering)
    2. Non-negative Matrix Factorization (NMF)
    3. Sparse Coding
  4. Regression
    1. Lasso Regression
  5. Metric Learning
    1. Distance Metric Learning
  6. Clustering
    1. K-means Clustering
  7. Classification
    1. Random Forest
    2. Logistic Regression
    3. SVM (Newly added in v1.1)
    4. Multi-class Logistic Regression

記事の分類などに使えるトピックモデルや、推薦システムによく使われる行列分解などはおさえてあり、さらに Spark の mllib にはない深層学習もあるようです。

逆に、 Spark の mllib にあって Petuum にないのは、ナイーブベイズや混合ガウスモデルでしたが、ここら辺のニーズがすごくあるかというと微妙なので、 Spark を使う強い理由にはならない気がします。

なにで使えるか

Spark は Scala/Java/Python/R で使えますが、 Petuum はその辺どうなんだろうと思って調べてみました。

ソースコードは GitHub で公開されていたので、 K-means のページ を見てみたところ、実装は C++ 、呼び出しは Python という感じで分かれていました。

他の言語で使うときは、その呼び出し部分を自分で作る感じになるんでしょうか。Spark では言語ごとに別々に実装されていたので、それと比べるとだいぶ効率的な感じがします。ただ、細かいところを変えるとなると C++ で書く必要が出てくるので、そのあたりは少しユーザーを選びそうですね。

JBosen という Java 実装もあるようですが、こちらにはまだ一部のアルゴリズムしか実装されていませんでした。

おわりに

というわけで、 Petuum の紹介でした。

なお、この記事を書くきっかけになった IBIS の招待講演の概要はここにまとめられています。

さて、明日は @Quasi-quant2010 さんによる「Noise Contrastive Estimationについて」です!!


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。