Как запускать расчеты на кластере "Блохин"

Как запускать расчеты на кластере "Блохин"

Как запускать расчеты на кластере "Блохин"

Общая характеристика кластера
218-ядерный высокопроизводительный вычислительный кластер "Блохин" с пиковой вычислительной мощностью 9.5 TFlops.Кластер ориентирован на решение трудоемких задач, требующих высокой процессорной вычислительной мощности и больших объемов оперативной памяти.
 23 узла (h1-h23) на базе 6-ядерных процессоров Intel Original Core i7 X6 5930K @3.5 GHz (Haswell), 64 Гб DDR4
 
3 узла (b1-b3) на базе двух 8-ядерных процессоров Intel® Xeon® X8 E5-2667v2 с тактовой частотой ядер 3.3 GHz, 384 Гб DDR3
Отдельный узел "b4" выделен для очень ресурсоемких задач, требовательных к оперативной памяти. На узле работают два 8-ядерных процессора Intel Xeon E5-2620 v4 с максимальной тактовой частотой ядер 3.0 GHz. Объем оперативной памяти узла b4 составляет 768 Gb.

Управляющий узел кластера main оснащен двумя 8-ядерными процессорами Intel Xeon X8 E5-2667v2. Пакет разработки программного обеспечения Intel Parallel Studio XE 2015 Cluster Edition for C++ and Fortran позволяет добиться наиболее высокой производительности и стабильности в работе программ, по сравнению с OpenSource компиляторами.

1. Подключение к кластеру
Адрес управляющего компьютера: hpc.nano.sfedu.ru    IP-адрес:  195.208.250.3
Для запуска расчётов используется ssh протокол (например, программа Putty). Для обмена файлами используется ftp протокол (например, Total Commander или WinSCP). Доступ осуществляется по заранее полученным логину и паролю.

2. Установленное ПО
На кластере установлено лицензионное программное обеспечение для выполнения квантово-механических расчётов. 
FDMNES - метод конечных разностей для расчёта спектров рентгеновского поглощения http://neel.cnrs.fr/spip.php?article3137. Используемое приближение: теория функционала плотности, расчёт ведётся в прямом пространстве на сетке вокруг поглощающего атома.
VASP5.2 - метод псевдопотенциала для расчёта электронной структуры, геометрической оптимизации и молекулярной динамики периодических структур https://www.vasp.at. Расчёт ведётся в обратном пространстве (зонный метод), используя разложение волновой функции по плоским волнам в рамках теории функционала плотности. Есть возможность учёта поправок LDA+U, GW.
USPEX - метод эволюционных алгоритмов для поиска стабильных структур имеющих минимальную свободную энергию http://uspex.stonybrook.edu/uspex.html. Имеет интерфейс с программой VASP. В качестве входных структурных данных достаточно задать лишь стехиометрию искомого соединения.
ADF - метод молекулярных орбиталей в рамках теории функционала электронной плотности для расчёта электронной структуры, возбуждений и геометрической оптимизации молекул и нанокластеров. В нашей лаборатории имеется программное обеспечение для расчёта спектров поглощения и эмиссии на основе волновых функций, рассчитанных в ADF (ADFEmis).
Wien2k - полнопотенциальный метод для расчёта электронной структуры, спектров и геометрической оптимизации периодических структур. Расчёт ведётся в обратном пространстве (зонный метод), используя разложение волновой функции по плоским волнам и локализованным орбиталям в рамках теории функционала плотности. Есть возможность учёта спин-орбитального взаимодействия, LDA+U, неколлинеарного магнетизма.
ORCA - метод молекулярных орбиталей в рамках теории функционала электронной плотности для расчёта электронной структуры, возбуждений и геометрической оптимизации молекул и нанокластеров. Кроме DFT реализованы различные многоэлектронные подходы - MP2, CC, CI и др.
MOLCAS - метод молекулярных орбиталей в рамках теории функционала электронной плотности для расчёта электронной структуры, возбуждений и геометрической оптимизации молекул и нанокластеров. Кроме DFT реализованы различные многоэлектронные подходы - MP2, CC, CI и др.

