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

関連記事

Python Mock で オリジナルのインスタンメソッドのを呼びたい時

autospec と sideeffect を組み合わせるのが解決策だった。

記事を読む

話題のクローラー・スクレイピング!PythonならScrapyが超優秀な件

Rubyの読書会に行ったら、Pythonの面白いお話を聞けたというお話です。 Rubyクローラー本の読書会に参

記事を読む

重回帰分析による米雇用統計の予測モデルを作成してみる

この記事はPython その2 Advent Calendar 2015 の17日目の記事です。 1 はじめに

記事を読む

Pythonで簡単自動化!PyAutoGuiが便利すぎて感動したのでご紹介

以前こんな記事を書いていたのですが、これがまったく不要になるとても便利なPython Libraryがあった

記事を読む

Python x64 & MinGW64 環境の構築

流石に詰まりまくったのでまとめることにする。 MSYS2 をインストール 個人的にこれからメインで使いたいと思っ

記事を読む

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

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

記事を読む

ipdb だけではなく IPython.embed も使おう

ipdb だと複数行の挿入ができなかったりするが、その問題が解消される。明らかにこちらのほうが使い勝手がいい。行のデ

記事を読む

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

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

記事を読む

Python Pandas からお手軽に highcharts が使える kanichart 作りました。

Kanichart fx-kirin/kanichart: Easy(簡易) plotting library.

記事を読む

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

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

記事を読む

Message

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

Adsense

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

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

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

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

JupyterでボタンからJavascriptを実行して追加のアウトプットをさせない方法

Javascriptを実行するとアウトプットセルの行が増える これがとても面倒だった。上の

まだBokehで消耗してるの?これからはPandas-Bokehを使おうぜ

タイトルはあまり気にしないでください。全然、Bokehで消耗する価値があるとは思っています。ただ

SQLAlchemy のマイグレーションライブラリ Alembic を使ってみる。

SQLAlchemyの作者が作ったデータベースマイグレーションツール。個人的には、SQLAlch

→もっと見る

PAGE TOP ↑