Я пытаюсь использовать IPython Parallel для очень распространенного сценария, где я хочу запускать симуляции в кластере с помощью Sun Grid Engine, и я не могу найти надежный способ сделать это.Использование IPython Parallel в Sun Grid Engine
Вот что я пытаюсь сделать:
Я хочу запустить численное моделирование (используя Numpy массивы) с несколькими различными значениями параметров - задачи, очевидно,/«неловкости» параллельны друг другу. У меня есть доступ (через ssh) к головному узлу кластера, работающему с Grid Engine. До сих пор я запускал shell-скрипты с помощью команды QSUB, но это довольно неуклюжий (сбой в обработке узлов и т. Д.), И я искал способ для всего этого в Python.
IPython, по-видимому, идеально подходит для этого сценария, но оказалось, что это неудобно, чтобы настроить работу плавно. Я запускаю n (скажем, 20) движков, используя IPCLUSTER на головном узле, а затем скопируйте файлы .json на свои локальные машины, откуда я подключаюсь с помощью IPython.parallel.Client.
Я поставил IPClusterStart.controller_launcher_class = 'SGEControllerLauncher'
и IPClusterEngines.engine_launcher_class = 'SGEEngineSetLauncher'
IPCLUSTER, кажется, работает нормально; Я получаю этот выход из узла головки на терминальном:
-- [IPClusterStart] Starting Controller with SGEControllerLauncher
-- [IPClusterStart] Job submitted with job id: '143396'
-- [IPClusterStart] Starting 4 Engines with SGEEngineSetLauncher
-- [IPClusterStart] Job submitted with job id: '143397'
-- [IPClusterStart] Engines appear to have started successfully
Однако, у меня есть эти вопросы:
Очень часто, многие из двигателей не смогут регистрироваться с помощью контроллера даже после Я вижу сообщение выше, в котором говорится, что двигатели успешно запущены. Когда я запускаю IPCLUSTER с 20 двигателями, я могу видеть 10-15 двигателей, появляющихся в очереди Grid Engine. Я понятия не имею, что происходит с другими двигателями - нет выходных файлов. Из этих 10-15 двигателей, которые начинаются только некоторые из них зарегистрировать с контроллером, и я вижу это на их выходные файлы:
... [IPEngineApp] Using existing profile dir: .../.ipython/profile_sge' ... [IPEngineApp] Loading url_file ... .ipython/profile_sge/security/ipcontroller-engine.json' ... [IPEngineApp] Registering with controller at tcp://192.168.87.106:63615 ... [IPEngineApp] Using existing profile dir: .../.ipython/profile_sge' ... [IPEngineApp] Completed registration with id 0
На других я вижу это:
... [IPEngineApp] Using existing profile dir: .../.ipython/profile_sge' ... [IPEngineApp] Loading url_file .../.ipython/profile_sge/security/ipcontroller-engine.json' ... [IPEngineApp] Registering with controller at tcp://192.168.87.115:64909 ... [IPEngineApp] Registration timed out after 2.0 seconds
Любая идея, почему это происходит?
Иногда, двигатели начинают и успешно зарегистрироваться, но они начинают умирать, когда я заставляю их запустить что-то очень простое, как
view.execute('%pylab')
и единственное исключение я получаю обратно это:[Двигатель Exception] Traceback (самая последняя call last): Файл «/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/IPython/parallel/client/client.py», строка 708, в _handle_stranded_msgs ошибка повышения. EngineError («Двигатель% r умер во время выполнения задачи% r»% (eid, msg_id)) EngineError: Двигатель 1 скончался во время выполнения задачи 'b9601e8a-cff5-4037-b9d9-a0b93ca2f256'
Запуск двигателей таким образом означает, что я занимаю узлы и очередь до тех пор, пока двигатели работают, даже если они ничего не выполняют. Есть ли простой способ запустить движки, чтобы они были созданы только тогда, когда вы хотите запустить какой-то скрипт, и они закроются, как только они вернут результат их вычисления?
Кажется, что контроллер Grid запускает контроллер на другом узле, поэтому флаг -ruse в конфигурационных файлах IPCLUSTER не полезен; Мне нужно копировать файлы JSON каждый раз, когда я использую IPCLUSTER. Есть ли способ избежать этого?
Было бы очень полезно, если кто-то может дать простой рабочий процесс для этого общего сценария: с помощью IPython параллельно представить, очевидно, параллельные рабочие места в SGE кластер через соединение SSH. Должен быть какой-то способ обработки повторной отправки для сбоев двигателя, и было бы неплохо, если бы был способ использовать ресурсы кластера только на время симуляции.