toilを使ってジョブスケジューラになげるときについて
jobStore
の指定をしないと、エラーになる。
writeLogs
を指定すると、かくノードでの結果的なものが出力されるので、デバッグしやすい。ただしwriteLogsで指定するディレクトリは予め作っておく必要があるだろう。
outdir
で指定したところに、出力ファイルがあるときは、上書きがされないようなので、古いままのデータになっていることがある。なので、その部分の確認は必要。
cwltoolでうまく動き、toil-cwl-runnerのローカルで動いて、
さてジョブスケジューラでなげようとして
--batchSystem Slurm
を、つけたら動かないというようなケースでは、jobStore
を忘れていないかチェックする。
うまく動くと、jobStoreは消えるのがデフォルトのため、実行後は見つからないと思われる。
また、同じjobStoreを共有することはできないので、同じものを指定してもエラーになることだろう。
ただし1度実行した後、何個か失敗したときなどは、--restart
をつける。このときは、最初に実行したときに指定した、jobStore
を指定する必要がある。このjobStore
にどこまで実行したかの情報あり。
あと、ジョブスケジューラを使うときに、ノードごとにログが/tmpに出力されると、確認が大変なので、そのそきは、writeLogs
を使ってディレクトリをつくっておくとよさそうである。
投げ先で出たエラーがまとまってでてくるので、デバッグに役立つ。
また、ファイル名から、どのパラメータのとき、また、Workflowであれば、どのステップのときに発生したエラーなのかが特定しやすい
シェルスクリプトを実行するcwlファイル
cwlVersion: v1.2
class: CommandLineTool
baseCommand: /bin/bash
#arguments:
# - valueFrom: $(inputs.sleep_seconds)
inputs:
sleep_seconds:
type: int
inputBinding:
position: 2
exec_script:
type: File
default:
class: File
location: ./sleepcwl.sh
inputBinding:
position: 1
outputs:
output:
type: stdout
cwlで実行するシェルスクリプト
確認したいことをスクリプト内に書く。
配置は同じディレクトリにする
(venv) [manabu@at044 20230511-cwltool-behavior-check]$ cat sleepcwl.sh
#!/bin/bash
SLEEPTIME=$1
date
hostname
echo "[Start sleep ${SLEEPTIME}]"
/usr/bin/sleep ${SLEEPTIME}
echo "[End sleep ${SLEEPTIME}]"
date
1つ目のジョブ
TOIL_CHECK_ENV
は、venv作った環境内の toil-cwl-runner
を実行するときに必要。
TOIL_CHECK_ENV=true toil-cwl-runner --logFile log1.txt \
--disableCaching --batchSystem grid_engine --debugWorker \
--logDebug --writeLogs $PWD/w1 --jobStore my_jobStore1 \
--workDir `pwd` --outdir `pwd`/outdir1 sleepsh.cwl
2つ目のジョブ
TOIL_CHECK_ENV=true toil-cwl-runner --logFile log2.txt \
--disableCaching --batchSystem grid_engine --debugWorker \
--logDebug --writeLogs $PWD/w2 --jobStore my_jobStore2 \
--workDir `pwd` --outdir `pwd`/outdir2 sleepsh.cwl
実行中のログについて
--logDebug
をつけて実行すると(ついてなくてもよいかは今後確認)
投げたあと、以下のようなログがでてくる。
このなかで、どの程度進行しているかをみるには、toil.leader
でgrepしてあげるとよい。
また、このtoil.leader
のログは、以下をみると1時間に1度だが、パラメータで調整可能なようである。
このログは標準出力にでるものか、logFileにでるものかは今後確認する
[2023-05-26T19:30:21+0900] [MainThread] [I] [toil.leader] 64 jobs are running, 1936 jobs are issued and waiting to run
[2023-05-27T06:30:35+0900] [MainThread] [I] [toil.leader] 14 jobs are running, 629 jobs are issued and waiting to run
[2023-05-27T07:30:36+0900] [MainThread] [I] [toil.leader] 64 jobs are running, 421 jobs are issued and waiting to run
[2023-05-27T08:30:37+0900] [MainThread] [I] [toil.leader] 64 jobs are running, 338 jobs are issued and waiting to run
[2023-05-27T09:30:37+0900] [MainThread] [I] [toil.leader] 64 jobs are running, 229 jobs are issued and waiting to run
[2023-05-27T10:30:38+0900] [MainThread] [I] [toil.leader] 64 jobs are running, 116 jobs are issued and waiting to run
以下のような種類がある
- toil.leader
- toil.worker
- toil.job
- toil
- cwltool
共有ファイルシステムなどのファイルをtailするとき
共有ファイルシステム上のファイルをtailするときは、ただしく、データがとれているかを確認することが必要な時がある。
特に、排他制御は他でやっていて、単独でみるようなファイルだと気づかないことがあるが
期待と違う結果になることがある。
例えば行が途中できれるとか、途中からはじまるなど。
このようなときは、期待する行かどうかをチェックするということがあってもよいかもしれない。
行の先頭や末尾に出てくる単語がわかっていて、それが他の部分にはでてこなさそうなときは、フォーマットがそろっているもののみtailとして正しく取得できたなど。
accountingをtailしているときとか。
cwltoolを使ってデバッグするとき
ディレクトリ
toilでジョブスケジューラになげるとエラーになるから、cwltoolで試してみようというときのTIPS
カレントディレクトリに大量のファイルがあると起動までに時間がかかる
どうも、ディレクトリの中も関係があるようなので、そういうときは、空のディレクトリを作ってそこから実行してみるとよいときもある。
取りたい項目
メモリの使用量がとれるならとったほうがよいだろう。
Discussion