Запуск задач на кластере

При запуске задачи пользователя на счет

Запуск программ осуществляется в системе SLURM. Основные команды SLURM приведены в инструкциях ниже. Полная информация выдаётся с помощью команды man.
В результате запуска задача помещается в очередь заданий и ей присваивается уникальный идентификатор (его можно узнать командами mqinfo, mps или squeue, sacct).

На основе команд SLURM (которые начинаются с буквы s) для удобства пользователей (в частности, обеспечения преемственности при переходе на SLURM) были реализованы упрощённые команды запуска MPI-, MATLAB-, ANSYS-программ и информационные команды (начинающиеся с буквы m).


Упрощённые команды

mqrun, замена mpirun, — запуск программы на кластере, аналог команды sbatch.

mqinfo — выдача информации об узлах и очереди заданий с помощью команд sinfo и squeue ( Пример выдачи sinfo из команд mqinfo и mps).
mps или mqinfo -u $USER -l — выдача информации об узлах и задачах только самого пользователя.

mqdel,  mkill — отмена выполнения задачи (ожидающей старта или уже стартовавшей), действуют как команда scancel.

Команда mqrun (замена mpirun, аналог sbatch ) запускает в пакетном режиме успешно откомпилированную С- или Fortran-программу, например

mqrun -np 8 -maxtime 20 -stdin in.txt mytest

где для mytest затребовано формирование 8 процессов (опция -np или -n) с выделением каждому по умолчанию 1950 MB (т.е. -m 1950) и установкой входного файла (-stdin) при ограничении времени счета 20-ю минутами (–maxtime или –t). Так как не указаны опции -stdout и -stderr, то стандартными выходными файлами будут автоматически созданные mytest.1/output, mytest.1/error.
В ответ в строке вида Submitted batch job 1475 выдаётся уникальный идентификатор задачи в очереди заданий, здесь 1475. Уникальный идентификатор (JOBID) используется в командах отмены выполнения задания, например

mqdel 1475   #или mkill 1475

Внимание!
1. В каталогах вида имя_программы.номер номера возрастают, начиная с 1. Пользователь должен сам удалять ненужные каталоги.
2. Для выдачи опций mqrun следует набрать

mqrun -help

3. При необходимости можно указать опции команды sbatch в качестве значения параметра --slurm-opts команды mqrun, например:

mqrun -n 6 -nh 2 --slurm-opts '--ntasks-per-node=3 --gres=gpu:3 -x tesla[49,52]' ./test

Команды запуска SLURM

Система SLURM позволяет с помощью команд sbatch и srun работать соответственно в пакетном и интерактивном режимах. Пакетный режим является основным в работе с кластером.

Команда sbatch для запуска программы в пакетном режиме имеет вид

sbatch [опции]  <имя скрипта> [параметры скрипта]

или

sbatch [опции] --wrap="srun <имя программы>  [параметры программы]"

Команда srun для запуска интерактивной программы имеет вид

srun [опции] <имя программы> [параметры программы]

Внимание! Библиотека OpenMPI работает только с командой sbatch и при этом перед именем программы вместо srun добавляется orterun:

sbatch [опции] --wrap="orterun <имя программы>  [параметры программы]"

