2013-07-22 4 views
5

Я пытаюсь использовать 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 

Однако, у меня есть эти вопросы:

  1. Очень часто, многие из двигателей не смогут регистрироваться с помощью контроллера даже после Я вижу сообщение выше, в котором говорится, что двигатели успешно запущены. Когда я запускаю 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 
    

    Любая идея, почему это происходит?

  2. Иногда, двигатели начинают и успешно зарегистрироваться, но они начинают умирать, когда я заставляю их запустить что-то очень простое, как 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'

  3. Запуск двигателей таким образом означает, что я занимаю узлы и очередь до тех пор, пока двигатели работают, даже если они ничего не выполняют. Есть ли простой способ запустить движки, чтобы они были созданы только тогда, когда вы хотите запустить какой-то скрипт, и они закроются, как только они вернут результат их вычисления?

  4. Кажется, что контроллер Grid запускает контроллер на другом узле, поэтому флаг -ruse в конфигурационных файлах IPCLUSTER не полезен; Мне нужно копировать файлы JSON каждый раз, когда я использую IPCLUSTER. Есть ли способ избежать этого?

Было бы очень полезно, если кто-то может дать простой рабочий процесс для этого общего сценария: с помощью IPython параллельно представить, очевидно, параллельные рабочие места в SGE кластер через соединение SSH. Должен быть какой-то способ обработки повторной отправки для сбоев двигателя, и было бы неплохо, если бы был способ использовать ресурсы кластера только на время симуляции.

ответ

1

Это происходит немного поздно, и на самом деле это не отвечает на ваш конкретный вопрос. Однако, вы пробовали с pythongrid?

 Смежные вопросы

  • Нет связанных вопросов^_^