14
© 2013 Jubatus チチチ 前前前 Casual Talk 前前前前前前 前前前前前前前前前前前 Jubatus チチチ チチ チ

前回のCasual Talkでいただいたご要望に対する進捗状況

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: 前回のCasual Talkでいただいたご要望に対する進捗状況

© 2013 Jubatusチーム

前回の Casual Talkでいただいたご要望に対する進捗状況

Jubatus チーム小田 哲

Page 2: 前回のCasual Talkでいただいたご要望に対する進捗状況

2 © 2013 NTT Software Innovation Center

要望: Java版クライアントをなんとかせよ

Page 3: 前回のCasual Talkでいただいたご要望に対する進捗状況

3 © 2013 NTT Software Innovation Center

これまでの対応(完了)

Datum d;

// user01 d = new Datum().addNumber("movie_A", 5).addNumber("movie_B", 2) .addNumber("movie_C", 3); r.updateRow("user01", d);

// user02 d = new Datum().addNumber("movie_A", 2).addNumber("movie_B", 5) .addNumber("movie_C", 1); r.updateRow("user02", d);

// user03 d = new Datum().addNumber("movie_A", 5).addNumber("movie_B", 1) .addNumber("movie_C", 4); r.updateRow("user03", d);

Datum d = new Datum(); d.string_values = new ArrayList<TupleStringString>(); d.num_values = new ArrayList<TupleStringDouble>();

TupleStringDouble tuple1, tuple2, tuple3;

// user01 tuple1 = new TupleStringDouble(); tuple1.first = "movie_A"; tuple1.second = 5; d.num_values.add(tuple1);

tuple2 = new TupleStringDouble(); tuple2.first = "movie_B"; tuple2.second = 2; d.num_values.add(tuple2);

tuple3 = new TupleStringDouble(); tuple3.first = "movie_C"; tuple3.second = 3; d.num_values.add(tuple3);

r.update_row(NAME, "user01", d);

// user02 tuple1 = new TupleStringDouble(); tuple1.first = "movie_A"; tuple1.second = 2; d.num_values.add(tuple1);

tuple2 = new TupleStringDouble(); tuple2.first = "movie_B"; tuple2.second = 5; d.num_values.add(tuple2);

tuple3 = new TupleStringDouble(); tuple3.first = "movie_C"; tuple3.second = 1; d.num_values.add(tuple3);

r.update_row(NAME, "user02", d);

// user03 tuple1 = new TupleStringDouble(); tuple1.first = "movie_A"; tuple1.second = 5; d.num_values.add(tuple1);

tuple2 = new TupleStringDouble(); tuple2.first = "movie_B"; tuple2.second = 1; d.num_values.add(tuple2);

tuple3 = new TupleStringDouble(); tuple3.first = "movie_C"; tuple3.second = 4; d.num_values.add(tuple3);

r.update_row(NAME, "user03", d);

自動生成されるクライアントを見直しました。例: jubatus-java-skelton

Page 4: 前回のCasual Talkでいただいたご要望に対する進捗状況

4 © 2013 NTT Software Innovation Center

要望:モデルを取得できるように

• 対応済み• classifier, ( NN, Recommender等の) inverted_index

• 未対応• regression, bit_vector

• チームがかかえる悩み• ハッシュ値を表示しても意味が分からない。どうすればいいか?

Jubadumpという saveしたデータを dumpするサポートアプリケーションを公開しました。

これまでの対応( 70%・スタック)

Page 5: 前回のCasual Talkでいただいたご要望に対する進捗状況

5 © 2013 NTT Software Innovation Center

想定する使い方

学習用クライアント

データソース

Jubatusサーバ

分析用クライアン

ト save API

学習モデル○○○.js

•学習中に save APIを呼び出す。•出力されたモデルデータ (binary形式 )をjubadumpに入力する。•出力された JSON形式のモデルを表示し、中の状態を確認する。

jubadump JSON形式のモデル

Page 6: 前回のCasual Talkでいただいたご要望に対する進捗状況

6 © 2013 NTT Software Innovation Center

要望:障害に対する配慮を

•エラーメッセージを見て何が起きているのか分からない•障害に対する作りこみが足りない

