WOLFRAM

Как использовать Mathematica в управляемом высокопроизводительном кластере?

Общая информация

Более крупные вычислительные кластеры состоят из множества узлов, где каждый узел состоит из множества ядер процессора. Кроме того, на кластере часто доступно специальное программное обеспечение, такое как Mathematica. Пользователи запрашивают эти ресурсы, регистрируясь на головном узле и отправляя пакетные задания менеджеру кластера. Работа выполняется, когда ресурсы становятся доступными. К двум распространенным кластерным менеджерам относятся TORQUE и Slurm.

Распараллеливание в Mathematica использует звездообразную модель (hub-and-spoke), в которой управляющее ядро управляет несколькими подчиненными ядрами (подядрами). В кластерной среде клиент запускает управляющее ядро, а хосты предоставляют подядра. Менеджер кластера определяет, какой узел выступает в качестве клиента, а какие узлы – в качестве хостов.

Использование Mathematica на кластере имеет два преимущества: количество доступных процессорных ядер—даже на одном узле—обычно больше, чем на настольном компьютере, а скорость каждого ядра процессора в отдельности выше, чем на настольном компьютере.

Запуск удаленного фронтенда Mathematica

Удаленный фронтенд требует, чтобы пользователь сохранял контроль над ресурсами задания. Это называется интерактивным сеансом.

Хотя, как правило, скорость процессора выше, чем при использовании настольного компьютера, фронтенд через интерактивный сеанс работает медленнее, чем при запуске локальной версии фронтенда. Это связано с тем, что фронтенд выполняется в кластере, в то время как интерфейс перенаправляется на компьютер удаленного пользователя.

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

  1. Войдите в головной узел через SSH с включенной переадресацией X Windows.
  2. Запустите интерактивный сеанс, запросив все ресурсы на одном узле.
  3. Начните сеанс Mathematica.

Из блокнота Mathematica, используя команду LaunchKernels[] или любую другую параллельную функциональность, теперь будут включаться подядра, запущенные из кластера.

Запуск удаленного скрипта Mathematica

Предполагается, что:

  • Вы знакомы с запуском удаленных подядер
  • Кластер является средой Linux
  • Кластер использует клонированную файловую систему, так что Mathematica запускается одним и тем же исполняемым файлом на всех узлах

Если какое-либо из вышеприведенных предположений неверно, то необходимо будет изменить следующее, но общая схема остается неизменной:

  1. Запросите систему, чтобы найти имена узлов, которые назначены для выполнения работы
  2. Запросите систему, чтобы узнать, сколько ядер доступно на каждом узле
  3. Ручной запуск удаленных ядер

Slurm

Для Slurm в скрипте Mathematica или Wolfram Language вы могли бы иметь:

(* get host names *)
hosts = ReadList["!scontrol show hostname $SLURM_JOB_NODELIST", String]
masternode = Environment["SLURM_NODENAME"]
njobs = ToExpression[Environment["SLURM_CPUS_ON_NODE"]]
hosts = DeleteCases[hosts, masternode]; Length[hosts]

(* launch kernels on each host *)
kernels =
 KernelConfiguration[#, "KernelCount" -> njobs] & /@ hosts;
LaunchKernels[kernels]

При получении имен узлов вы также можете использовать SLURM_NODELIST вместо SLURM_JOB_NODELIST для обратной совместимости.

Возвращаемый формат количества задач на узел не подходит для интерпретации в Wolfram Language. Поэтому, выражение разбирается вручную в списочное выражение.

TORQUE

Для TORQUE в скрипте Mathematica или Wolfram Language вы могли бы иметь:

(* get association of resources *)
hosts = Counts[ReadList[Environment["PBS_NODEFILE"], "String"]];

(* launch subkernels and connect them to the controlling Wolfram Kernel *)
kernels=
Map[KernelConfiguration[#,"KernelCount" -> hosts[#]] &, Keys[hosts]]
LaunchKernels[kernels]

PBS_NODEFILE – это системная переменная, которая выводит имя каждого узла один раз для каждого доступного ядра процессора. Counts преобразует этот список в экземпляр Association, где в качестве ключа будет указано имя узла, а в качестве значения – количество ядер процессора. Для простоты все подядра рассматриваются как удаленные ядра, даже если некоторые из них будут запущены на том же узле, что и локальный экземпляр Mathematica.

Приведение в порядок после вычислений

После завершения параллельного кода рекомендуется закрыть ядра Wolfram:

CloseKernels[];

[English]

Была ли эта статья для вас полезной?
Да
Нет

Хотите оставить комментарий?

Спасибо за ваш отзыв.

Отправить

Обратиться в службу поддержки

Если у вас есть вопросы о ценах и оплате, активации или сомнения по техническим темам, мы готовы вам помочь.

1-800-WOLFRAM (+1-217-398-0700 для международных звонков)

Служба поддержки

Понедельник-пятница
с 08:00 до 17:00 по центральному времени США

  • Регистрация или активация продукта
  • Предпродажная информация и заказ
  • Помощь в установке и первом запуске

Расширенная техническая поддержка (для правомочных клиентов)

Понедельник-четверг
с 08:00 до 19:00 по центральному времени США

Пятница
с 08:30 до 10:00 и с 11:00 до 17:00 по центральному времени США

  • Приоритетная техническая поддержка
  • Поддержка по продуктам от экспертов Wolfram
  • Помощь специалистов по программированию на Wolfram Language
  • Расширенная поддержка установки