LスクリプトでNコマンドをバッチ処理するツール(N≫L用)?

LスクリプトでNコマンドをバッチ処理するツール(N≫L用)?

スケジューラ(LSF、Slurmなど)を搭載した高性能Linuxクラスタにアクセスできると仮定すると、中サイズジョブはいつでも実行中または一時停止され、ほとんどの場合エル < 中サイズ同時に実行できます。

今私が走りたいと仮定しましょう。窒素できるだけ早く独立して注文を発行してください。

もし窒素 ≤ 中サイズ、各コマンドを別々のジョブとしてスケジューラに送信してから完了できます。

しかし、もし窒素 > 中サイズ?または窒素 ≫ 中サイズでも?


これ窒素 ≫ 中サイズシーンが発生する極度に私の仕事ではこれが頻繁に起こります。実際、これを便利に処理できるツールを探すのも無理ではありません

スケジューラによって課される制限を解決する非常に一般的で簡単な方法は分割することです。窒素独立したコマンド入力エル別のワンタイム「バッチ」スクリプトを作成し、以下のように後者をスケジューラに送信します。エル一人で働く2

もちろん、これらのワンタイムバッチスクリプトを作成するのは面倒でやや面倒ですが、シェルの使用やPython、Perlなどのスクリプト言語の使用に精通している人なら、自宅でも簡単に処理できます。自動化を達成するために独自のトリックを紹介します。

しかし、私の質問は、プログラミング技術が不足している人も、生成されたタスクを自動化するために使用できる公的(そして無料)で利用可能なツールがUnixエコシステムにあるかどうかということです。エル入力リストとして提供されるこのようなバッチスクリプト窒素独立コマンド?


1実際、このようなことが頻繁に発生するため、スケジューラがまだそれに対する基本的なサポートを持っていないことに驚きました。私が知っている限り、少なくとも私が最もよく知っているスケジューラ(SlurmとLSF)にはそのようなサポートはありません。欠けている部分があれば修正してください。

2より一般的には、次のようにすることができます。窒素コマンド入力Kバッチスクリプト、ちょうどK ≤ 中サイズしかし、私の経験によると、以下を選択してください。K = エルこれらの制約内で最大または最大に近いスループットを達成する最も簡単な方法です。その理由はわかりにくくありませんが、この問題を完全に議論するには、私がここでできるよりも多くの時間が必要になります。

ベストアンサー1

L=10000
M=100000
N=10000000

jobs=$(wc -l < all_jobs.txt)
jobs_per_jobslot=$(( jobs/L + 1))

cat all_jobs.txt | parallel --pipe -N$jobs_per_jobslot 'cat > jobs_{#}'
# submit jobs_*

20分間1章と2章を読んでください。https://doi.org/10.5281/zenodo.1146014あなたのコマンドラインはあなたを愛するでしょう。

おすすめ記事