Submit Search
Upload
rzmq
•
10 likes
•
8,682 views
Masayuki Isobe
Follow
TokyoR #31 LT発表資料
Read less
Read more
Report
Share
Report
Share
1 of 11
Recommended
20110205.conference
20110205.conference
YAMANE Toshiaki
R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略
Yohei Sato
第31回TokyoR LT資料
第31回TokyoR LT資料
tetsuro ito
可視化周辺の進化がヤヴァイ~rChartsを中心として~
可視化周辺の進化がヤヴァイ~rChartsを中心として~
Nagi Teramo
中の人が語る seekR.jp の裏側
中の人が語る seekR.jp の裏側
Takekatsu Hiramura
Abテストと検定
Abテストと検定
Teruki Shinohara
R による文書分類入門
R による文書分類入門
Takeshi Arabiki
TokyoR#31 初心者セッション
TokyoR#31 初心者セッション
TokorosawaYoshio
Recommended
20110205.conference
20110205.conference
YAMANE Toshiaki
R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略
Yohei Sato
第31回TokyoR LT資料
第31回TokyoR LT資料
tetsuro ito
可視化周辺の進化がヤヴァイ~rChartsを中心として~
可視化周辺の進化がヤヴァイ~rChartsを中心として~
Nagi Teramo
中の人が語る seekR.jp の裏側
中の人が語る seekR.jp の裏側
Takekatsu Hiramura
Abテストと検定
Abテストと検定
Teruki Shinohara
R による文書分類入門
R による文書分類入門
Takeshi Arabiki
TokyoR#31 初心者セッション
TokyoR#31 初心者セッション
TokorosawaYoshio
Macで快適にプログラミング
Macで快適にプログラミング
Yusuke Sakurai
インフラエンジニア勉強会hbstudyについて
インフラエンジニア勉強会hbstudyについて
Toshiaki Baba
Klab expert camp 成果発表
Klab expert camp 成果発表
teruyaono1
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
Takashi Sogabe
シグナル
シグナル
bsdhack
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
Koichi Sakata
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
Tomoharu ASAMI
Deep learning reading club @ nimiri for SWEST
Deep learning reading club @ nimiri for SWEST
Kiyoshi Ogawa
WebエンジニアがXR業界へ転職した話
WebエンジニアがXR業界へ転職した話
Hiroshi Masuda
自前言語を仕事に使う話
自前言語を仕事に使う話
啓 小笠原
Object-Funcational Analysis and design
Object-Funcational Analysis and design
Tomoharu ASAMI
Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!
m ishizaki
Fn project爆誕
Fn project爆誕
Hiroshi Hayakawa
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
Shigeru Hanada
200923 01jp
200923 01jp
openrtm
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPS
uchan_nos
clominal
clominal
Masamitsu Oikawa
おとなのテキストマイニング
おとなのテキストマイニング
Munenori Sugimura
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用
Takuya Iwatsuka
オープンソースを用いたドローンの自律制御ソフトウェア技術
オープンソースを用いたドローンの自律制御ソフトウェア技術
Masayuki Isobe
関数型プログラミングとモナド
関数型プログラミングとモナド
Masayuki Isobe
More Related Content
Similar to rzmq
Macで快適にプログラミング
Macで快適にプログラミング
Yusuke Sakurai
インフラエンジニア勉強会hbstudyについて
インフラエンジニア勉強会hbstudyについて
Toshiaki Baba
Klab expert camp 成果発表
Klab expert camp 成果発表
teruyaono1
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
Takashi Sogabe
シグナル
シグナル
bsdhack
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
Koichi Sakata
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
Tomoharu ASAMI
Deep learning reading club @ nimiri for SWEST
Deep learning reading club @ nimiri for SWEST
Kiyoshi Ogawa
WebエンジニアがXR業界へ転職した話
WebエンジニアがXR業界へ転職した話
Hiroshi Masuda
自前言語を仕事に使う話
自前言語を仕事に使う話
啓 小笠原
Object-Funcational Analysis and design
Object-Funcational Analysis and design
Tomoharu ASAMI
Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!
m ishizaki
Fn project爆誕
Fn project爆誕
Hiroshi Hayakawa
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
Shigeru Hanada
200923 01jp
200923 01jp
openrtm
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPS
uchan_nos
clominal
clominal
Masamitsu Oikawa
おとなのテキストマイニング
おとなのテキストマイニング
Munenori Sugimura
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用
Takuya Iwatsuka
Similar to rzmq
(20)
Macで快適にプログラミング
Macで快適にプログラミング
インフラエンジニア勉強会hbstudyについて
インフラエンジニア勉強会hbstudyについて
Klab expert camp 成果発表
Klab expert camp 成果発表
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
シグナル
シグナル
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
Deep learning reading club @ nimiri for SWEST
Deep learning reading club @ nimiri for SWEST
WebエンジニアがXR業界へ転職した話
WebエンジニアがXR業界へ転職した話
自前言語を仕事に使う話
自前言語を仕事に使う話
Object-Funcational Analysis and design
Object-Funcational Analysis and design
Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!
Fn project爆誕
Fn project爆誕
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
200923 01jp
200923 01jp
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPS
clominal
clominal
おとなのテキストマイニング
おとなのテキストマイニング
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用
More from Masayuki Isobe
オープンソースを用いたドローンの自律制御ソフトウェア技術
オープンソースを用いたドローンの自律制御ソフトウェア技術
Masayuki Isobe
関数型プログラミングとモナド
関数型プログラミングとモナド
Masayuki Isobe
ジャパンドローンセミナー
ジャパンドローンセミナー
Masayuki Isobe
AIBOX DroneBrain 製品パンフレット
AIBOX DroneBrain 製品パンフレット
Masayuki Isobe
ファイブソリューションズデベロッパーネットワーク
ファイブソリューションズデベロッパーネットワーク
Masayuki Isobe
ドローン向けソフトウェア事業
ドローン向けソフトウェア事業
Masayuki Isobe
RDF/OWLの概要及びOSS実装、及び活用イメージについて
RDF/OWLの概要及びOSS実装、及び活用イメージについて
Masayuki Isobe
第三回機械学習アルゴリズム実装会イントロダクション
第三回機械学習アルゴリズム実装会イントロダクション
Masayuki Isobe
CasperJSを使って任意のWebサイトを電子書籍化する方法
CasperJSを使って任意のWebサイトを電子書籍化する方法
Masayuki Isobe
ScrapyとPhantomJSを用いたスクレイピングDSL
ScrapyとPhantomJSを用いたスクレイピングDSL
Masayuki Isobe
第二回機械学習アルゴリズム実装会 - LDA
第二回機械学習アルゴリズム実装会 - LDA
Masayuki Isobe
ブランディング指標の数値化について
ブランディング指標の数値化について
Masayuki Isobe
TEDxTitech 2013 speech material
TEDxTitech 2013 speech material
Masayuki Isobe
Rec sys2013 reading_isobe
Rec sys2013 reading_isobe
Masayuki Isobe
広告ナビゲータ・広告シミュレータ
広告ナビゲータ・広告シミュレータ
Masayuki Isobe
Uuyアドテクセミナー
Uuyアドテクセミナー
Masayuki Isobe
第12回モヤLT発表資料
第12回モヤLT発表資料
Masayuki Isobe
Tokyo.R 26 LT isobe
Tokyo.R 26 LT isobe
Masayuki Isobe
Tokyo r 25_lt_isobe
Tokyo r 25_lt_isobe
Masayuki Isobe
Tokyo.R #22 LT
Tokyo.R #22 LT
Masayuki Isobe
More from Masayuki Isobe
(20)
オープンソースを用いたドローンの自律制御ソフトウェア技術
オープンソースを用いたドローンの自律制御ソフトウェア技術
関数型プログラミングとモナド
関数型プログラミングとモナド
ジャパンドローンセミナー
ジャパンドローンセミナー
AIBOX DroneBrain 製品パンフレット
AIBOX DroneBrain 製品パンフレット
ファイブソリューションズデベロッパーネットワーク
ファイブソリューションズデベロッパーネットワーク
ドローン向けソフトウェア事業
ドローン向けソフトウェア事業
RDF/OWLの概要及びOSS実装、及び活用イメージについて
RDF/OWLの概要及びOSS実装、及び活用イメージについて
第三回機械学習アルゴリズム実装会イントロダクション
第三回機械学習アルゴリズム実装会イントロダクション
CasperJSを使って任意のWebサイトを電子書籍化する方法
CasperJSを使って任意のWebサイトを電子書籍化する方法
ScrapyとPhantomJSを用いたスクレイピングDSL
ScrapyとPhantomJSを用いたスクレイピングDSL
第二回機械学習アルゴリズム実装会 - LDA
第二回機械学習アルゴリズム実装会 - LDA
ブランディング指標の数値化について
ブランディング指標の数値化について
TEDxTitech 2013 speech material
TEDxTitech 2013 speech material
Rec sys2013 reading_isobe
Rec sys2013 reading_isobe
広告ナビゲータ・広告シミュレータ
広告ナビゲータ・広告シミュレータ
Uuyアドテクセミナー
Uuyアドテクセミナー
第12回モヤLT発表資料
第12回モヤLT発表資料
Tokyo.R 26 LT isobe
Tokyo.R 26 LT isobe
Tokyo r 25_lt_isobe
Tokyo r 25_lt_isobe
Tokyo.R #22 LT
Tokyo.R #22 LT
rzmq
1.
rzmq で 並列分散コンピューティング (自称) ZeroMQエバンジェリスト
礒部正幸 (@chiral)
2.
自己紹介 • R歴 約2年、TokyoR参加歴
約1年半 • 本業はソフト開発エンジニア • アドテクベンチャーを起業(まだひとりで奮闘中) – アドサーバ、DSP, 3PAS, DMPを作っています。 最近のヒット作
3.
ZeroMQ • 低レイテンシかつスケーラブルなトランスポートライブラリ – 「メッセージキュー付きのソケット」のようなもの •
アクターモデル的な実装が可能になる • プロセス内(スレッド間)、プロセス間(同一ホスト、別ホスト)のいずれにも対応 – 豊富な言語にバインディングが存在 • 言語間のインテグレーションが容易 • オープンソース(LGPL) • ピアの基本パターンを組み合わせることにより、豊富な分散処理形態に 対応できる(スケーラブル) Pub Sub Sub Sub Pub-Sub Push-Pull Push Pull Pull Pull Req Rep Req-Res
4.
rzmqパッケージ • ZeroMQのRバインディング • 同一マシン上、別マシン間で、簡単にデータのやり取りが出来る •
RとR、Rと別の言語、いずれでもデータをやり取りできる rzmq ZeroMQ rzmq ZeroMQ pyzmq ZeroMQ
5.
【1】 同じマシン上でRとRをつなぐ プロセス1(Rを起動) プロセス2(Rを起動) library(‘rzmq’) context
= init.context() sock1 = init.socket(context, “ZMQ_PULL”) bind.socket(sock1, “ipc:///test”) receive.socket(sock1) library(‘rzmq’) context = init.context() sock1 = init.socket(context, “ZMQ_PUSH”) connect.socket(sock1, “ipc:///test”) send.socket(sock1,“hoge”) [1] "hoge" 文字列の転送 receive.socket(sock1) receive.socket(sock1) x <- 3.14 y <- 1:5 send.socket(socket, x) send.socket(socket, y) 数値データ の転送 [1] 3.14 [1] 1 2 3 4 5 なんと関数 の転送も可能 f <- function(n) n*365 send.send(socket, f) send.send(socket, f) receive.socket(sock1) f <- receive.socket(sock1) f(10) function(n) n*365 [1] 3650 (参考) 逆方向にデータを送りたいときは、もう一組のPUSH-PULLソケットを作成する ちゃんと関数を使える
6.
【2】 別マシン間でRとRをつなぐ ホストAのプロセス(Rを起動) ホストBのプロセス(Rを起動) library(‘rzmq’) context
= init.context() sock1 = init.socket(context, “ZMQ_PULL”) bind.socket(sock1, “tcp://*:1234”) receive.socket(sock1) library(‘rzmq’) context = init.context() sock1 = init.socket(context, “ZMQ_PUSH”) connect.socket(sock1, “tcp:///192.168.10.1:1234”) send.socket(sock1,“hoge”) [1] "hoge" (参考) 両マシン上のRに同じパッケージが入っていれば、パッケージ関数の呼び出しは可能 ただし送れるのはピュアRのデータだけであり、パッケージの内部(C言語のメモリ)に 持っているデータは送ることができない。 以下、前頁と同様に数値データや関数を送受信できる 違いはここだけ 192.168.10.1 192.168.10.2 ポート1234
7.
【3】 Rと他言語をつなぐ library(‘rzmq’) library(‘rjson’) context =
init.context() sock1 = init.socket(context, “ZMQ_PULL”) sock2 = init.socket(context, “ZMQ_PUSH”) bind.socket(sock1, “ipc:///test1”) bind.socket(sock2, “ipc:///test2”) while(1) { json<-receive.string(sock1) dat <- fromJSON(json) res <- some_calculate(dat) send.string(sock2, toJSON(res)) } R Python import zmq import json context = zmq.Context() sock1 = context.socket(zmq.PUSH) sock1.connect(“ipc:///test1”) sock2 = context.socket(zmq.PULL) sock2.connect(“ipc:///test2”) sock1.send(json.dumps([1,2,[3]]) res=json.loads(sock2.recv()) JSONで やりとり (用途例) * WebサービスのバックエンドでRを動かして分析機能を実現 * バッチ集計の一部でデータマイニングのところをRで実行 * Rから、前処理の部分をPerlやPythonで行う * Rとscipyやscikit-learnを連携 * zeromqのfluent-plugin を使って、Rからfluentdでログデータを転送 (ちなみにJSONじゃなくてMsgPackで通信する方法があるか試したがうまくいかなかった) var zmq = require(‘zmq’) , sock1 = zmq.socket(‘push’) , sock2 = zmq.socket(‘pull’); sock1 = context.socket(zmq.PUSH); sock1.connect(“ipc:///test1”); sock2 = context.socket(zmq.PULL); sock2.connect(“ipc:///test2”); sock1.send(JSON.stringify([1,2,[3]])); sock2.on(‘message’, function(msg) { res = JSON.parse(msg); }); Node.js Perl Ruby 以下、なんでも
8.
【4】 AWSでスピードテストやってみた スタンドアロン (Rのプロセス1個) 一様乱数でx*x+y*y <
1 な割合でπ/4を求める → 4倍してπを得る よくあるやつ ○ 実験の設定 ・乱数の数N = 100000000 (1億) ・スタンドアロンのプログラムと、マスタスレーブ型の構成で速度を比較 ・8コア26ECUのAWS EC2 M3ダブルエクストララージインスタンスで検証 ・スレーブはN/10000(1万)単位のタスクを割り振る スレーブ (Rのプロセス) マスター (Rのプロセス) https://gist.github.com/chiral/5689735 実験に使ったソースコード 比較
9.
【4’】 AWSでスピードテストやってみた 実行結果 8CPUで6倍くらい速くなった!
10.
【5】 まとめ ZeroMQ(rzmq)を使えばマルチコアCPUをフルに活用できる! ZeroMQ(rzmq)を使えば複数台のPCでスケールアウトができる! さらに、ZeroMQ(rzmq)とJSONで他の言語とも連携ができる! 前処理は“P系“言語で、データ分析はRで、役割分担! Webサービスのバックエンドで簡単にRを使える! 数値や文字列だけでなく関数も送受信できる!
11.
じゃあ ZeroMQ(rzmq) いつ使うの? おわりに ヒント: 「今」