Опции:

  • -n <число процессов> если число процессов (tasks) не задано, то по умолчанию n=1.

  • -t <время> при отсутствии заказа времени для решения задачи выделяется по умолчанию 30 минут. Максимальное время для счета задачи:

    • 20 часов - в будние дни (с 9 часов понедельника до 16 часов пятницы);
    • 85 часов - на выходные (с 16 часов пятницы до 9 часов понедельника плюс 20 часов), т.е. на 85 часов задача запустится, если она войдет в решение в 16 часов ближайшей пятницы, иначе будет ждать следующей; аналогично, на 84 часа есть шанс запустить до 17 часов пятницы и т.д. до 9 часов понедельника;
    • 100 часов - если к выходным добавляются праздничные дни.

    Время может быть задано в виде:

    • минуты
    • минуты:секунды
    • часы:минуты:секунды
    • дни-часы
    • дни-часы:минуты
    • дни-часы:минуты:секунды
  • -N <кол-во узлов> задает число узлов (nodes) для задачи, если пользователю это важно.

    Для увеличения оперативной памяти можно воспользоваться опциями:

  • --mem-per-cpu=<MB> задаёт минимальную память в расчёте на одно ядро в мегабайтах ; если не задано, то по умолчанию 1 ГБ;
  • --mem=<MB> задаёт память на узле в мегабайтах.
    Эти опции взаимно исключают друг друга.

  • --gres=gpu:<кол-во GPU на одном узле> задаёт запуск программы на узлах с GPU. Если gres не задан, то количество GPU=0, т.е. GPU при счете не используются.

  • -p <раздел> или --partition=<раздел> позволяет указать раздел (partition) кластера для запуска задачи.
    Существует 4 основных раздела: apollo, umt_p2, all и debug, которые покрывают весь кластер и взаимно не пересекаются, т.е. содержат разные узлы (см. Кластер «Уран»). Список всех разделов выдается командой sinfo -s. Если раздел не задан пользователем явно, то по умолчанию будет выбран раздел apollo, но при отсутствии в нем нужного числа свободных процессоров будут задействованы разделы umt_p2 и all.
    -p debug позволяет запускать задачи в специально выделенном для отладки программ разделе debug с максимальным временем счета 20 минут. Например, srun -p debug mytest

    Опции -w, -x, -С позволяют более гибко регулировать список узлов, допустимых для запуска задачи (см. man sbatch), например:

  • -w tesla[5-7,15] - выделить заданию ресурсы узлов tesla5, tesla6, tesla7, tesla15, а если на них не хватит, то и другие узлы;

  • -x tesla22 - не выделять заданию ресурсы узла tesla22;
  • -С k40m - выделять задаче только те узлы, которые имеют ресурс с именем (Feature), указанным после -C. На кластере имеются ресурсы с именами umt, tesla, bigmem, m2090, k40m.
    Информацию о том, какие ресурсы есть на конкретном узле, можно получить командой вида scontrol show node tesla22.

По умолчанию стандартный вывод пакетной задачи и стандартный поток ошибок направляются в файл с именем slurm-%j.out, где %j заменяется уникальным идентификатором (номером) задачи. Перенаправление ввода-вывода можно выполнить, указав программе sbatch опции

  • --input=<filename pattern>
  • --output=<filename pattern>
  • --error=<filename pattern>

При задании имени файла (filename pattern) можно использовать символы замены, в частности, %j заменяется на JobID, %t - на номер процесса в рамках задания. Таким образом file_%j_%t.txt при каждом запуске задачи сгенерирует уникальные имена для каждого процесса.

Выдаваемые результаты конкретной команды srun можно поместить вместо стандартного в указанный файл, добавив после команды символ перенаправления вывода >.

srun mytest > out_mytest &

Можно (чаще, при интерактивном запуске) параллельно просматривать результаты и сохранять их в файле, например:

srun --mem 40000 mytest | tee out_mytest

Описание всех опций и примеры команд можно посмотреть в руководстве man с помощью команд:

man sbatch
man srun

Примеры запуска.

В результате интерактивного запуска программы hostname выдаётся имя узла, на котором запущен соответствующий процесс, например:

u9999@umt:~$> srun hostname 
apollo5

При запуске в пакетном режиме команда запуска программы задаётся либо в скрипте, либо через опцию --wrap, например,

sbatch -n 2 --wrap="srun hostname"

или

sbatch mybat

где скрипт mybat:

#!/bin/sh
#SBATCH -n 2
srun  hostname &;
wait

Внимание!

  • Команда srun внутри скрипта может запрашивать ресурсы только в тех пределах, которые установлены командой sbatch.
  • Скрипт запускается только на первом из выделенных узлов.
  • Запуск нескольких процессов осуществляется командой srun. При этом все опции, указанные в командной строке или самом скрипте в строках #SBATCH, приписываются к каждой команде srun данного скрипта, если не переопределены в ней. Так, результирующий файл приведённого примера будет содержать 2 строки с именами узлов (возможно, одинаковых), на которых выполнятся 2 процесса задачи, сформированные командой srun.
  • Если команды srun запускаются в фоновом режиме (символ & в конце строки), то они при наличии ресурсов могут выполняться одновременно.

Примеры постановки задач в очередь.

u9999@umt:~$ sbatch  -n 3 --wrap="srun mytest1 3 5.1"
Submitted batch job 776