3. Общий набор команд для управления расчётами
run-cluster параметры "команда"   -   поставить задачу в очередь выполнения на кластере (run-cluster -h  - вывод справки)
queue   -   просмотр очереди задач
scancel JobId   -   остановить выполнение задачи
sinfo  -  информация о свободных и загруженных узлах
queueMem  -  просмотр очереди задач с информацией об используемой памяти
queueHist  -  просмотр истории задач
scontrol show job JobID  -  просмотр деталей расчёта (например, в какой папке запущен)
multirun параметры "команда"  - пакетный запуск заданий; позволяет задать набор значений параметров и для каждого запустить команду

Параметры run-cluster
  -l, --mpi=                                Библиотека MPI. Значения: openmpi, intelmpi, no.  По умолчанию intelmpi
  -n, --ntasks=                          Количество MPI процессов. По умолчанию 1
  -t, --threads-per-task=           Количество тредов (например, OpenMP) на один MPI процесс. По умолчанию 1
  -m, --mem-per-task=             Объем резервируемой памяти на 1 MPI процесс в мегабайтах. По умолчанию 2000
  -j, --job-name=                      Имя задачи. По умолчанию - выполняемая команда
  -e, --email=                           Email для отправки сообщений об изменений статуса. По умолчанию не отправляются
  -w, --node-list=                      Список узлов для запуска задачи. Пример 1: h2      Пример 2:   h[1-5,7]     Пример 3: big    По умолчанию - выбрать автоматически
 --same-node                         Ставит задачу только на один узел, не разбивая ядра между соседними узлами.

Примеры:
run-cluster    -n 6    -j myjob    -e gudasergey@gmail.com     fdmnes_01
run-cluster    --mpi=openmpi    -n 4    -m 10000    -w big   "proga1 -k 3 file.csv"

3.1 Команды запуска FDMNES
run-cluster параметры fdmnes_номерВерсии
Номера: 00, 01, 02, 03, ...
Например, команда
run-cluster fdmnes_06 -m 7500 -n 6 -j M034 -e yourmail@mail.ru
запустит расчёт на шести ядрах, при этом на каждое ядро будет выделено 7,5 Гигабайт, название задачи в очереди будет M034, и на почтовый адрес yourmail@mail.ru придёт письмо о статусе расчёта. Клавиша Tab, нажатая после fdmnes_ , позволяет увидеть список всех установленных версий

3.2 Команды запуска VASP
vasp NPAR NCORE MEMORY(Mb) 
vasp1 NPAR NCORE MEMORY (Mb) запустит задачу строго на одном узле (к run-cluster добавлена опция --same-node)
vaspFull NPAR NCORE MEMORY(Mb) команда для расчётов со спин-орбитальным взаимодействием и неколлинеарным магнетизмом

Общее число занятых ядер равно произведению NPAR x NCORE. Для трудоемких расчетов рекомендуется использовать vasp 1 6 либо vasp 2 3 - расчет на 6 ядрах. Использование более 6 ядер приводит к падению эффективности расчетов. Внимание! Карты NCORE и NPAR в INCAR файле будут проигнорированы и переписаны.

Руководство пользователя (на английском языке) доступно на сайте: http://cms.mpi.univie.ac.at/vasp/vasp/vasp.html Запуск множественных single-point расчетов т.е. когда нужно посчитать какую либо характеристику системы при этом многократно варьировать один из параметров: run-cluster -l no -m Память -n 6 -w Узел mvasp. 

3.3 Команды запуска USPEX
   1. В файле INPUT.txt указать команду vasp NPAR NCORE MEMORY(Mb) для запуска VASP (вместо NPAR NCORE MEMORY нужно подставить необходимые значения ). whichCluster установить в 0.
   2. Запустить задачу (в фоне)
        USPEX  -r  >  output.txt  2>&1  &
Основной matlab-скрипт USPEX будет работать как обычная программа на главном узле (этого требует лицензионный matlab), vasp - как slurm-задача на кластере. Для завершения работы программ со всеми вызванными подпрограммами в линуксе используется команда rkill:  rkill   id_процесса. Узнать id процесса можно командой findUSPEX. Если вы запускали фоновые процессы, то завершать работу терминала нужно командой exit (а не крестиком на окне).

