Трудно сказать наверняка, основываясь на вашем описании, но я предполагаю, что то, что вы видите, является эффектом, вызванным природой цикла планирования LSF. Вот выдержка из документации LSF о строке заказа:
http://www-01.ibm.com/support/knowledgecenter/SSETD4_9.1.3/lsf_admin/order_string.dita
Предположим, что узел h1 существует в кластере и имеет 110 единиц расходуемого ресурса «res», а узел h2 имеет 20 единиц этого ресурса (например, «res» может быть новым пакетом встроенных слотов ресурсов). Предположим, что эти два задания находятся в ожидании и рассматриваются планировщиком в одном и том же цикле планирования, и задание1 будет запланировано первым:
Job1: bsub -R "maxmem>1000" -R "order[res] rusage[res=100]" -q q1 sleep 10000
Job2: bsub -R «mem‹1000» -R «order[res] rusage[res=10]» -q q2 sleep 10000
В начале цикла планирования список возможных хостов строится, беря либо все хосты в кластере, либо хосты, перечисленные в любом запрошенном списке хостов (-m), и упорядочивая их в соответствии с порядковым разделом строки требований к ресурсам. Предположим, что упорядоченные списки хостов-кандидатов для заданий после упорядочивания выглядят следующим образом:
Задание1: {ч1, ч7, ч4, ч10}
Задание2: {ч1, ч2}
Это означает, что h1 в конечном итоге является хостом с самым высоким разрешением в списках хостов-кандидатов для обоих заданий. Только при более позднем планировании каждому заданию по одному будут выделяться хосты для запуска и ресурсы с этих хостов.
Предположим, что Job1 должен попасть на хост h1, и поэтому ему будет выделено 100 'res'. Затем, когда рассматривается Job2, для него также может быть запланирована посадка на хост h1, потому что его список хостов-кандидатов выглядит так же. То есть не учитываются 100 'res', выделенные для Job1 в рамках того же цикла планирования.
Короче говоря, вы одновременно отправляете кучу заданий и просите, чтобы хосты-кандидаты были упорядочены по ресурсу «ut», но в рамках одного цикла планирования хосты не переупорядочиваются, поскольку для них запланированы задания. Если вы распределите свои задания так, чтобы каждое из них было запланировано в отдельных циклах, вы увидите, что задания отправляются на разные хосты.
Теперь на этой странице документации также описывается, как заставить LSF переупорядочивать хосты в цикле для каждого задания, это делается простым добавлением '!' в строке заказа:
bsub -R "order[!ut]"
Однако я хотел бы предупредить вас, что если в вашем кластере много заданий, это потенциально может значительно замедлить планирование.
Кроме того, я не уверен на 100%, будет ли это работать для ресурса 'ut' (поскольку его значение не изменится при планировании заданий), вы можете попробовать встроенные слоты ресурсов, которые были добавлены в последняя версия, я считаю:
bsub -R "order[!slots]"
Изменить
Несколько моих коллег придумали другой способ обойти это поведение, не используя '!' в строке order
, а это означает, что параметр JOB_ACCEPT_INTERVAL
в строке lsb.params
устанавливается равным 1.
Что это будет делать, так это установить ограничение в 1 задание в минуту, отправляемое на любой конкретный хост, это даст ресурсу ut
время для обновления и балансировки вашей рабочей нагрузки между хостами.
person
Squirrel
schedule
25.03.2015