сформирована пакетная задача с запуском 3-х процессов mytest1 c 2-мя параметрами. Задаче присвоен уникальный идентификатор 776.

u9999@umt:~$ srun -N 2 sleep 30 &
[1] 22313

сформирована интерактивная задача в фоновом режиме. [1] - номер фоновой задачи в текущем сеансе, 22313 - pid процесса srun на управляющей машине. Уникальный идентификатор можно узнать с помощью команд squeue, sacct.

Просмотр информации о кластере

squeue sacct sinfo scontrol характеристики GPU

squeue — просмотр очереди (информации о задачах, находящихся в счете или в очереди на счет); возможно использование ключей, например:

squeue --user=`whoami`   # посмотреть только свои задачи;
squeue --states=RUNNING  # посмотреть считающиеся задачи;
squeue --long            # выдать более подробную информацию.

Пример

u9999@umt:~$ srun -N 2 sleep 30 &
[1] 22313
u9999@umt:~$ squeue
  JOBID PARTITION     NAME     USER    ST    TIME  NODES NODELIST(REASON)
  777   all           sleep    u9999   R     0:23  2     umt[10,15] 
  • JOBID — уникальный идентификатор задачи; никогда не используется повторно ;
  • PARTITION — название раздела, где считается задача;
  • NAME — имя задачи пользователя;
  • USER — логин пользователя;
  • ST — состояние задачи
    • R - выполняется,
    • PD - в очереди;
  • TIME — текущее время счета;
  • NODES — количество узлов для задачи;
  • NODELIST(REASON) — список выделенных узлов.

sacct — просмотр задач текущего пользователя за сутки (с начала текущего дня); возможно использование ключей, например:

sacct -u u9999 --starttime 2019-01-01     # посмотреть все задачи пользователя u9999 с начала года.

Пример

u9999@umt:~$ sacct
JobID       JobName     Partition     AllocCPUS    State           ExitCode
---------   ----------  ----------    ------------ -------------   --------
522             sbatch      tesla         2            COMPLETED       0:0
522.batch       batch                     1            COMPLETED       0:0
777             sleep       all           2            CANCELLED+      0:0
780             sbatch      tesla         2            FAILED          0:0
780.batch       batch                     1            FAILED        127:0
783             sleep       tesla         2            RUNNING         0:0
  • JobID — уникальный идентификатор задачи, повторно не используется;
  • JobName — имя задачи пользователя;
  • Partition — название раздела, где считается задача;
  • State — состояние задачи:
    • RUNNING — выполняется,
    • PENDING — ждёт в очереди,
    • COMPLETED — закончилась,
    • FAILED — закончилась по ошибке,
    • CANCELLED+ — снята пользователем;
  • ExitCode — код возврата.

sinfo — просмотр информации об узлах (прежде всего, о состоянии узлов: доступны, заняты, свободны, ...); возможно использование ключей, например:

sinfo -s  # выдача суммарной информации о разделах кластера без детализации по узлам. 

Пример

u9999@umt:~$ sinfo 
PARTITION   AVAIL  TIMELIMIT  NODES   STATE   NODELIST 
umt*        up      8:00:00       4   down*   umt[59,92,139,201] 
umt*        up      8:00:00     203   idle    umt[1-58,60-91,93-118,120-138,140-200,202-208] 
umt*        up      8:00:00       1   down    umt119 
tesla       up      8:00:00       1   alloc   tesla2 
tesla       up      8:00:00      18   idle    tesla[3-20] 
tesla       up      8:00:00       1   down    tesla1
  • PARTITION — название раздела, где считаются задачи,
    * - указывает на раздел по умолчанию;
  • AVAIL — состояние раздела узлов: up - есть доступ, down - нет доступа;
  • TIMELIMIT — максимальное время, выделяемое для счета задачи;
  • NODES — количество узлов;
  • STATE — состояние (в сокращённой форме):
    • idle - свободен,
    • alloc - используется процессом,
    • mix - частично занят, частично свободен,
    • down, drain, drng - заблокирован,
    • comp - все задания, связанные с этим узлом, находятся в процессе завершения;
    • * - обозначает узлы, которые в настоящее время не отвечают (not responding);
  • NODELIST — список узлов.

Пример выдачи sinfo из команд mqinfo и mps:

