Проблема отправки заданий на 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), но без изменения кластера:
- Напишите скрипт, который будет сканировать очередь и оценивать количество ядер, которые необходимо запросить у SGE, чтобы он заполнил все работающие узлы и оставил только полностью свободные узлы.
- Запустить фиктивное задание с вычисленным количеством ядер, которое будет ожидать в течение определенного времени.
- запустить мою настоящую работу (например, -pe openmpi 2*16=32).
- Удалите фиктивную задачу, чтобы другие пользователи могли использовать ее ядра.
Может ли кто-нибудь предоставить мне пример такого кода?
решение1
Запуск проектов с помощью qsub -l cpu=0
(или cpu=0.1
) для меня работает идеально.