3.4 Команды запуска ADF3.4 ADF
Ссылка на мануал по ADF
ADFGUI при соханении входного файла генерирует три файла: *.adf, *.pid, *.run. Для запуска через командную строку необходимо скопировать на кластер файл с расширением *.run, например, N2_freq.run.
Для запуска расчёта необходимо выполнить команды в директории с N2_freq.run:
dos2unix N2_freq.run
chmod +x N2_freq.run
run-cluster ./N2_freq.run
по умолчанию расчёты запускаются в программе ADF2014 r45386 2015-01-13. Чтобы запустить расчёт в новой версии ADF2016 r52646 2016-05-28 необходимо в терминале поменять переменные окружения командой:
. gotoADF2016
чтобы вернуться к старым переменныи окружения достаточно закрыть терминал.

Ссылка на мануал по настройке графического интерфейса для запуска задач на кластер
*kirlom: дополнение к мануалу. В параметрах очереди  Run command лучше написать в таком формате:
run-cluster -n 6 -e your@email.com -j $jobname -m 8000 "$job"
Тогда имя задачи будет совпадать с названием файла расчета, что удобно при просмотре списка задач на кластере, а уведомление о запуске и завершении расчета будет приходить на почту
*guda: а если сделать в очереди ещё run-cluster -n 6 -e your@email.com -j $jobname -m 8000 "$job" --same-node, то она не будет разбивать задачу между двумя узлами. Учтите, что иногда большие задачи вылетают и надо указывать больше оперативки.

3.5 Команды запуска Wien2k
Инициализация расчётов проводится через web-интерфейс. Для его запуска заходим в свою учётную запись через putty. Набираем команду w2web и выбираем себе номер порта (напишу занятые для тех, кто считает Гуда = 7890, Кравцова = 7891, Бугаев = 7892, Панкин = 7893). Остальные по порядку берём себе и записываемся здесь. После того, как задали номер порта через браузер заходим в интерфейс, набирая адрес http://hpc.nano.sfedu.ru:7890 (только в конце пишем свой номер).

После инициализации НЕ ЗАПУСКАТЬ расчёт из графической оболочки. Через putty заходим в папку расчёта и запускаем обычной командой run-cluster без использования mpirun (т.е. с параметром -l no). Файл ".machines" генерируется автоматически так, чтобы lapw0 запускалось на первом выделенном узле, остальные - на всех узлах параллельно по k-точкам.
Пример команды для запуска на 1 ядре:
run-cluster -n 1 -l no 'run_lapw -i 30 -cc 0.0001'

Пояснение: i - максимальное количество итераций scf цикла, -cc - критерий сходимости по заряду. Можно использовать критерий -ec 0.0001 - это будет сходимость по полной энергии. Или оба одновременно. Для проведения спин-поляризованных расчётов надо записывать runsp_lapw ... Для расчётов со спин-орбитальным взаимодействием надо провести стандартный расчёт, сохранить результаты командой save_lapw nonrel, затем инициализировать параметры спин-орбитального взаимодействия командой initso_lapw, и запустить расчёт уже с параметром run_lapw -so. 

Пример команды для параллельного расчёта на 6 ядрах:
run-cluster -n 6 -l no 'run_lapw -p -i 30 -cc 0.0001'
Пример команды запуска геометрической оптимизации:
run-cluster -n 6 -l no -j name 'min -s 1 -j "run_lapw -p -I 80 -fc 1.0 -it" '

Для расчёта спектров требуется запускать последовательно несколько команд. Чтобы не дожидаться выполнения каждой последующей команды в директории создайте файл с названием wienscript с таким содержанием (пример спин-поляризованного расчёта со спин-обитальным взаимодействием):
#!/bin/bash
x lapw1 -up -p -c
x lapw1 -dn -p -c
x lapwso -up -p -c
x lapw2 -up -c -so -qtl -p
x lapw2 -dn -c -so -qtl -p
запускать его следует командой: run-cluster -n 6 -l no -j JOBNAME --same-node ./wienscript