Page 7: 前回のCasual Talkでいただいたご要望に対する進捗状況

7 © 2013 NTT Software Innovation Center

これまでの対応( 30%)

•エラーメッセージについて• エラーメッセージを一部改善しました。

• 悪名高き RPC Error 2がでなくなりました。• エラーメッセージ対応表を作成中です。

• classifier, recommender

•サーバの追加、離脱において、極端に精度が悪化する問題について対応中です。• 0.5.Xもしくは、 0.6.0にマージするための作業を実施中です。

期待した動作プロセス 1

プロセス 2

プロセス 3

起きうる動作プロセス 1

プロセス 2

プロセス 3

Page 8: 前回のCasual Talkでいただいたご要望に対する進捗状況

8 © 2013 NTT Software Innovation Center

要望:ミドルウェアとしてもっとシンプルに

•依存ライブラリが多すぎる• pficommon, msgpack, jubatus-messegepack-rpc,

jubatus-mpio, Google glog, pkg-config, zookeeper-c-client, re2, mecab, ux

•実装言語が多すぎる• C++, python, Haskell, Ocaml

•上記によりメンテナンスコストが膨大である。

Page 9: 前回のCasual Talkでいただいたご要望に対する進捗状況

9 © 2013 NTT Software Innovation Center

これまでの対応( 50%)

•依存ライブラリを見直しました。• ABIが発展途上である pficommon, re2の依存をなくしました。

• 必須の依存ライブラリで、ライセンス的に問題ないものは同梱するようになりました。• バージョンの違いによる動作検証が減りました。

• 今後も必須ではないミドルウェアへの依存を減らしていきたいと考えています。• 優先順位付けとそれに伴う pull request をお待ちしております。

•実装言語を減らしました。• コードの自動生成に利用していたmpidl相当の機能を、 jeneratorに統合しました。これにより、 Haskellを使わずにコード生成ができるようになりました。

Page 10: 前回のCasual Talkでいただいたご要望に対する進捗状況

10 © 2013 NTT Software Innovation Center

要望:Mixの利点を示せ

http://www.slideshare.net/hadoopxnttdata/jubatus-5より

Page 11: 前回のCasual Talkでいただいたご要望に対する進捗状況

11 © 2013 NTT Software Innovation Center

これまでの対応(継続検討中)

•Mixが活きる部分は以下のとおりと考えています• classifier, regression

• 高次元でなかなか収束しない所

• recommender, clustering, NearestNeighbor• update, analyze 頻度が極めて高いところ

•分散ハンズオンを実施しました• AWSを利用して、分散環境で nearest neighborを動作させるハンズオンを実施しました。• http://download.jubat.us/event/handson_03/• 今後とも、分散構成および Mixの使いドコロ、推奨設定、推奨環境などの各種情報を提供してまいります。

Page 12: 前回のCasual Talkでいただいたご要望に対する進捗状況

12 © 2013 NTT Software Innovation Center

要望:分散動作モデルのあり方を示せ

• Shared-Everythingな動作モデルを前提とするのは正しいのか?

•Updateの速度をあげるのか?•一台あたりが管理するデータの容量をさげるのか?

Page 13: 前回のCasual Talkでいただいたご要望に対する進捗状況

13 © 2013 NTT Software Innovation Center

これまでの対応(継続検討中)

• Jubatusの分散に対する 2013 年 12 月現在の考え方を整理しました。

上げたい速度 担当する個所

スループット システム

レイテンシ アルゴリズム

Jubatusはスループットを上げるために分散を行います。応答速度(レイテンシ)は、オンラインアルゴリズムを積極的に選択する、などアルゴリズムレベルの改善を進めていきます。

Page 14: 前回のCasual Talkでいただいたご要望に対する進捗状況

14 © 2013 NTT Software Innovation Center

ありがとうございます

• Jubatusチームでは、特に実際に使っていただけたことで出てくる課題、要望などにできるだけ取り組んでいきたいと考えております。

•ご要望は以下まで• Github issue(http://github.com/jubatus)• Twitter @JubatusOffi cial• E-mail [email protected]

•引き続き、よろしくお願い致します。