PARTITION  SOCKET CORE CPU THREAD GRES     TIMELIMIT   CPUS(A/I/O/T)
umt        2      4    8   1               20:00:00    1203/53/408/1664
tesla      2      6    12  1      gpu:8    infinite    322/2/36/360
all*       2      4+   8+  1               20:00:00    1525/55/444/2024
  • PARTITION — название раздела: umt, tesla, all; * отмечен раздел по умолчанию;
  • SOCKET — число процессоров на узле;
  • CORE — число ядер в процессоре;
  • CPU — число ядер на узле;
  • THREAD — число нитей на ядро;
  • GRES — число общих для узла ресурсов, где gpu - графический ускоритель;
  • TIMELIMIT — максимальное время, выделяемое для счета задачи;
  • CPUS(A/I/O/T) — число ядер:
    • A (alloc) - заняты,
    • I (idle) - свободны,
    • O (other) - заблокированы,
    • T (total) - всего.

scontrol — выдача детальной информации об узлах, разделах, задачах:

scontrol show node tesla34  # информация об узле,    
                              в частности, причине состояния drain, down;
scontrol show partition     # о разделах;
scontrol show job 174457    # о задаче.

Информацию о технических характеристиках GPU выдает программа nvidia-smi:

srun --gres=gpu:1 nvidia-smi

Опция вида -w tesla21 позволяет выдать эту информацию для конкретного узла, например:

u9999@umt:~$ srun -w tesla21 --gres=gpu:1 nvidia-smi
Fri Jun 14 17:15:57 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.46                 Driver Version: 390.46                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla M2090         On   | 00000000:09:00.0 Off |                  Off |
| N/A   N/A   P12    28W /  N/A |      0MiB /  6067MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla M2090         On   | 00000000:0A:00.0 Off |                  Off |
| N/A   N/A   P12    27W /  N/A |      0MiB /  6067MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  Tesla M2090         On   | 00000000:0D:00.0 Off |                  Off |
| N/A   N/A   P12    28W /  N/A |      0MiB /  6067MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   7  Tesla M2090         On   | 00000000:33:00.0 Off |                  Off |
| N/A   N/A   P12    28W /  N/A |      0MiB /  6067MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

Дополнительная информация о характеристиках GPU доступна с помощью программы pgaccelinfo (входит в поставку компилятора PGI). Для получения информации о конкретном узле, используя опцию -w, следует набрать:

u9999@umt:~$ mpiset 7  
u9999@umt:~$ srun -w tesla21 --gres=gpu:1 pgaccelinfo

Удаление задач из очереди

При запуске на кластере задача попадает в очередь заданий и ей присваивается уникальный идентификатор (ID). Для отмены выполнения задачи (ожидающей счета или уже стартовавшей) служит команда scancel:

scancel 565 345         # убрать из очереди задачи с указанными ID;
scancel -u u9999        # убрать из очереди  все задачи пользователя u9999;
scancel --state=PENDING -u u9999 # убрать из очереди  ожидающие запуска задачи пользователя u9999.

CTRL+C— снимает интерактивную задачу без фонового режима.

Пример. Снятие интерактивной задачи, запущенной в фоновом режиме.

u9999@umt:~$ srun -p tesla -N 2 sleep 1h &
[1] 13847
u9999@umt:~$ mps
PARTITION  SOCKET CORE CPU THREAD GRES  TIMELIMIT CPUS(A/I/O/T)
umt        2      4    8   1            20:00:00       0/0/768/768
umt_p2     2      4    8   1            20:00:00       0/0/512/512
tesla      2      6+   12+ 1      gpu:8 20:00:00     234/2/12/248
...
 JOBID   PARTI  NAME   USER   STAT   TIME  TIME_LIMI NODES NODELIST(REASON)
7650963  tesla  sleep  u9999  RUNN   0:21      30:00     2 tesla[2,4]

Завершаем задачу:
u9999@umt:~$ scancel 7650963
srun: Force Terminated job 7650963
u9999@umt:~$ srun: Job step aborted: Waiting up to 32 seconds for job step to finish.
slurmstepd: error: *** STEP 7650963.0 ON tesla2 CANCELLED AT 2019-08-20T12:59:13 ***
srun: error: tesla4: task 1: Terminated
srun: error: tesla2: task 0: Terminated

Надо нажать   Enter

