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

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

Общая характеристика кластера
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 компиляторами.

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

Установленное ПО
На кластере установлено лицензионное программное обеспечение для выполнения квантово-механических расчётов. 
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 и др.
ABINIT- метод псевдопотенциала для расчёта электронной структуры, геометрической оптимизации и молекулярной динамики периодических структур http://www.abinit.org Расчёт ведётся в обратном пространстве (зонный метод), используя разложение волновой функции по плоским волнам в рамках теории функционала плотности. Есть возможность учёта поправок LDA+U, GW, DMFT.
Quantum ESPRESSO (сайт) - пакет квантомеханических расчетов в базисе плоских волн с использованием сепарабельных сохраняющих норму (Гаманн-Шлютер-Чинг, Труллер-Мартинс и др. типов) или ультрамягких псевдопотенциалов, а также метода PAW. Предусмотрена возможность использования обменно-корреляционных функционалов различного вида: от приближения локальной плотности (LDA), до обобщенно-градиентного приближения (GGA) в
работах разных авторов. Для работы с QE существует обширная библиотека псевдопотенциалов различных атомов. Кроме того, псевдопотенциалы с необходимыми параметрами могут быть получены с использованием входящей в состав пакета программы ld1.

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

Общий набор команд для управления расчётами
run-cluster параметры "команда"   -   поставить задачу в очередь выполнения на кластере (run-cluster -h  - вывод справки)
queue   -   просмотр очереди задач
scancel JobId   -   остановить выполнение задачи
sinfo  -  информация о свободных и загруженных узлах
queueMem  -  просмотр очереди задач с информацией об используемой памяти
queueHist  -  просмотр истории задач
scontrol show job JobID  -  просмотр деталей расчёта (например, в какой папке запущен)
du -sh folderName/ - проверка объёма занимаемого дискового пространства каталогом folderName
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"

Команды запуска 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_ , позволяет увидеть список всех установленных версий

Команды запуска 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. 

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

3.4 Команды запуска ADFКоманды запуска 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 или ADF2017 необходимо в терминале поменять переменные окружения командой:
. gotoADF2016    или   . gotoADF2017
чтобы вернуться к старым переменныи окружения достаточно закрыть терминал.

Ссылка на мануал по настройке графического интерфейса для запуска задач на кластер
*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, то она не будет разбивать задачу между двумя узлами. Учтите, что иногда большие задачи вылетают и надо указывать больше оперативки.

Для запуска новой версии ADF2017 изменить run command в очереди задач ADF jobs:
bash -c "source gotoADF2017; run-cluster -n 2 -m 8000 -j $jobname '$job' --same-node"
(Сергею на будущее - не забыть про параллельную версию подправить файл start)

Команды запуска Wien2k
Инициализация расчётов проводится через web-интерфейс. Для его запуска заходим в свою учётную запись через putty. Набираем команду w2web и выбираем себе номер порта (напишу занятые для тех, кто считает Гуда = 7890(443), Кравцова = 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

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

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

Команды запуска ABINIT
run-cluster -n NCPU -l no 'abinit <tbase1_x.files>& log'

Команды запуска Quantum Espresso
рекомендую запускать расчёты на одном узле:
run-cluster -n 6 -m 10000 --same-node "pw.x -input scf.inp scf.out"
run-cluster -n 6 -m 10000 --same-node "ph.x -input ph.in ph.out"

Пакетный запуск заданий
Команда multirun позволяет для заданного набора значений параметров автоматически изменять их значения во входных файлах и параметрах программ, и запускать эти программы. Чтобы потом найти результирующие данные в выходных файлах и собрать полученные значения в таблицу result.txt, нужно использовать команду multirunCollectResults. Алгоритм использования пакетного запуска заданий:
1) Заменить изменяющиеся значения во входных файлах (или параметрах программы) на уникальные имена параметров. Например: atomN_coordX, atomN_coordY.
2) Вызвать 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]
   --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]"  --no-cont vasp-wait 1 1 4000 &
3) Составить регулярное выражение, которое находит в выходном файле нужное значение-результат. Регулярное выражение должно находить значение результат как единственную группу №1. Для составления и тестирования регулярного выражения лучше всего использовать сайт Rubular. Вам пригодится регулярное выражение для поиска чисел: [+-]?(?:\d*\.|\d+)\d*(?:[eE][+-]?\d+)?
Пример: чтобы найти число где-то в тексте, если известно, что слева от него через несколько пробелов слово "entropy", а справа вплотную "(sigma->0)", нужно использовать регулярное выражение:
entropy \s+([+-]?(?:\d*\.|\d+)\d*(?:[eE][+-]?\d+)?) \(sigma
Круглы скобки вокруг регулярного выражения поиска числа [+-]?(?:\d*\.|\d+)\d*(?:[eE][+-]?\d+)? означают, что число нужно вернуть как группу.
Не стесняйтесь обращаться к администратору за помощью в составлении регулярных выражений (в письме укажите пример выходного файла и число, которое в нем нужно автоматически найти).
4) Вызвать коллектор результатов multirunCollectResults с параметрами:
   --outfile - имя выходного файла (по умолчанию берется вывод на экран)
   --regexp - регулярное выражение для поиска в выходном файле значения-результата
   --multiline - включается ли перевод строки в обозначение произвольного символа (точка) в регулярном выражении (по умолчанию: нет)
Пример:
multirunCollectResults --outfile=OUTCAR --regexp="entropy=\s*([+-]?(?:\d*\.|\d+)\d*(?:[eE][+-]?\d+)?)\(sigma"

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