数式を使わないJubatus入門 分散処理編

11,539 views

Published on

Published in: Technology

数式を使わないJubatus入門 分散処理編

  1. 1. 数式を使わないJubatus入門 ~分散処理編~ 愛甲健二 Twitter: @07c00 kenjiaiko@gmail.com 1
  2. 2. はじめに 本資料は「数式を使わないJubatus入門」の続編です 数式を使わないJubatus入門 http://www.slideshare.net/KenjiAiko/jubatus-22389573 まずは上記の資料から読むことをお勧めします また主にJubatusでの分散処理のやり方について書いてますが 分散処理やJubatusについてシロウトなので いろいろと間違ってるかもしれないこと予めご了承くださいま せ 2
  3. 3. 前回までの話 3
  4. 4. ざっくりとしたJubatus概要 (1/5) Jubatus Server Jubatus Client 4
  5. 5. ざっくりとしたJubatus概要 (2/5) Jubatus Server Jubatus Client 学習しといて ~ おk 5
  6. 6. ざっくりとしたJubatus概要 (3/5) Jubatus Server Jubatus Client 学習中… 6
  7. 7. ざっくりとしたJubatus概要 (4/5) Jubatus Server Jubatus Client これどこ? クラスAに分類 されますね~ 7
  8. 8. ざっくりとしたJubatus概要 (5/5) Jubatus Server Jubatus Client • 用意するもの – データセット(学習 and テストデータ) – サーバ(設定ファイルのみ → .json に記述) – クライアント(One of Python, C++, Ruby or Java) 8
  9. 9. 今回は… 9
  10. 10. ざっくりとしたJubatus概要 (5/5) Jubatus Server Jubatus Client 10 ここを分散化する話
  11. 11. ざっくりとした分散処理の概要 (1/4) 11 Jubatusの Zookeeper(Manager) Server Proxy Server Client Proxy
  12. 12. ざっくりとした分散処理の概要 (2/4) 12 Zookeeper(Manager) Server Proxy Server Client Proxy 新しくZookeeper(1台以上)というマネー ジャが追加される(全マシンの管理、設定 ファイルの適用などを受け持つ)
  13. 13. ざっくりとした分散処理の概要 (3/4) 13 Zookeeper(Manager) Server Proxy Server Client Proxy プロキシはデータを受け取ったら ランダムにサーバを選択し、問い合わ せる
  14. 14. ざっくりとした分散処理の概要 (4/4) 14 Zookeeper(Manager) Server Proxy Server Client Proxy 学習… 学習… 学習はそれぞれが行い 結果は定期的に共有(MIX) する
  15. 15. 設定(.json)の適用 15 Zookeeper(Manager) IP: 172.31.7.70 $ sudo /usr/share/zookeeper/bin/zkServer.sh start $ jubaconfig -c write -f ja_test.json -t classifier -n nico -z 172.31.7.70:2181 1. Zookeeper起動(zkServer.sh) • http://zookeeper.apache.org/ • http://jubat.us/ja/tutorial_distributed.html 2. 設定(.json)の適用 • -t オプションにサーバの種類(classifier) • -n オプションに識別文字列(nico) • -z オプションにManagerのIPアドレス →ja_test.jsonについては「数式を使わないJubatus入門」を参 照 http://www.slideshare.net/KenjiAiko/jubatus-22389573
  16. 16. プロキシ&サーバ起動 16 $ jubaclassifier --zookeeper 172.31.7.70:2181 -n nico Server $ jubaclassifier_proxy --zookeeper 172.31.7.70:2181 $ jubactl -z 172.31.7.70:2181 -s classifier -t classifier -c status -n nico active jubaproxy members: 172.31.7.68_9199 172.31.7.72_9199 active jubavisor members: active nico members: 172.31.7.69_9199 172.31.7.71_9199 on Zookeeper(Manager) IP: 172.31.7.70 ←プロキシとして二台起動していることを確認 ←サーバとして二台起動していることを確認 (※)--interval_secオプションでMIXする間隔を秒単位で指 定可 Proxy
  17. 17. サーバログ 17 ... secs, 8 bytes (serialized data) has been put. I0913 19:47:31.217651 2370 linear_mixer.cpp:213] .... 23th mix done. I0913 19:48:03.240432 2370 linear_mixer.cpp:207] starting mix: I0913 19:48:03.244204 2370 linear_mixer.cpp:264] mixed with 2 servers in 0.003718 secs, 8 bytes (serialized data) has been put. I0913 19:48:03.244361 2370 linear_mixer.cpp:213] .... 24th mix done. I0913 19:48:19.254685 2370 linear_mixer.cpp:207] starting mix: I0913 19:48:19.258323 2370 linear_mixer.cpp:264] mixed with 2 servers in 0.003466 secs, 8 bytes (serialized data) has been put. I0913 19:48:19.258445 2370 linear_mixer.cpp:213] .... 25th mix done. I0913 19:48:35.267849 2370 linear_mixer.cpp:207] starting mix: I0913 19:48:35.276492 2370 linear_mixer.cpp:264] mixed with 2 servers in 0.008466 secs, 8 bytes (serialized data) has been put. I0913 19:48:35.276619 2370 linear_mixer.cpp:213] .... 26th mix done. I0913 19:49:07.294831 2370 linear_mixer.cpp:207] starting mix: I0913 19:49:07.302772 2370 linear_mixer.cpp:264] mixed with 2 servers in 0.007763 secs, 8 bytes (serialized data) has been put. I0913 19:49:07.302896 2370 linear_mixer.cpp:213] .... 27th mix done. こんな感じで表示されたらOK!
  18. 18. 学習&評価の流れ(1/4) 18 Zookeeper(Manager) Server Proxy Server Client Proxy 学習はランダムに選択された サーバで行われる
  19. 19. OK 学習&評価の流れ(2/4) 19 Zookeeper(Manager) Server Proxy Server Client Proxy評価もランダムに選択された サーバで行われるため 実行毎に評価結果が異なる
  20. 20. OK 学習&評価の流れ(3/4) 20 Zookeeper(Manager) Server Proxy Server Client Proxy一定間隔で行われるMIX後 学習結果が計算され 評価結果も同じになる
  21. 21. 21 $ python ja_test.py samplelog/m2 ('', 0) $ python ja_test.py samplelog/m2 ('Mayoi', 0.07325346022844315) $ python ja_test.py samplelog/m2 ('Mayoi', 0.07325346022844315) $ python ja_test.py samplelog/m2 ('', 0) $ python ja_test.py samplelog/m2 ('Mayoi', 0.03662673011422157) $ python ja_test.py samplelog/m2 ('Mayoi', 0.03662673011422157) $ python ja_test.py samplelog/m2 ('Mayoi', 0.03662673011422157) $ python ja_test.py samplelog/m2 ('Mayoi', 0.03662673011422157) 学習&評価の流れ(4/4) ここでMIXが行われた アクセスするサーバ(2台) により 評価毎に結果が異なる 評価結果が同じになる (平均がとられた?) (※)--interval_secオプションでMIXする間隔を秒単位で指 定可 MIX前後の評価プログラム実行ログ
  22. 22. まとめ 22 • 基本的にZookeeperから全体を管理 • プログラムや設定ファイル(.json)に変更 なし • MIXのタイミング、動作には注意 ■用意するもの データセット .jsonファイル(tutorialからコピー可) クライアントプログラム(tutorialからコ ピー可) Zookeeperマシン プロキシ×N台、サーバ×N台 これだけで(機械学習の)分散処理ができ る!
  23. 23. Jubatus: オンライン機械学習向け分散処理フレームワーク http://jubat.us/ja/ http://jubat.us/ja/tutorial.html http://jubat.us/ja/tutorial_distributed.html 国立情報学研究所(ニコニコデータセット) http://www.nii.ac.jp/cscenter/idr/nico/nico.html ありがとうございました! 23

×