[1]+  Exit 143                  srun -p tesla -N 2 sleep 1h
u9999@umt:~$ mps
PARTITION  SOCKET CORE CPU THREAD GRES  TIMELIMIT CPUS(A/I/O/T)
umt        2      4    8   ...
 JOBID   PARTI  NAME   USER   STAT   TIME  TIME_LIMI NODES NODELIST(REASON)
u9999@umt:~$ 

Ограничения по ресурсам

1. Размер дисковой квоты для пользователей ограничен 100 GB.
Уточнить размер квоты и места на диске, занимаемого пользователем, можно с помощью команд quotacheck и du (см. инструкцию Базовые команды ОС UNIX).
Внимание! Возможно появление ошибок при запуске задач, если квота дискового пространства исчерпана. Рекомендуется удалять ненужные файлы, а нужные результаты переписывать на свою машину. Так будет надежнее, т.к. гарантии сохранности файлов на кластере нет.

2. Одновременно считающиеся задачи пользователя могут занимать до 1024 CPU (вычислительных ядер).

3. Максимальное время, выделяемое для счета задачи:
20 часов - в будние дни,
85 часов - на выходные,
100 часов - на выходные с праздниками.
Если пользователь не закажет время, то по умолчанию для решения задачи будет выделено 30 минут. (Подробнее в инструкции Команды запуска SLURM) .

Замечание.
Дополнительная информация об ограничениях может выдаваться при входе на кластер.

Учёт источника финансирования

В системе SLURM предусмотрено деление пользователей на учётные группы (account). Каждая учётная группа - это совокупность пользователей, работающих над одним проектом. На основе активности учётной группы определяются приоритеты для всех её членов. Затраты машинного времени членов учётной группы автоматически суммируются в статистике.

С 2019 года в СКЦ ИММ УрО РАН введены учётные группы на основе источников финансирования, указанных в заявках и договорах. Такое деление позволяет уравнять приоритеты организаций, которые подали в заявках информацию об одном-двух пользователях суперкомпьютера, с группами, которые включают большое количество пользователей.

Пользователь может состоять в нескольких учётных группах и запускать задачи от их имени. Одна учётная группа пользователя считается группой по умолчанию и используется в тех случаях, когда пользователь не указывает явно группу при запуске задачи.

Для смены учётной группы, используемой по умолчанию, можно выполнить команду macctmgr. Для указания учётной группы в командах srun и sbatch используйте опцию -A <имя_группы>.

Просмотр учётных групп производится командой sacctmgr, просмотр статистики работы - командой sreport.

Просмотр списка учётных групп

 $ sacctmgr show -s user u9999 format=user,defaultaccount%30,account%30,qos
      User                       Def Acct                        Account                  QOS
---------- ------------------------------ ------------------------------ --------------------
     u9999                     imm-2019-1                     2019-99-19           restricted
     u9999                     imm-2019-1                     imm-2019-2               normal
     u9999                     imm-2019-1                     imm-2019-1               normal
  • u9999 - имя пользователя.
  • -s указывает, что надо выдать связанные с пользователем учётные группы
  • format= задает список полей (и их ширину через %)

В данном случае, пользователь u9999 входит в три учетные группы - 2019-99-19, imm-2019-1, imm-2019-2. По умолчанию используется группа imm-2019-1.

Поле QOS (quality of service) описывает ограничения, накладываемые на сочетание пользователь + учётная группа. normal - обычные ограничения, restricted - запуск задач запрещён.

Запуск от имени учетной группы

Явно указать учётную группу при запуске через srun или sbatch можно с помощью опции-A или --account=

srun --account=2019-99-19 myprog
srun -A 2019-99-19 myprog

Просмотр описания учётной группы

$ sacctmgr show account  imm-2019-1 format=account%15,description%30,organization
        Account                          Descr    Org
--------------- ------------------------------ ------
     imm-2019-1   АААА-А19-999999999999-1         imm

В поле description вносится описание учётной группы, как правило в виде номера регистрации проекта в РосРИД или номера договора с ИММ УрО РАН.

Просмотр статистики по пользователю за вчерашний день

$ sreport cluster AccountUtilizationByUser user=u9999
Usage reported in CPU Minutes
----------------------------------------------------------------
  Cluster     Account  Login   Proper Name     Used       Energy
