Wizard In The Market
システムトレードの魔術師

*

Python の超お手軽のネットワーク分散コンピューティングライブラリSCOOP

公開日: : 最終更新日:2017/02/13 Python , ,

logo

SCOOPとは

  • ssh とPython の設定を適切にするだけで、簡単にネットワーク間での分散処理が実行できる。
    • ネットワーク分散に対応していないライブラリに便利。
    • 関数の処理を分散して行い、返り値をまとめて返してくれる。
  • Core 数に応じた Worker 数の設定が可能
  • Docker との相性が抜群

基本動作

python 標準の map 関数の使い方で ssh で繋いだ先(ノード)でも分散処理してくれる。multiprocessing.Pool.map のネットワーク処理に対応した版。

map 関数に配列を渡すと配列の各要素を引数に関数を実行する。その際の各処理を各ノードでマルチプロセスで実行して、ホストPCに変数を返す。

通信には pickle 化された情報を送信している。

ssh で接続先の通信用ポートを開けて、ポートの情報をホストに送って通信。--tunnelオプションを使えば、localhost 上に port fowarding する。この際のホストIPの解決には、ssh 上の host name が使われる。

サンプルコード

scoop.futures.map という関数で並列したい関数と、並列したい引数を配列で渡す。

実行スクリプト

実行結果

last_value: の出力で、16個の pid 上で処理されているのが確認できる。

使い方

説明はウェブサイト上にもあるが、動かないサンプルコードも多くはまるので注意。

1. 分散処理をしたいPCでPythonの実行環境を揃える。

標準ではホストPC での Python の実行環境が接続先に渡されて分散処理されることになる。そのため、pyenv 等で /home/user ディレクトリ下に実行環境があると user 名が一致しないためちゃんと動かない。/usr/local/bin/python に統一しておく等の処置が必要になる。

処理に必要なファイル等があれば、それも同一のパスとして各ノードに配置。

Docker との相性が良いのもこのあたり。Docker であれば、容易に同一環境を構築できる。

2. ssh サーバーの設定

パスワードなしの認証キー認証にする。パスワードありには対応していない。

3. ホストPCと各ノードでの ssh config の設定

ssh config での host name が ノードの PC の名前かIPでないと、エラーが出る。このあたりの説明がまったくなくて、ソースコードを追っかけるはめになった。

Docker上で実行したければ、--tunnel オプションをつければ大丈夫。--tunnelオプションを付けていれば、host name の問題は気にしなくていい。--tunnel オプションに関する説明もドキュメントにはないので注意。

4. 実行時

  • --host ssh config 上での host name
  • -n 合計のワーカー数
  • --tunnel ssh tunnel を使う

他にもホストごとにワーカー数を設定したりできるが、そのあたりは公式ドキュメントを参照してください。

導入の上での注意

  • python の実行環境をすべて一致させておく必要がある。
    • ここでの実行環境とは、フルパスでの実行パス。
    • 各ライブラリ、実行ファイルともに同一パスに保存していること。
    • Docker を使おう。
  • 読み込むファイル等があれば、そのファイルはすべてのノード上に置く
  • 使用するポートは予め開けておくか、--tunnel オプションを使う。
  • ssh の設定名とホストPC の名前を一致、もしくはIPアドレスにしておく。
    • 一致しない場合は --external-hostname オプションを使うが、一致させた専用のconfigファイルを作って置くほうが良い
    • IP の取得を PC の名前から取得しようとする。ローカルネットワーク内のみ、この方法が使える。
    • /etc/host を編集して、ssh config の host name に IP を割り当ててもいけるはず。

雑感

分散処理したいメソッド内でshell command を叩いて、返り値を得たり等をすれば、Python 以外の言語の並列化にも使える。システムトレードのバックテストの並列化にはおすすめ。

にほんブログ村 為替ブログへ 
Fx-Kirin

About Fx-Kirin

2009年10月にFXを開始、翌年2010年5月から脱サラをしてFX業界に専念。 2012年10月頃から本格的に勝ち始め、一月で資産を倍にする、2年半月間負けなし等、安定した収支で2013年11月に生涯FX収支が1億を超える。 投資スタイルはシステムトレード。プログラミングの知識がほぼない状態から、独学で自分がしたいと思うことであればほぼ実現することが可能なレベルまで成長。好きな言語はRuby, Python。必要となればC++からVBA、Pascal等なんでも行う。MT4/MT5のプログラミングも得意。 2011年にはFXで稼いだ資金をもとにシンガポールに移住し、留学も兼ねて起業をチャレンジするほど、ビジネスを興すことに熱意がある。国内の業者を主に使い始めたことから、2012年に帰国。零細株式会社経営中。

Adsense

  • このエントリーをはてなブックマークに追加
  • Pocket
  • 67 follow us in feedly

関連記事

Quantopian の pyfolio を単利運用に対応させる。

pyfolio は どんなデータを入れても複利運用として計算してしまうので、人によっては望まない検証方法だったりし

記事を読む

PYPIへの登録を10秒でできるようになる方法

pip 使ってますよね Pythonを使っている人であれば、pip installでライブラリをインストールするこ

記事を読む

CPP extension vs Cython vs CPython on calculating the mean of numpy array

I'd like to get any feedback to make cython faster like

記事を読む

joblib によって謎のバグが起こる

joblib 0.14.1 にて確認.0.13.2 だと起こらない.import joblib を消すと正常に動く.

記事を読む

Pythonで簡単に画像検出でLinux GUI操作自動化ライブラリを作ったよ

[2015/02/07 追記] [bm url="http://fx-kirin.com/python

記事を読む

Python2 から Python3 へのC Extension の移行

最初に追加 モジュールの初期化と状態情報を書き換える initmyextension 関数などの初期状態の関

記事を読む

Flast-Sockets + redis-py で簡単 Websocket サーバー実装

参考にしたサイト Using WebSockets on Heroku with Python | Heroku

記事を読む

Python での Log 収集

プロジェクトが大きくなるにつれて、プログラムの不備を見つけるのにログの構成、ログデザインを考えることが重要になってく

記事を読む

swig で foofunction is private と怒られた時。

例えばのエラーとしてはこれ。 問題は、公開する予定のクラスのpublicインスタンス変数にprivateにしなけれ

記事を読む

Derivatives analytics with Python の学習ノート 1,2章

洋書を読んでいると、いつも読んだ気になってちゃんと理解出来てるか自信がないことが多いので、チャプターごとに要点をまとめ

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Adsense

joblib によって謎のバグが起こる

joblib 0.14.1 にて確認.0.13.2 だと起こらない.import joblib を消

Fixing kernel error AMD-Vi: Event logged IO_PAGE_FAULT on Ryzen Machine

My pc was periodically shut down on 7:40 am JS

Ubuntu で仮想ディスプレイを使う

雑多な備忘録ですが、せっかくなので残しておきます。 Ubuntu 18.04 の resolv.c

PYPIへの登録を10秒でできるようになる方法

pip 使ってますよね Pythonを使っている人であれば、pip installでライブラリ

The art of debugging with GDB, DDD, and Eclipse の読書メモ

GDBの勉強がしたくて、下の本を原著で読んでみました。10年前の本だけど全然現役でした。

→もっと見る

PAGE TOP ↑