私のリソース(GPUなど)は一度に1回しか使用できません。実験を実行するときにバッチファイルが作成されたとき、今後どのような実験を実行するかを常に知っておく必要があります。しかし、私は心を変えるのが好きですが、やめるのは嫌いな人です。
1台のコンピュータでのみ実行され、ジョブをキューに渡し、必要に応じて削除できるSlurmのようなものはありますか?
私はGPUロード(CPUロードで動作するバッチ/ atと比較)で動作し、タスクを順番に実行できるアプリケーションを探しています。これは、一度に1つのリソース(GPU)で1つのジョブしか実行できず、前のジョブの実行が完了した後に次のジョブが開始されることを意味します。また、ジョブに高い優先順位を付与または削除するためにキューを管理したいと思います。
答え1
私の要件に完全に合うソリューションを見つけました。私が経験している問題は、GPUが1つだけですが、ジョブを追加し、ジョブの状態を確認し、必要に応じてキューから削除するキューを望むことです。
Google 調査を行った後に発見しました。ジョブスプーラ(tsp)。このコマンドラインツールを使用すると、キューにジョブを追加して結果を追跡するのが非常に簡単です。これまでキューを1つだけ使用していましたが、さらに拡張できます。
答え2
あなたがコンピュータの唯一のユーザーである場合、hyper-shell
(https://hyper-shell.readthedocs.io)には必要な機能があります。hyper-shell cluster
ログインとして実行するか、バックグラウンドでそのままにして、PostgreSQLをバックエンドデータベースとして使用できます。これは、単一のシステム(特に単一のリソース - 一度に1つのタスク)のSLURMを簡単に置き換えることができるクロスプラットフォームです。
たとえば、を使用して一度に1つのジョブを送信できますsbatch
。hyper-shell task submit
squeue
hyper-shell task search --remaining
設定、ロギングなどのさまざまなオプションがあります。ただし、スケジューリングサービスの基本的な起動は次のようになります。
hyper-shell cluster -N1 --forever --max-retries=2 --capture
免責事項:私はの著者ですhyper-shell
。
答え3
独自の単純なキュー・マネージャーを介してジョブを実行することは許可されますか?
#!/bin/bash
while ! mkdir /tmp/my_gpu_lockdir; do
sleep $((RANDOM))
done
trap 'rmdir /tmp/my_gnu_lockdir' ERR EXIT
.... your actual task here ...