--------- ----------- ------   --------------- -------- --------
      umt  imm-2019-2  u9999   TestUse+            9437        0
      umt  imm-2019-1  u9999   TestUse+            4442        0

В отчёт попадают только реально использовавшиеся группы.

Просмотр статистики по учётной группе за определённый срок

$ sreport cluster AccountUtilizationByAccount start=2019-01-01 end=2019-06-01 account=imm-2019-1
--------------------------------------------------------------------------------
Usage reported in CPU Minutes
--------------------------------------------------------------------------------
  Cluster     Account  Login Proper Name       Used   Energy
--------- ----------- ------ ------------ ---------- --------
      umt  imm-2019-1                       27411385        0
      umt  imm-2019-1  u9990  User1              266        0
      umt  imm-2019-1  u9991  User2          6098924        0
      umt  imm-2019-1  u9992  User3          7431731        0
      umt  imm-2019-1  u9999  User4         13880463        0

Выбор версии MPI и компилятора

Для выбора компиляторов, библиотек обмена сообщениями и пакетов прикладных программ, необходимых для работы программы пользователя, используются модули установки переменных окружения.

Команда mpiset позволяет выбрать модуль из списка основных модулей, задающих компилятор и версию библиотеки MPI.

Команда mpiset без параметров выдает пронумерованый список доступных вариантов. Строка, помеченная словом active, указывает на текущие настройки.

Для смены модуля (библиотеки MPI, компилятора) необходимо выполнить команду

mpiset <n>

где <n> – номер варианта настроек для данного кластера.

Пример. Список основных вариантов настроек, полученный в начале сеанса 28.12.2016 командой mpiset на кластере "Уран":

active  1       MVAPICH2 Intel 14.0, mvapich2/intel64
        2       OpenMPI Intel 11.1, openmpi/intel64
        3       OpenMPI 32bit GCC 4.4, openmpi/gcc32 
        4       OpenMPI 32bit Intel 14.0, openmpi/intel32
        5       OpenMPI GCC v4.4, openmpi/gcc64
        6       OpenMPI v1.10 GCC 4.8, openmpi/gcc64_1.10
        7       MVAPICH2 2.1 PGI 16.5, mvapich2/pgi_16.5

Команда module - выбор окружения для решения задачи

При работе на кластере можно использовать различные компиляторы, библиотеки обмена сообщениями и пакеты прикладных программ (приложения), поэтому пользователь должен определить среду для решения своей задачи, выбрав нужное программное обеспечение. Выбор определяется модулем установки переменных окружения, требуемых для работы программы. Названия модулей содержат имена компиляторов, библиотек, пакетов, номера версий. Например, при загрузке модуля openmpi/intel64 программа пользователя будет откомпилирована 64-разрядным компилятором intel с библиотекой openmpi.

Список загруженных на настоящий момент модулей можно выдать с помощью команды module list. Сервисная команда mpiset служит для быстрой смены модуля, задающего компилятор и версию библиотеки MPI.

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

Пример. Список модулей, доступных на кластере umt на 01.07.2011, выданный с помощью команды module avail

OpenFoam/1.7.x        matlab/R2010b     openmpi/gcc64                         
dvm/current           mpi/default       openmpi/intel64
firefly/71g-openmpi   music/4.0         paraview/3.10
matlab/R2010a         mvapich2/intel64  towhee/6.2.15

В целом, работа с модулями обеспечивается командой module.

  • module avail - вывод на экран списка доступных модулей;
  • module list - вывод на экран списка загруженных (на данный момент) модулей;
  • module show <имя модуля из списка> - вывод на экран полного имени файла с описанием команд изменения окружения, выполняемых при загрузке модуля;
  • module whatis <имя модуля из списка> - вывод на экран комментария к модулю;
  • module whatis - вывод на экран списка модулей с комментариями;

  • module load <имя модуля из списка> - загрузка модуля; после выполнения данной команды (из командной строки или конфигурационного файла) среда исполнения будет настроена на использование программного обеспечения, соответствующего указанному модулю;

  • module unload <имя загруженного модуля> - выгрузка модуля отменит настройки переменных окружения, задаваемых данным модулем;
  • module switch <имя загруженного модуля> <имя модуля> - замена загруженного модуля (первого) на указанный модуль (второй);
  • module clear - выгрузка всех загруженных на текущий момент модулей.

