前回のcasual talkでいただいたご要望に対する進捗状況
DESCRIPTION
TRANSCRIPT
© 2013 Jubatusチーム
前回の Casual Talkでいただいたご要望に対する進捗状況
Jubatus チーム小田 哲
2 © 2013 NTT Software Innovation Center
要望: Java版クライアントをなんとかせよ
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
4 © 2013 NTT Software Innovation Center
要望:モデルを取得できるように
• 対応済み• classifier, ( NN, Recommender等の) inverted_index
• 未対応• regression, bit_vector
• チームがかかえる悩み• ハッシュ値を表示しても意味が分からない。どうすればいいか?
Jubadumpという saveしたデータを dumpするサポートアプリケーションを公開しました。
これまでの対応( 70%・スタック)
5 © 2013 NTT Software Innovation Center
想定する使い方
学習用クライアント
データソース
Jubatusサーバ
分析用クライアン
ト save API
学習モデル○○○.js
•学習中に save APIを呼び出す。•出力されたモデルデータ (binary形式 )をjubadumpに入力する。•出力された JSON形式のモデルを表示し、中の状態を確認する。
jubadump JSON形式のモデル
6 © 2013 NTT Software Innovation Center
要望:障害に対する配慮を
•エラーメッセージを見て何が起きているのか分からない•障害に対する作りこみが足りない
7 © 2013 NTT Software Innovation Center
これまでの対応( 30%)
•エラーメッセージについて• エラーメッセージを一部改善しました。
• 悪名高き RPC Error 2がでなくなりました。• エラーメッセージ対応表を作成中です。
• classifier, recommender
•サーバの追加、離脱において、極端に精度が悪化する問題について対応中です。• 0.5.Xもしくは、 0.6.0にマージするための作業を実施中です。
期待した動作プロセス 1
プロセス 2
プロセス 3
起きうる動作プロセス 1
プロセス 2
プロセス 3
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
•上記によりメンテナンスコストが膨大である。
9 © 2013 NTT Software Innovation Center
これまでの対応( 50%)
•依存ライブラリを見直しました。• ABIが発展途上である pficommon, re2の依存をなくしました。
• 必須の依存ライブラリで、ライセンス的に問題ないものは同梱するようになりました。• バージョンの違いによる動作検証が減りました。
• 今後も必須ではないミドルウェアへの依存を減らしていきたいと考えています。• 優先順位付けとそれに伴う pull request をお待ちしております。
•実装言語を減らしました。• コードの自動生成に利用していたmpidl相当の機能を、 jeneratorに統合しました。これにより、 Haskellを使わずにコード生成ができるようになりました。
10 © 2013 NTT Software Innovation Center
要望:Mixの利点を示せ
http://www.slideshare.net/hadoopxnttdata/jubatus-5より
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の使いドコロ、推奨設定、推奨環境などの各種情報を提供してまいります。
12 © 2013 NTT Software Innovation Center
要望:分散動作モデルのあり方を示せ
• Shared-Everythingな動作モデルを前提とするのは正しいのか?
•Updateの速度をあげるのか?•一台あたりが管理するデータの容量をさげるのか?
13 © 2013 NTT Software Innovation Center
これまでの対応(継続検討中)
• Jubatusの分散に対する 2013 年 12 月現在の考え方を整理しました。
上げたい速度 担当する個所
スループット システム
レイテンシ アルゴリズム
Jubatusはスループットを上げるために分散を行います。応答速度(レイテンシ)は、オンラインアルゴリズムを積極的に選択する、などアルゴリズムレベルの改善を進めていきます。
14 © 2013 NTT Software Innovation Center
ありがとうございます
• Jubatusチームでは、特に実際に使っていただけたことで出てくる課題、要望などにできるだけ取り組んでいきたいと考えております。
•ご要望は以下まで• Github issue(http://github.com/jubatus)• Twitter @JubatusOffi cial• E-mail [email protected]
•引き続き、よろしくお願い致します。