Кластерный расчет на PipeSIM

Последнее сообщение
WadiAra 162 12
Май 13

В своей работе нашему коллективу приходится производить довольно много расчетов режимов работы систем сбора, в этом нам помогает программа PipeSIM. Количество таких расчетов со временем только росло и дошло до того что длительность некоторых превысила час рабочего времени, а это уже никуда не годится. Было принято решение, сократить время, затрачиваемое на вычисления и тем самым облегчить работу себе и коллегам.

Поиск решения

Пользователям симулятора PipeSIM известно, что свои вычисления он проводит одним потоком, используя один процессор/ядро ПК. Исхитрившись, разделив модели сети сбора на участки (отдельные модели промыслов, шлейфов), используя Open Link и запуская несколько экземпляров расчетчика в разных потоках можно нагрузить процессор  ПК по максимуму. Расчет станет шустрей, но прирост производительности будет не линейный, дело в том, что во время расчета много (у меня доходило до 30%) времени тратится на завершение операций ввода вывода, это связано с тем, что расчетное ядро PipeSIM генерирует кучу файлов (.pst, .plt, .tnt, .rst, .sum, .out, .pns, .pnsx). Лечится, переносом расчетов на RAM диск (диск в памяти), для дополнительного ускорения на RAM диск можно перенести сам симулятор.
Но бывает, так что на всех не хватает не только мощных станций, но и даже лицензий на симулятор. Выход в переносе расчетов на вычислительный сервер, а в случае если ваше предприятие эксплуатирует больше одной лицензии, то и на вычислительный кластер.

Как это сделать

Сервер автоматизации Open Link предоставляет возможность изменять ограниченное количество параметров объектов модели, без доступа к функциям по «человеческому» созданию или удалению объектов сетевой модели. Из этого вытекает, что создание кластера на технологии Open Link потребует дополнительного хранения файлов моделей, организации их постоянного обновления, в случае же изменений схемы сбора или добавления новой скважины необходимо будет редактировать файл модели вручную, а значить постоянно, производить двойную работу. Кроме этого параллельный расчет одного шлейфа из-за особенностей организации расчетов в симуляторе PipeSIM потребует копирования его модели в разные каталоги расчетного сервера, что не добавит производительности, а значит это не наш метод, и мы пойдем другим путем.
Кто плотно работает с PipeSIM, знает, что Open Link и графический интерфейс PipeSIM - это надстройка над математическим расчетным ядром PipeSIM (pnetstub.exe, psimstub.exe) и у пользователя есть возможность обращаться к расчетному ядру напрямую, минуя дополнительные программные интерфейсы. Для каждого расчета мы будем должны генерировать engine files симулятора .pst и .tnt, это обычные текстовые файлы, описание их ключевых слов есть в мануале, работать с ними не сложнее чем с Open Link. Для генерации таких файлов необходимо иметь БД, где хранятся параметры, конструкция скважин и конструкция ГСС. Обычно у добывающей компании уже есть различные БД, содержащие необходимую информацию которые для использования их в качестве источников данных для вычислений требуют незначительного расширения.  Сами результаты вычислений из выходных файлов (.plt, .sum, .out, .pns, .pnsx) можно считывать с помощью Open Link, для этого придется сохранять результаты расчета на диск, что, по-моему, не очень правильно, лучше самому в оперативной памяти обработать результаты расчета, не связываясь с Open Link.
Программно наш кластер будет состоять из следующих элементов

  • сервис получения задачи и генерации моделей для расчетного ядра PipeSIM
  • сервис распределения нагрузки
  • сервис расчета моделей

Сервисы расчета моделей стоит расположить на высокопроизводительных серверах, ведь от этого будет завесить скорость расчета, а сервис генерации моделей поближе к источникам данных. При желании сервис получения задачи и распределения нагрузки можно объединить в один.

Как это работает

  1. Расчет начинается с того, что приложение клиент формирует запрос на сервис. В запросе указаны расчетные объекты и их параметры (пластовое давление, зажатие скважин, давление/расход на стоке и т.д.), параметры окружающей среды.
  2. После получения задачи сервис считывает из БД остальную необходимую информацию (состав газа, длины диаметры трубопроводов, инклинометрия скважин,  характеристики изоляции, перепад высот, продуктивные характеристики и т.д) и формирует расчетные файлы (.tnt, .pst, .pvt) симулятора PipeSIM, эти файлы отсылаются на сервис распределения нагрузки.
  3. Далее сервис распределения нагрузки ставит задачу в очередь и передает файлы задачи по свободным расчетным сервисам.
  4. Расчетный сервис запускает полученные файлы на расчет в симуляторе PipeSIM, по окончанию расчета передает результаты расчета (файлы .pns, .pnsx, .plc, .plt.) на сервис распределения нагрузки.
  5. Сервис распределения нагрузки передает архивы файлов результатов расчета сервису получения задачи и генерации моделей
  6. И наконец, сервис считывает из файлов результаты расчета и формирует ответ, который по запросу передается клиенту, сервис переходит в режим ожидания задачи.

Результат

Кроме многократного увеличения скорости расчета результатом создания кластера будет еще ряд полезных эффектов:

  • Пользователи не занимаются установкой и обновлением PipeSIM, клиента лицензии, RAM диска.
  • Все модели хранятся в одном месте, и их обновление происходит одновременно с внесением данных (замеры ГДИС, изменение конструкции, фонда, телеметрия и т.д.) в эксплуатируемые БД.
  • Снижение требований к клиентской рабочей станции, вычисления будут одинаково быстро проходить как, как на слабой, так и на высокопроизводительной станции.
  • В выше описанной реализации кластера, возможно, проводить расчетов больше чем доступно лицензий на PS. Ни что не помешает при наличии даже одной лицензии ставить на расчет задачи хоть от 10 клиентов, в этом случае для разумного времени расчета главное, чтобы вычислительный узел был производительным. Учитывая то, что одна лицензия на PS стоит намного дороже, хорошего сервера, этот эффект очень приятен.

З.Ы. В нашей реализации кластера получено 10 - 26 кратное ускорение расчета.

karakurt2 94 14
Май 13 #1

Привет, WadiAra!
Очень впечетляет. На чём реализовывался сервис? Как организована пересылка входных файлов Пайпсима узлам расчётного кластера? Использовался ли MPI или вы реализовывали самостоятельно обмен данными и синхронизацию между узлами кластера? Сколько расчётных узлов содержит Ваш кластер и на сколько машин он распространяется в текущей реализации, где удалось добиться 10-26 -кратного ускорения сетевого расчёта?

WadiAra 162 12
Май 13 #2

Привет, karakurt2!

karakurt2 пишет:
На чём реализовывался сервис?
WCF
karakurt2 пишет:
Как организована пересылка входных файлов Пайпсима узлам расчётного кластера?
Сериализация класса> архивация набора байт> отправка по tcp или http (в зависимости от настройки конфига)
karakurt2 пишет:
Сколько расчётных узлов содержит Ваш кластер и на сколько машин он распространяется
в текущей реализации 3 расчетных узла, на самом мощном расчетном ноде стоит сервер распределения нагрузки и получения задачи.
karakurt2 пишет:
где удалось добиться 10-26 -кратного ускорения сетевого расчёта?
На промыслах разное количество шлейфов и соответственно разное ускорение по сравнению с локальным расчетом единой модели этого промысла

WadiAra 162 12
Май 13 #3

karakurt2 пишет:
Использовался ли MPI или вы реализовывали самостоятельно обмен данными и синхронизацию между узлами кластера?

Нет, все сами сделали, через WCF.

Go to top