Внимание!

  1. Настройка с помощью команд mpiset или module имеет силу на текущий сеанс работы на кластере.
  2. Для того, чтобы не настраивать заново в начале каждого сеанса работы среду исполнения для решения своей задачи, можно нужные настройки сохранить в файле $HOME/.bash_profile пользователя, используя следующие команды:
  • module initadd <имя модуля из списка доступных> - меняет $HOME/.bash_profile, загружая указанный модуль для следующих сеансов работы;
  • module initlist - выдаёт список загруженных в $HOME/.bash_profile модулей для следующих сеансов работы;
  • module initclear - чистит $HOME/.bash_profile, оставляя лишь модуль null, который не содержит никаких настроек.

Компиляция и запуск приложений с OpenMP

OpenMP подключается опцией, соответствующей установленному компиляторy:

gcc/gfortran                  -fopenmp           GNU
icc/ifort                     -openmp            Intel (по умолчанию на umt)
pgcc/pgCC/pgf77/pgfortran     -mp                PGI

Так, компиляция файла exam.c на umt компилятором Intel (с учетом умолчания) выполняется командой

icc -openmp exam_omp.c -o exam_omp

или командой

mpicc -openmp exam_omp.c -o exam_omp

Число параллельных нитей OpenMP задается с помощью переменной окружения OMP_NUM_THREADS. Как правило, она устанавливается перед запуском программы из командной строки командой вида

export OMP_NUM_THREADS=8

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

При запуске приложения пользователю необходимо указать число ядер (cpus) для каждого из процессов (task) с помощью опции --cpus-per-task=<ncpus>. При этом система предоставляет узел для процесса, если на нем имеется указанное число свободных ядер. Максимальное число ядер, равное 36, содержат узлы раздела apollo (см. Кластер "Уран"). Пусть задано export OMP_NUM_THREADS=12, тогда в результате выполнения команды интерактивного запуска

srun --cpus-per-task=6 exam_omp > exam_omp.out

одному (n=1 по умолчанию) процессу (task), т.е. задаче, пользователя будет выделено 6 ядер на узле и при вычислениях будет задействовано 12 нитей; результаты вычислений будут записаны в указанный пользователем файл exam_omp.out.

Если программе нужен запуск на узле с большим объёмом оперативной памяти, то надо добавить опцию --mem=<MB>, где <MB> - требуемый объём памяти на узле. Например, команда

srun  --mem=48G  --cpus-per-task=12  exam_omp  > exam_omp.out

запустит один процесс на узле с оперативной памятью не меньшей, чем 48 GB (о типах узлов см. Кластер "Уран"). Для заказа памяти из расчета на одно ядро используется опция --mem-per-cpu=<MB>, например,

srun  --mem-per-cpu=4G  --cpus-per-task=12  exam_omp  > exam_omp.out

В пакетном режиме соответствующий запуск может выглядеть так:

sbatch  --mem-per-cpu=4G  --cpus-per-task=12 mybat_omp

где файл mybat_omp содержит строки

#!/bin/sh
srun exam_omp  > exam_omp.out

В качестве примера программы с OpenMP можно использовать pi_omp.c.

Возможен запуск гибридных MPI/OpenMP приложений с помощью опции --ntasks-per-node=<ntasks>, где <ntasks> - число процессов на узле. Например, для запуска на двух 36-ядерных узлах 6 процессов с 12 нитями каждый можно выполнить команду:

sbatch -N 2 --cpus-per-task=12 --ntasks-per-node=3  my_bat_omp

Запуск параллельного Matlab

ИММ УрО РАН предоставляет пользователям системы Matlab (Матлаб) возможность организации параллельных вычислений на кластере "Уран".
Подробная информация представлена в полной инструкции "Параллельный Matlab".
Число лицензий для вычислений на кластере в настоящее время равно 1000.
Запускать программы на кластере можно из командной строки или из системы Matlab. Для этого на своем компьютере следует установить программу PuTTY и какой-нибудь X-сервер.

Параллельные вычисления на кластере инициируются
1) запуском параллельных програм;
2) запуском частично параллельных программ (c parfor или spmd);
3) запуском программ с использованием GPU.

Программа пользователя должна быть оформлена как функция (не скрипт) и находиться в начале одноименного файла.
Файл должен иметь расширение "m"(например, my_function.m).