3.6 Команды запуска ORCA
orca nprocs memoryPerThread InputFile

3.7 Команды запуска MOLCAS
run-cluster -n NCPU   molcas   INPUT_file

3.8 Графические оболочки
Для работы с графическими программами на кластере необходимо установить на локальный компьютер программу XMing. После установки запустить XLaunch - выбрать запуск программы - указать IP кластера, свой логин и пароль. В открывшемся окне запускать команды:
xcrysden - графический редактор для Wien2k
molcas MolGUI - графический редактор для MOLCAS

3.9 Пакетный запуск заданий
Команда multirun позволяет для заданного набора значений параметров автоматически изменять их значения во входных файлах и параметрах программ, запускать программы, находить результирующие данные в выходных файлах и собирать полученные значения в таблицу. Для того, чтобы воспользоваться multirun, нужно:
      1. Заменить изменяющиеся значения во входных файлах (или параметрах программы) на уникальные имена параметров. Например: atomN_coordX, atomN_coordY.
      2. Составить регулярное выражение, которое находит в выходном файле нужное значение-результат. Регулярное выражение должно находить значение результат как единственную группу №1. Для составления и тестирования регулярного выражения лучше всего использовать сайт Rubular. Вам пригодится регулярное выражение для поиска чисел: [+-]?\d+\.?\d*[eE]?[+-]?\d*
Пример: чтобы найти число где-то в тексте, если известно, что слева от него через несколько пробелов слово "entropy", а справа вплотную "(sigma->0)", нужно использовать регулярное выражение:
entropy \s+ ( [+-]?\d+\.?\d*[eE]?[+-]?\d* ) \(sigma
Круглы скобки вокруг регулярного выражения поиска числа [+-]?\d+\.?\d*[eE]?[+-]?\d* означают, что число нужно вернуть как группу.
Не стесняйтесь обращаться к администратору за помощью в составлении регулярных выражений (в письме укажите пример выходного файла и число, которое в нем нужно автоматически найти).
      3. Вызвать multirun с параметрами:
   --ntasks - количество заданий, которые могут выполняться одновременно (по умолчанию: 1)
   --set - набор значений параметров. Примеры: param = 3.5, 7, 20, 123.7,... - список значений
              param = 20:0.1:50 - диапазон, задаваемый начальным значением, шагом и конечным значением
              param = 100, 200, 250:10:300, 305, 308:0.5:320, 320.1 - смешанный способ (диапазоны и отдельные значения)
              [param1; param2] = [набор1; набор2] - декартово произведение двух или более множеств. Пример:
              [atomN_coordX; atomN_coordY] = [-5:0.1:5; 0:0.5:10,15,30]
   --outfile - имя выходного файла (по умолчанию берется вывод на экран)
   --regexp - регулярное выражение для поиска в выходном файле значения-результата
   --multiline - включается ли перевод строки в обозначение произвольного символа (точка) в регулярном выражении (по умолчанию: нет)
   --cont, --no-cont - продолжать ли вычисления (по умолчанию: да)
   --depend - зависимые параметры (через ;), которые рассчитываются по заданным в --set. Пример:
                     atomN_coordZ= 20 + 3*atomN_coordX - 0.5*atomN_coordY

Пример:
multirun --set="[paramX; paramY]=[8:1:14; 8:1:14]" --outfile=OUTCAR --regexp="entropy=\s*([+-]?\d+\.?\d*[eE]?[+-]?\d*)\(sigma" --no-cont vasp-wait 1 1 4000 &

Если с помощью multirun задача считается на кластере, то вместо run-cluster нужно использовать команду run-cluster-and-wait, а вместо vasp - vasp-wait.
Команда multirun заполняет лог-файл: log_multirun.txt. Если она будет работать долго, то ее нужно вызвать в фоне (с символом & в самом конце всех аргументов) и после этого завершать работу с кластером через команду exit, а не закрытием окна терминала крестиком на окне. Убить работающую задачу можно командой rkill:  rkill   id_процесса. Узнать id процесса можно командой ps -x.