LSF (bsub): как указать одно задание "подведения итогов" для запуска после завершения всех остальных?
ОСНОВНАЯ ПРОБЛЕМА: Я хочу отправить N + 1 заданий в Linux-кластер, управляемый LSF, таким образом, чтобы (N + 1) -ое задание "подведения итогов" не запускалось до тех пор, пока все предыдущие N заданий не будут завершены.
ДОПОЛНИТЕЛЬНО: Если это возможно, было бы идеально, если бы я мог организовать все так, чтобы задание (N + 1) -го ("подведение итогов") получало в качестве первого аргумента значение 0 (скажем), если все предыдущие N заданий успешно завершено, а в противном случае значение отличается от 0.
Эта проблема (или, по крайней мере, часть, обозначенная "ОСНОВНАЯ ПРОБЛЕМА") значительно проще, чем у LSF bsub
Похоже, что он предназначен для обработки, поэтому мне трудно перебирать объемную документацию по bsub
выяснить самый простой способ сделать то, что я хочу сделать.
Что было бы самым простым
bsub
команды для достижения этой договоренности?
Чтобы быть более конкретным, что я должен заменить различные ???
слоты ниже, чтобы убедиться, что wrapup
выполняется только после того, как все foo
задания завершены (в идеале с аргументом, который отражает конечный статус foo
работы)?
bsub -q someq ??? foo 1
bsub -q someq ??? foo 2
bsub -q someq ??? foo 3
bsub -q someq ??? wrapup [???]
1 ответ
Чтобы расширить ответ Михаэля Клоссона, здесь вы ищете опцию -w bsub, которая позволяет вам отправлять задание, которое будет запланировано только при выполнении какого-либо условия зависимости.
Наиболее распространенные условия - это состояние выхода какой-либо другой работы, если вы называете каждую из ваших работ "foo $i" с -J:
bsub -q someq -J "job_1" foo 1
bsub -q someq -J "job_2" foo 2
bsub -q someq -J "job_3" foo 3
Затем вы можете отправить другую работу, которая зависит от статуса выхода этих работ, следующим образом:
bsub -q someq -w "done(job_1) && done(job_2) && done(job_3)" wrapup
Это заставляет LSF планировать "завершение" только в том случае, если задания с именами job_1, job_2 и job_3 завершаются со статусом DONE. Вы также можете использовать идентификаторы заданий вместо имен заданий или указать конкретный статус, для которого вы хотите проверить, с помощью таких выражений, как
done("job_1") // termination status is DONE
exit("job_1") // termination status is EXIT
ended("job_1") // termination status is EXIT or DONE
И объедините их с логическими операторами &&, ||,!