При запуске программы-функции указывается необходимое для счета число параллельных процессов и максимальное время выполнения в минутах.

Запуск программ на кластере из командной строки осуществляется с помощью команд:
mlrun - для параллельных программ, например,

mlrun -np 8 -maxtime 20 my_parfunction

где 8 - число копий функции my_parfunction, 20 - максимальное время счета в минутах;

mlprun - для частично параллельных программ (с parfor или spmd), например,

mlprun -np 8 -maxtime 20 my_poolfunction

где один процесс будет выполнять программу-функцию, а оставшиеся 7 будут использованы в качестве пула для выполнения parfor и spmd;

mlgrun - для программ с использованием GPU, например,

mlgrun -np 8 -maxtime 20 my_gpufunction

где 8 - число процессов (копий функции), каждый из которых может использовать свое GPU.

Запуск программ на кластере из окна системы Matlab осуществляется с помощью соответствующих служебных функций:
imm_sch - для параллельных программ, например,

job1 = imm_sch(8,20,@my_parfunction);

imm_sch_pool - для частично параллельных программ (с parfor или spmd), например,

job2 = imm_sch_pool(8,20,@my_poolfunction);

imm_sch_gpu - для программ с использованием GPU, например,

job3 = imm_sch_gpu(8,20,@my_gpufunction);

В приведенных командах запускаются функции без параметров с использованием 8 процессов, 20 минут - максимальное время счета;
job1, job2, job3 - ссылки на созданные системой Matlab объекты Job (работа). Имя функции можно набрать с символом "@" или в кавычках.

Пример. Для функции с параметрами, например rand, вызываемой для генерации 2х3 матрицы случайных чисел с числом процессов 4 и максимальным временем счета 5 минут, следует соответственно набрать в командной строке

mlrun -np 4 -maxtime 5 rand '1,{2,3}'

или в окне Matlab

job = imm_sch(4,5,@rand,1,{2,3});

Подробнее в Параллельный Matlab/Запуск параллельной программы/Развернутый пример запуска.

В результате запуска программа ставится в очередь на счет и, если ресурсов кластера достаточно, входит в решение.

Пользователь может контролировать прохождение своей программы через систему запуска как в окне системы Matlab (с версии R2011b) с помощью Job Monitor (см. пункт меню Parallel), так и из командной строки с помощью команд системы запуска.

Запуск программ из пакета ANSYS

ANSYS - это программный пакет конечно-элементного анализа, решающий задачи в различных областях инженерной деятельности (прочность конструкций, термодинамика, механика жидкостей и газов, электромагнетизм), включая связанные многодисциплинарные задачи (термопрочность, магнитоупругость и т.п).
ANSYS CFX, ANSYS Fluent – самостоятельные программные продукты от ANSYS,Inc., предназначенные для решения стационарных и нестационарных задач механики жидкостей и газов.

/common/runmvs/bin/ansysrun в настоящее время используется для запуска ansys145, cfx5solve и fluent.
Вызов ansysrun без параметров выдает краткую информацию об использовании.

Внимание!
Команды настройки переменных окружения содержатся в файле /common/runmvs/conf/ansys_env.sh, поэтому строка

. /common/runmvs/conf/ansys_env.sh

должна быть в ~/.bashrc.

При отсутствии этой строки выдается диагностика и постановки задания в очередь не происходит.

Примеры.

Запуск ansys145 с 12-ю процессами на 60 минут для выполнения ANSYS-скрипта ansys_s1:

ansysrun -np 12 -maxtime 60 -stdin ansys_s1 ansys145

Запуск на 30 минут ansys145 с 8-ю процессами и использованием GPU с соответствующим увеличением памяти до 3 ГБ (на один процесс) для выполнения ANSYS-скрипта ansys_s2:

ansysrun -np 8 -gpu 8 -m 3G -maxtime 30 -stdin ansys_s2 ansys145

Запуск cfx5solve по 6 (=np/nh) процессов на двух узлах на 100 минут для выполнения bench.def (def-файл ANSYS):

ansysrun -np 12 -nh 2 -maxtime 100 cfx5solve -def bench.def 

Запуск fluent c 16 процессами на 400 минут для выполнения my.cav (cav-файл ANSYS) с дополнительным параметром 3ddp:

ansysrun -np 16 -maxtime 400 fluent 3ddp -i my.cav