1

使ってきました

qsub -t 1-90000 do_stuff.sh

タスクを Sun GridEngine クラスターにサブミットしようとしましたが、あまり便利な名前が付いていないデータ セット (超大規模なものも) を使用していることに気付きました。これについて最善の方法は何ですか?それらすべての名前を変更しようとすることもできますが、名前には保持する必要がある情報が含まれており、明らかに多くの問題が発生します。すべてをjsonに前処理することもできますが、qsub -all_contents_of_directoryだけにする方法があれば、それが理想的です。

私はSOLですか?問題のディレクトリに移動して、. -exec 'qsub setupscript.sh {}'?

4

4 に答える 4

1

私はこのようなものを自動化するためにMakefilesを使用する傾向があります:

INPUTFILES=$(wildcard *.in)
OUTPUTFILES=$(patsubst %.in,%.out,$(INPUTFILES))

all : $(OUTPUTFILES)

%.out : %.in
        @echo "mycommand here < $< > $@" | qsub 

次に「make」と入力すると、すべてのファイルがqsubに送信されます。もちろん、これによりすべてが一度に送信され、コンピューティングクラスターとシステム管理者の血圧に不幸なことが起こる可能性があります。

「|qsub」を削除すると、makeの出力は実行するコマンドのリストになります。そのリストを1つ以上のqsubコマンドにフィードすると、効率が向上し、qsubジョブが減少します。私はそのためにGNUパラレルを使用してきましたが、ジョブが完了するまでブロックするqsubが必要です。私はそれを行うラッパーを作成しましたが、qstatを頻繁に呼び出します。これは、システムに多くのヒットを与えることを意味します。どうにかして変更する必要がありますが、ここには計算上「適切な」オプションは多くありません。

于 2012-02-15T23:35:27.387 に答える
1

別のスクリプトを使用してジョブを送信します。これは、ジョブ名にディレクトリ名が必要な場合に使用した例です。「run_openfoam」は、特定のディレクトリにある pbs スクリプトです。

#!/bin/bash
cd $1
qsub -N $1 run_openfoam

このスクリプトをジョブに合わせて調整し、コマンド ラインでループを実行できます。したがって、ジョブ配列を送信するのではなく、このスクリプトの最初のパラメーターとして渡されたディレクトリ名ごとにジョブを送信します。

于 2012-02-05T01:05:37.467 に答える
0

find . -print >~/list_of_datasets スクリプト内のデータセットのリストを含むファイルを作成します 。

#!/bin/bash
exec ~/setupscript.sh $(sed -n -e "${SGE_TASK_ID}p" <~/list_of_datasets)

qsub -t 1-$(wc -l ~/list_of_datasets) job_script

于 2015-07-19T13:49:11.123 に答える
0

qsub コマンドの「-t 1-90000」が理解できません。私のqsubマニュアルの検索では、そのような「-t」オプションは表示されません。

于 2011-11-11T04:18:14.897 に答える