27 августа 2015

HPC - это просто!

Постановка задачи

Рассмотрим задачу генерации данных для построения аппроксимационной модели с помощью стороннего программного обеспечения - решателя (англ. solver). Для генерации данных нам потребуется множество запусков решателя, причём каждый запуск может занимать продолжительное время, и общее время генерации данных на одном компьютере может оказаться очень большим.

Сократить общее время вычислений можно с помощью вычислительного кластера. pSeven обеспечивает интеграцию со следующими типами кластерных менеджеров ресурсов:

  • TORQUE
  • SLURM
  • LSF / OpenLava

Интеграция с вычислительным кластером осуществляется блоком std.ShellScript, который, кроме того, обеспечивает поддержку механизма Job Array (массив задач), упрощающего управление наборами однотипных задач.

Расчётная схема

Для решения задачи воспользуемся примером Approximation из набора простых примеров General Examples. В этом примере расчётная схема генерирует набор данных, которые используются как входные данные для решателя и как входные данные для построения аппроксимации.

Блок Solver - это композитный блок, обрабатывающий один вектор входных данных

Внутренняя расчётная схема блока Solver:

В блоке Solver включена опция “Parallel execution”, что позволяет блоку автоматически обрабатывать матрицу входных данных как список векторов. Эта опция также определяет количество экземпляров внутренней расчётной схемы, которые будут выполняться параллельно.

Команда в блоке Launcher:

Как ускорить расчётную схему

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

Изменим настройки блока Launcher. Зададим:

  • batch manager: “slurm”
  • ssh connection information (“Host”, “Port”, “Username”, “Password”)
  • synchronization: (“local to remote”)

 

Теперь блок Launcher будет запускать решатель на кластере, автоматически загружая на кластер входные файлы и скачивая с кластера результаты вычислений. Из-за того что экземпляры блока Launcher выполняются параллельно, запуск решателей на кластере тоже происходит параллельно.

Выводы

Использование распараллеливания вычислений в композитном блоке std.Composite совместно с запуском решателей на вычислительном кластере - простой способ ускорить выполнение расчётных схем всего в несколько кликов. Можно получить даже большее ускорение, если изменить расчётную схему так, чтобы все входные файлы генерировались до отправки заданий на кластер, а блок std.ShellScript отправлял задания на кластер пачкой, используюя механизм Job Array. 

 

Станислав Маркевич, Старший программист, DATADVANCE

LinkedIn
VK

Заинтересовало решение?

Нажмите, чтобы запросить бесплатную 30-дневную демоверсию.

Запросить демо