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
  • 64 follow us in feedly

関連記事

PythonのThreadを待機させるか、必要の度に作成するのかのベンチマーク比較

QueueとThreadのベンチマーク比較 2つのケースについて比較検証してみました。 実際に処理する内

記事を読む

vim-slime を使って VIM の内容をコンソールに送信

この記事はVim Advent Calendar 2016の20日目の記事です。 選択行の内容をコンソールに送信

記事を読む

Python での Log 収集

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

記事を読む

Pythonのsocketでプロセス間通信をして価格データ等を送信する

どうも、お久しぶりです。キリンです。 取り敢えず1ヶ月ほど、連続でブログの更新を続けてみたのですが、そ

記事を読む

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

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

記事を読む

no image

stop automatically closeing vim-ipython output with jedi-vim

Even though I commented out the following code in vim_ipytho

記事を読む

Python2 から Python3 へのC Extension の移行

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

記事を読む

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

記事を読む

no image

JAVA の SHA1 Digestの作り方

>>> import base64 >>> import hashlib >>> base64.b64encode(

記事を読む

まだ Python の datetime で消耗しているの? maya 使おうぜ

この記事は Python Advent Calendar 2016 の 24日目の記事です。 当初は SCOOP

記事を読む

Message

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

Adsense

no image
Python 2, Python 3 で string を bytes に変換する。

共通の処理系にしておきたかったので、メモ書き。 [bm url="https://python

no image
ctypes で c_char array を c_char_p に変換する

なかなか情報がなかったのでメモ書き。

Windowsユーザ御用達の uci.edu から直接python wheelをインストールしてくれるライブラリ pipwin

あんまり情報が出てこないのでメモ書き。 https://twitter.com/fx_kiri

Python2 から Python3 へのC Extension の移行

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

Interactive Brokers 証券の Python API を利用する

Interactive Brokers 証券とは 日本には珍しく自動売買プラットフォームが提供され

→もっと見る

PAGE TOP ↑