Создайте фиктивное задание для SGE, чтобы заполнить все узлы перед запуском задания, которое будет выполняться на полных узлах.

Создайте фиктивное задание для SGE, чтобы заполнить все узлы перед запуском задания, которое будет выполняться на полных узлах.

Проблема отправки заданий на SGE для запуска на полных узлах уже обсуждалась на этом форуме. Было предложено несколько решений, одно из которых — настроить SGE для использования опции -l excl=TRUE, другое — запросить у SGE жесткие ограничения памяти или нагрузки.

Я использую кластер своего университета для своей магистерской диссертации, параллельная среда openmpi настроена со стратегией fill-up. Обычно узлы кластера содержат по 16 или 20 ядер каждый, проблема в том, что некоторые пользователи вместо запуска вычислений с числом ядер, кратным 16 (или 20), запускают свои задания с произвольным числом ядер. В результате, когда я запускаю задание с -pe openmpi 16, иногда SGE резервирует процессоры на 3 узлах (например, 6 + 1 + 10), что делает вычисления очень медленными.

Я попросил администратора настроить кластер так, чтобы разрешить -l excl=TRUE, но он отказался менять конфигурацию до проведения тестов (не знаю, как долго это продлится).

Теперь у меня есть новая идея, которая может позволить мне получить аналогичный результат, что и (-l excl=TRUE), но без изменения кластера:

  1. Напишите скрипт, который будет сканировать очередь и оценивать количество ядер, которые необходимо запросить у SGE, чтобы он заполнил все работающие узлы и оставил только полностью свободные узлы.
  2. Запустить фиктивное задание с вычисленным количеством ядер, которое будет ожидать в течение определенного времени.
  3. запустить мою настоящую работу (например, -pe openmpi 2*16=32).
  4. Удалите фиктивную задачу, чтобы другие пользователи могли использовать ее ядра.

Может ли кто-нибудь предоставить мне пример такого кода?

решение1

Запуск проектов с помощью qsub -l cpu=0(или cpu=0.1) для меня работает идеально.

Связанный контент