Как ожидать, что процесс MPI будет убит - PullRequest
0 голосов
/ 26 мая 2018

Нужен совет по следующей проблеме.

У меня есть несколько заданий, работающих с использованием mpi4py в системе SLURM.Я заметил, что когда задание слишком велико (т.е. слишком много данных для обработки), я получаю следующую ошибку:

mpirun noticed that process rank 0 with PID 62208 on node node1 exited on signal 9 (Killed).

Я пытался разбить некоторые задания на более мелкие куски, прежде чем отправлять их, но яМне было интересно, есть ли способ предвидеть сигнал Killed и добавить оператор исключения, чтобы разбить задание на куски, когда возникнет такая необходимость.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Ваше приложение выделяет слишком много памяти.К сожалению, SIGKILL не может быть обработано в вашем приложении;поэтому вам нужно быть активным (следя за тем, чтобы у вас никогда не было больше памяти, чем это возможно), а не реагировать (поймать сигнал и принять меры).Неясно, что именно вы подразумеваете под «слишком много данных для обработки» или как вы разбиваете проблему на более мелкие куски, поэтому я могу дать только некоторые общие советы.

Если вы можете разумно оценить требования к памятио проблеме, которую вы пытаетесь решить, вы можете предупредить пользователя и досрочно прервать работу, если размер проблемы больше, чем могут обработать узлы.Затем сценарий может уменьшить размер проблемы или увеличить количество узлов до тех пор, пока он не поместится в памяти.Если узлы являются общими или вы заранее не знаете объем доступной памяти, вы можете использовать такие функции, как get_phys_pages() и get_avphys_pages, чтобы определить это.

0 голосов
/ 06 июня 2018

Сигнал KILL не может быть пойман, заблокирован или проигнорирован, но ему часто предшествует сигнал INT или TERM, который вы можете поймать и воспользоваться возможностью воздействовать.Смотрите пример в Python для сигнала INT здесь

...