-
Notifications
You must be signed in to change notification settings - Fork 0
Pwrakeとは
並列・分散実行が可能なRakeです。従来の非並列プログラムを多数の計算機を用いて並列に実行することにより、Hadoopのような大規模データ処理をお手軽に実現できます。
- Rakefileに記述されたワークフローを並列に実行する。
- Rakefileの仕様は、Rakeと全く同じ。
- 依存関係がないタスクを自動で並列に実行。
- Rakeの並列タスク定義である
multitask
は不要。
- 複数の計算ノードからなる計算機クラスタを用いて、並列分散実行が可能。
- 分散実行に必要なクラスタの設定は、SSHでログインできること、および、NFS,Gfarm等でディレクトリが共有されていること。
- Pwrakeが起動時に自動でリモートホストにSSHで接続する。デーモンの起動は不要。
- オプションにより、リモートホスト名、並列数を指定。
-
Gfarmファイルシステムによる、計算ノードのストレージを活用した高性能な並列I/O
- 計算ノードのストレージへの並列アクセスにより、I/O性能がスケーラブルに向上する。
- 出力ファイルの格納先は、Gfarmのスケジューリング機能により、ローカルストレージが選択される。
- Pwrakeのスケジューリング機能により、タスクを実行する計算ノードとして、入力ファイルが保存されているノードを選択する。
- その他、Gfarmファイルシステムの自動マウント機能など。
RubyGems によるインストール:
$ gem install pwrake
または、ソースコード(tgz/zip)をダウンロードし、サブディレクトリに移って次のコマンドを実行 (この場合、Parallel を手動でインストールする必要があります):
$ ruby setup.rb
rbenvを使っている場合などは、インストール後、pwrakeコマンドを検索パスに反映させる必要があります。
$ rbenv rehash
$ pwrake -j 4
$ pwrake -j
- 実行ホスト間で、Rakefileのあるディレクトリを、NFSやGfarmのような分散ファイルシステムで共有する。
- 次のいずれかの方法で、実行ホストにSSHでパスフレーズなしでログインできるようにする。
-
ssh-keygen
でパスフレーズを入力せずに作成した鍵を登録する -
ssh-add
でエージェントにパスフレーズを登録する
-
実行ホスト名と使用コア数を、ホストファイルに記述する:
$ cat hosts host1 2 host2 2
-
オプション
--hostfile
か-F
でホストファイルを指定して、pwrake
を実行:$ pwrake --hostfile=hosts
-F, --hostfile FILE [Pw] Read hostnames from FILE
-j, --jobs [N] [Pw] Number of threads at localhost (default: # of processors)
-L, --log, --log-dir [DIRECTORY] [Pw] Write log to DIRECTORY
--ssh-opt, --ssh-option OPTION
[Pw] Option passed to SSH
--filesystem FILESYSTEM [Pw] Specify FILESYSTEM (nfs|gfarm)
--gfarm [Pw] FILESYSTEM=gfarm
-A, --disable-affinity [Pw] Turn OFF affinity (AFFINITY=off)
-S, --disable-steal [Pw] Turn OFF task steal
-d, --debug [Pw] Output Debug messages
--pwrake-conf [FILE] [Pw] Pwrake configuation file in YAML
--show-conf, --show-config [Pw] Show Pwrake configuration options
--report LOGDIR [Pw] Report workflow statistics from LOGDIR to HTML and exit.
--clear-gfarm2fs [Pw] Clear gfarm2fs mountpoints left after failure.
-
pwrake_conf.yaml
: このファイルが当該ディレクトリに存在すれば、これを読んでオプションを設定する。 これによりPwrakeオプションをコマンドラインに記述する手間を省くことができる。 -
Example (in YAML form):
HOSTFILE: hosts LOG_DIR: true DISABLE_AFFINITY: true DISABLE_STEAL: true FAILED_TARGET: delete PASS_ENV : - ENV1 - ENV2
-
pwrake_conf.yaml オプション一覧:
HOSTFILE, HOSTS nil(default, localhost)|filename LOG_DIR, LOG nil(default, No log output)|true(dirname="Pwrake%Y%m%d-%H%M%S")|dirname LOG_FILE default="pwrake.log" TASK_CSV_FILE default="task.csv" COMMAND_CSV_FILE default="command.csv" GC_LOG_FILE default="gc.log" WORK_DIR default=$PWD FILESYSTEM default(autodetect)|gfarm SSH_OPTION SSH option SHELL_COMMAND default=$SHELL SHELL_RC Run-Command when shell starts PASS_ENV (Array) Environment variables passed to SSH HEARTBEAT defulat=240 - Hearbeat interval in seconds FAILED_TARGET rename(default)|delete|leave - Treatment of failed target files FAILURE_TERMINATION wait(default)|kill|continue - Behavior of other tasks when a task is failed QUEUE_PRIORITY LIHR(default)|FIFO|LIFO|RANK NOACTION_QUEUE_PRIORITY FIFO(default)|LIFO|RAND SHELL_START_INTERVAL default=0.012 (sec) GRAPH_PARTITION false(default)|true
-
Gfarmオプション:
DISABLE_AFFINITY default=false DISABLE_STEAL default=false GFARM_BASEDIR default="/tmp" GFARM_PREFIX default="pwrake_$USER" GFARM_SUBDIR default='/' MAX_GFWHERE_WORKER default=8 GFARM2FS_OPTION default="" GFARM2FS_DEBUG default=false GFARM2FS_DEBUG_WAIT default=1
- Taskプロパティは、Taskごとに指定するオプションである。
記述箇所は、Rakefileの中で、タスク定義の直前の
desc
の文字列中である。
Rakefileの例:
desc "ncore=4 allow=ourhost*" # Rakeではdescをruleに指定できないが、Pwrakeではタスクプロパティの指定が可能。
rule ".o" => ".c" do
sh "..."
end
(1..n).each do |i|
desc "ncore=2 steal=no" # 直後のタスクにのみ作用するため、ループの中に書く。
file "task#{i}" do
sh "..."
end
end
オプション一覧 (一番左がデフォルト):
ncore=integer - タスクが使用するコア数
exclusive=no|yes - ノード内で排他的にタスクを実行
allow=hostname - 実行を許可するホスト名 (ワイルドカード使用可)
deny=hostname - 実行を拒否するホスト名 (ワイルドカード使用可)
order=deny,allow|allow,deny - 評価の順序
steal=yes|no - タスクスチール(入力ファイルが存在するホスト以外での実行)を許可
-
Gfarmを使用する場合、Pwrakeに含まれる
gfwhere-pipe
というコマンドを起動する。 このスクリプトは、Ruby/FFI (https://github.com/ffi/ffi) を用いるため、 下記のように Ruby/FFI のインストールしておく:gem install ffi
-
Pwrakeではグラフ分割スケジューリングのため METIS (http://www.cs.umn.edu/~metis/) を用いる。 グラフ分割スケジューリングを行う場合、METIS 5.1.0 のソースを取得し、コンパイルおよびインストールする(CMakeが必要)。
-
さらに RbMetis (https://github.com/masa16/rbmetis) を下記のようにインストールする。
gem install rbmetis -- \ --with-metis-include=/usr/local/include \ --with-metis-lib=/usr/local/lib
- Ruby 2.2.2
- Rake 10.4.2
- CentOS 6.7
このソフトウェアは、以下の支援を受けて開発されました。
- JST CREST: 研究領域「ポストペタスケール高性能計算に資するシステムソフトウェア技術の創出」における研究課題「ポストペタスケールデータインテンシブサイエンスのためのシステムソフトウェア」
- 文部科学省の科学技術試験研究委託事業による委託業務: 次世代IT基盤構築のための研究開発「e-サイエンス実現のためのシステム統合・連携ソフトウェアの研究開発(RENKEI)」