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

И объедините их с логическими операторами &&, ||,!

Другие вопросы по тегам