Управление длительными симуляциями

если есть лучший стек, чтобы спросить об этом, пожалуйста, дайте мне знать.

Моя проблема

У меня есть симуляция, на выполнение которой уходит 3-4 дня . Я хочу запустить многие из них с различными параметрами, определенными в текстовых файлах, на удаленных машинах с Linux через ssh (скорее всего). Я уже делал это с помощью комбинации bash, python, ssh и screen. Мои сценарии отправляют (или транслируют множество наборов) входных файлов в каталог на удаленных машинах и запускают симуляцию на отдельном экране. У меня есть сценарий, который проверяет, завершена ли симуляция, и когда это происходит, у меня есть другой сценарий, который удаленно обрабатывает результаты, а затем собирает их.

В настоящее время у меня есть несколько проблем. Некоторые из удаленных машин являются лабораторными компьютерами, а это означает, что хотя они и не должны быть выключены, они неизбежно выключаются время от времени. Симуляция записывает выходные данные каждые 10 временных шагов , так что больших потерь в работе нет, но симуляцию необходимо перезапускать после повторного включения компьютера. Иногда симуляция дает сбой, необходимо удалить последний записанный временной шаг и перезапустить симуляцию вручную. В связи с этим я могу запросить удаленные машины с помощью скрипта, чтобы убедиться, что симуляция успешно завершена, но я не знаю, как проверить, запущена ли симуляция или ожидает перезапуска без использования ssh и top.

что бы я хотел

Я хотел бы сделать этот процесс более сложным и упорядоченным. Сама модель была разработана кем-то другим (это модель OpenFoam CFD, если это имеет значение), и я унаследовал ее, чтобы использовать ее для работы по метамоделированию и оптимизации, и это не входит в мою компетенцию, чтобы действительно углубляться в моделирую многое сам.

В идеале я хотел бы создать панель инструментов или CLI , которую я мог бы использовать для надежного, удаленного и легкого управления этими симуляциями. Я хотел бы использовать Python, если это возможно, потому что мне было бы удобнее с ним, и я также вполне доволен bash , хотя моя работа в bash намного более хакерская.

Я ищу шаблоны проектирования или инструменты , которые позволили бы мне запрашивать пул компьютеров, которые у меня есть, программным способом , проверять состояние моих симуляций программным способом, а затем программировать поведение на основе этих статусов.

Пример

Например: когда компьютер выключается во время одной из моих симуляций, я обычно не осознаю этого, пока не посмотрю результаты, в противном случае процесс занимает довольно много времени, так что много потерянного вычислительного времени. Есть ли инструмент bash или ткань или paramiko позволяют мне получать уведомления, когда машина выключена? Глупо ли настраивать задачу на машине, которая, как я знаю, не будет отключена, которая будет постоянно опрашивать каждую из моих машин, чтобы проверить, включены ли они?

Альтернативы

Если это не представляется возможным, стоит ли переходить в облако? Во-первых, я беспокоюсь, что это будет стоить мне (я не думаю, что у меня есть на это бюджет) и что будет много хлопот, чтобы настроить правильную среду, но я ошибаюсь? Это не то, с чем я знаком.

TL:DR Я хочу иметь возможность программно запрашивать состояние и перезапускать симуляции на удаленных машинах через ssh.

Я думаю, вам нужна пакетная система, как она обычно используется в кластерах.
Спасибо, я попробую. Похоже, psможет быть полезной утилитой командной строки. Эта ссылка выглядит весьма полезной для дальнейшего развития: anyexample.com/linux_bsd/bash/…
Чтобы было ясно: вам нужен инструмент/библиотека, которая позволяет вам запрашивать статус запущенных заданий на машинах Linux через SSH через Python?
Не обязательно через питон. Баш в порядке. Я хотел бы создать из него приложение, чтобы было меньше ручной проверки, больше автоматизированной проверки и автоматических уведомлений о выключении компьютера или завершении задания компьютер может быть выделен новый без необходимости делать это вручную .
Если я в конечном итоге запущу советник через эту систему, например, используя эти симуляции в качестве целевых функций, я подумал, что это может быть проще в Python.
Звучит здорово. Это действительно интересная проблема, надеюсь, вы получите ответ!
Я бы посоветовал взглянуть на программное обеспечение для управления заданиями на ферме рендеринга (большая часть его на питоне), которое уже существует, возможно, с целью его адаптации к вашему варианту использования. Проблемы очень похожи.
Есть предложения по какому именно? Это все новое для меня, поэтому отправная точка, такая как имя, была бы отличной.

Ответы (2)

Предлагаю посмотреть на это. Я сам не использовал его, но в следующий раз, когда мне нужно будет делать такие вещи, как это:

http://python-rq.org/

RQ (Redis Queue) — это простая библиотека Python для постановки заданий в очередь и их обработки в фоновом режиме с рабочими процессами. Он поддерживается Redis и имеет низкий барьер для входа. Его можно легко интегрировать в ваш веб-стек.

Один намек: вы говорите, что моделирование занимает 3-4 дня. Я бы попробовал порезать на мелкие кусочки. Есть ли способ сделать параллельную обработку? Это имеет много преимуществ:

  • Если вы вычисляете небольшие куски, вы не много потеряете, если один узел выйдет из строя.
  • Это быстрее.
Я думаю, что это, наверное, то, что я хотел. Я больше не занимаюсь такими вещами, но думаю, что у меня мог бы быть скрипт на Python, который использует стандартную параллельную библиотеку для управления дочерними процессами и подпроцессами для переноса самой симуляции. Это довольно простой шаблон, и я предполагаю, что RQ делает именно это и многое другое с очередью? На какие подводные камни следует обратить внимание при использовании такого шаблона? Насколько он устойчив: т.е. если компьютер, на котором запущен дочерний процесс, отключается, соединение теряется, достаточно ли оно надежно, чтобы все остальное продолжалось?
@Ogaday Я сам не использовал python-rq.org. Я однажды использовал сельдерей, и я думаю, что у него слишком много функций и некоторые недостатки. Недостатки сельдерея, с моей точки зрения: показ одного человека (достаточно посмотреть историю коммитов на github) и перезапуск непрост (я спрашивал об этом году и около трех лет назад, но ничего не изменилось).
Fabric тоже кажется хорошим вариантом, но только для python 2? Видя, что я делаю что-то через ssh, это может иметь большой смысл.
@Ogaday Fabric не предназначена для параллельного выполнения. Это похоже на скрипты удаленной оболочки (это то, чему я научился и буду избегать этого в будущем). В настоящее время мы находимся в процессе перехода с фабрики на соль (для управления конфигурацией).

Сетевые вычисления

Я не эксперт в этом, но я подозреваю, что грид-вычисления — это технический термин для ваших нужд.

Одним из первых таких инструментов был Xgrid от Apple, основанный на Zilla от Next, Inc. Сейчас снят с производства.

HTCondor кажется решением, которое может сработать для вас. Это долгосрочный проект с открытым исходным кодом в университете. Он работает на Linux и других ОС.

Oracle Grid Engine — еще один такой проект. Разветвлен на различные связанные проекты.

В Википедии есть этот список проектов грид-вычислений .

Одно ограничение, о котором я забыл упомянуть, заключалось в том, что я не являюсь суперпользователем в сети. Однако грид-вычисления выглядят достойными изучения. Я слышал о HTC Condor раньше, и я думаю, что в сети может быть что-то подобное настроено, поэтому я покопаюсь, спасибо.