once upon a time,

Iris Tradをビール片手に聞くのが好きなエンジニアが、機械学習やRubyにまつわる話を書きます

「夏真っ盛り!Spark + Python + Data Science祭り」を開催しました&Ibisを紹介しました #summerDS

2016/07/25に「夏真っ盛り!Spark + Python + Data Science祭り」を開催しました。

connpass.com

今回はClouderaに入って初めてのコミュニティイベントということでしたが、なんと400人を超える応募をいただいてとてもありがたい限りです。 会場をご提供いただいたDMM.comラボ様、発表いただいたサイバーエージェントの内藤さん、DMM.comラボの加嵜さん、LTの皆様ありがとうございました。

togetter.com

pandasを大規模データにつなぐIbis

www.slideshare.net

Ibisはpandasの作者でもある Wes McKinney(@wesmckinn) の作っているライブラリです。 ひとことで言うと、pandasのプログラマブルな処理を大規模データにもできるようにします。 大規模データは高速なSQLエンジンにまかせて、pandas likeなDSLでpandasと連携できるようにしており、データがTB以上のデータに対してもSQLを書かずに試行錯誤できます。

なお、日本語の情報はかなり少ないのですが*1、こちらのブログが参考になると思います。 もし、Impalaを試すのであればQuick Start VMか、Cloudera Directorを使うとブラウザでポチポチするだけでAWS, GCP, Azureに簡単にImpalaクラスターが立てれるのでおすすめです。Director導入方法はこちらが参考になります。

Ibisの詳細は資料を見ていただければと思いますが、いくつか補足をしたいと思います。

SQLじゃなくてプログラマブルなのは何が嬉しいの?

pandasをお使いの方はわかると思いますが、SQLに比べると試行錯誤がやりやすいと思います。例えば、SQLの途中結果を変数に格納できるので、途中までの処理は共通でそこから先を複数パターン作るというのも同じ変数に格納して、後段のメソッドチェーンを変えれば楽にできるというメリットが有ります。使っている感覚はRailsのActive Recordみたいなイメージです。

Sparkより7倍速いのは嬉しいの?

大事なのは15TBのデータを4.4秒で処理できる*2というスピード感です。処理を投げて帰ってくるまでの時間が短いと、思考の中断が減ります。 例えば、ビルドやテストに時間がかかってコーヒーをいれにいく、みたいな経験はあるんじゃないかと思います。その断絶がなくなるので、考えを継続できますし、ポッと思いついたことをどんどん試行錯誤できます。

Sparkとの住み分けは?

Ibisは、WesがPythonでend to endでPythonを使って分析をしたいという想いでスタートしています。 個人的にはJupyterとともに対話的に試行錯誤をする強力なツールになっていると思います。 もともとImpalaとPython/pandasをつなぐものとしてスタートしたのですが、RedshiftやPrestoなども今後対応していきたいということも言及されています。 なので、プロトタイピングにJupyterとIbisを使うというのが良いと思います。プロトタイプ後にSparkSQL*3でバッチとして安定化をはかるということもできるでしょう。

もう一つの方向性としては、NetflixがグローバルモデルをSparkで、国・地域のモデルをRで学習しているように、大規模な機械学習はSpark + MLlibで、絞った後のデータはIbis + scikit-learnでみたいな使い分けは可能だと思います。

サイバーエージェント内藤さん: Amebaにおけるレコメンデーションシステムの紹介

www.slideshare.net

Amebaでの協調フィルタリングによるHBaseを使ったリアルタイムレコメンドの話。 Hadoopスタックだとリアルタイム性を出すのにはHBaseを使うのが多いのですが*4、更にClick数を取得してバンディットアルゴリズムも使っているというのは凄いですね。

単純なA/Bテストをするという話はDMM.comラボの加嵜さんもお話されていましたが、バンディットアルゴリズムを組み合わせることで、レコメンド結果が複数のロジックの中でも良い物に動的に改善されていくという仕組みが入っています。 僕個人としてはこうした取り組みを聞いたことがなかったので、とても驚きました。

DMM.comラボ加嵜さん:Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化

www.slideshare.net

チューニングの話もインパクトが大きかったですが、jsonで「レシピ」を書けば、自分のサービスのレコメンドモデルができるという話はとても驚きました。 これを使えば、レコメンドに詳しくない人でも簡単にサービスに導入できそうです。 おそらく、ログフォーマットをきちんと統一して横展開をしているのでしょうね。

LT

horiken4 さん:初めてのSparkでハマったこと

Google Data ProcでSparkを使ったら/tmpにjarが貯まるなど、いろいろハマった話を紹介いただきました。

uryyyyyyyさん:EMR上でPython3系でpysparkする話

qiita.com

EMRにAnacondaをいれてPySparkでモデルを作る話でした。逆質問でJuliaを使ってると答えた人が2人くらいだったとのことで寂しかったです。

suthio さん:Sparkで実装しているレコメンドエンジンの基本的なパフォーマンスチューニング について

DAGを見よう!という話でした。そして、ポケモンGO仲間を募集しているとのことです。

終わりに

やはり、自社で手を動かして取り組まれているという話は、様々な知見が含まれていてとても楽しかったです。 AmebaのHBaseを使ったリアルタイムレコメンド+バンディットアルゴリズムという構成や、DMM.comラボさんのレコメンドの「レシピ」を書くだけで新規サービスのレコメンドモデルができるという話は衝撃的でした。

自分がホストしたイベントの中では過去最大の募集人数だったのですが、大盛況のうちに終わりました。ご協力・ご参加いただいた皆様ありがとうございました。 今回参加できなかった方もたくさんいらっしゃると思いますので、また次回もこういったイベントをできればと考えています。 乞うご期待ください。

*1:しかし、日本でIbisというと某研究会しか出てこないので非常につらい

*2:http://blog.cloudera.com/blog/2016/02/new-sql-benchmarks-apache-impala-incubating-2-3-uniquely-delivers-analytic-database-performance/

*3:こちらもIbisのスコープに入っています

*4:リクルートさんもHBaseを使ったリアルタイムレコメンドをしています