Human Genome Center(HGC)スパコンおよびその基となるUniva Grid
Engine(UGE)のコマンドをRから実行するRパッケージです(非公式).
{tidyverse}パッケージをベースにしており,
結果をtibble形式で得ることができます. また,
watch
関数を使えばqsub
およびqrecall
したジョブを監視し,
予期しないエラーが出た場合はqsub
ないしqrecall
し直すことができます.
{drake}パッケージをインストールすることでHuman Genome
Center(HGC)スパコンでのパイプライン構築に使うことができます.
インストールには, 次のコマンドを実行してください.
if (!requireNamespace("devtools", quietly = TRUE)) install.packages("devtools")
devtools::install_github("drres/jobwatcher")
library(jobwatcher)
現在, qsub
, qrecall
, qreport
, qacct
,
qstat
関数をサポートしています. 実行環境がHuman Genome
Center(HGC)スパコンまたはUniva Grid
Engine(UGE)かどうかを内部で判定しており, 環境によって挙動が異なります.
qsub
およびqrecall
関数はUGE環境でなくとも使うことができます.
その場合, qsub
は指定したファイルをsystem
関数を用いてshで実行します.
(もし一行目冒頭に#!が記述されている実行可能ファイルであった場合はbashを介さず直接実行します.)
また, qrecall
はHGC環境以外ではアクティブな変更を何も加えません.
functions | HGC | UGE | Other |
---|---|---|---|
qsub | qsub | qsub | send commands to terminal |
qrecall | qrecall | (no effect) | (no effect) |
qreport | qreport | (error) | (error) |
qacct | qreport -c | qacct | (error) |
qstat | qstat | qstat | (error) |
現在の実行環境がどのように判定されたかを確認するには,
これらの関数を1度でも実行した後にoptions(jobwatcher.mode)
を実行してください.
watch
関数はqsub
およびqrecall
したジョブを監視し,
予期しないエラーが出た場合は指定したファイルをqsub
ないしqrecall
し直す関数です.
監視にはqreport
コマンドを利用しているため,
ジョブの結果を取得するまでに実際のジョブの終了から数分程度の遅れが生じる可能性があります.
現在はHGC環境でのみ動作します.
また, qsub
およびqrecall
関数にはwatch引数をとることができ,
TRUEにすることでwatch
関数を明示的に使わずともqsub
ないしqrecall
したジョブを監視することができます.
qsub
関数をUGE環境でなく使用した場合,
watch = TRUE
の指定はsystem
関数でwait = TRUE
とすることに相当します.
make_qsubfile
を使用することで,
qsub用に適したリソースの指定を手軽に行えるようになります.
(SHIROKANE5への移行により,#$ -l os7
などのOS指定が追加で必要になる場合が出てきました.
残念ながら専用の引数を用意していないため,
other_req = "#$ -l os7"
またはfirst_line = paste(binbash(), "\n#$ -l os7")
などのように指定してください.)
また,
write_qsubfile
を使用すればスクリプトファイルのパスに書き込み時刻を含めることができます.
パイプライン中でよく似たファイルを自動で複製作成する場合などに,
それぞれのファイル名を(ほぼ)一意にすることに使えます.
qrecall用には, write_and_qrecall
関数があります.
qrecallの対象ファイル群を引数にとり,
ファイルに保存した上でqrecallにかけてくれる関数です.
qsub_function
関数はqsub
を行う関数を作成する関数です.
作成された関数を実行することでパイプラインの各qsub
操作を行うことができます.
パイプライン作成部分は{drake}パッケージベースです.
{drake}パッケージの日本語での説明はこちらの匿名技術者集団の解説がわかりやすいです.
{drake}パッケージはパイプラインを関数ベースで記述するため,
qsub_function
を使ってパイプラインを構築していきます.
簡単な構築例はbuild_pipeline
関数で得ることができます.
適宜編集してお使いください.
build_pipeline("your_pipeline_name", "your_pipeline_path", force = TRUE)
#> <U+2714> Directory 'your_pipeline_path' has been created.
#>
#> <U+2714> Directory 'your_pipeline_path/log' has been created.
#>
#> <U+2714> Directory 'your_pipeline_path/script' has been created.
#>
#> <U+2714> Directory 'your_pipeline_path/config' has been created.
#>
#> <U+2714> File 'your_pipeline_path/your_pipeline_name.sh' has been written.
#>
#> <U+2714> File 'your_pipeline_path/your_pipeline_name.R' has been written.
#>
#> ● Please edit 'your_pipeline_path/your_pipeline_name.R' for your own pipeline.
#>
#> ● Then, run qsub("your_pipeline_path/your_pipeline_name.sh")
#>
qsub_function
で作成される関数は動作に影響を与えないダミー変数を引数にとります.
ここにパイプラインの他の操作を記入することで,
{drake}の機能のおかげで記入された操作がすべて完了してからその操作が実行されるようになります.
上述の通りqsub
およびqrecall
関数はUGE環境でなくとも使うことができるため,
#$
によるリソースの指定はできませんが,
デスクトップ環境でも構築したパイプラインを動かすことができます.
パイプラインをデスクトップ環境で構築・テストし,
UGE環境にpushするといった使い方が可能です.
- UGE環境ではqsubファイルをラップした実行ファイルを作成するよう修正
- UGE環境ではexit codeをSGE_TASK_IDごとに作成したファイルに書き出すよう修正
qstat
関数を修正- HGC環境以外でのサポートを向上
qsub
のwatch引数のデフォルトをTRUEに変更
- 関数名をラップ元の関数名と一致させた
qacct
,qstat
関数を追加- HGC環境以外でも動作するように変更
- 仮引数が引数で指定可能な値の一覧となるよう仮引数を変更
- パッケージ公開