Швидкий старт

Ця коротка документація показує як запустити на кластері типову програму, що написана на мовах C, C++ або Fortran та використовує MPI.

УВАГА! Обов'язково прочитайте повний варіант документації!

Щоб запустити задачу на кластері необхідно:

  1. Завантажити вихідний код програми та вхідні дані на кластер.

  2. Обрати та завантажити модулі середовища: компілятор, реалізацію MPI, додаткові бібліотеки (якщо потрібні).

  3. Скомпілювати програму.

  4. Створити скрипт запуску програми.

  5. Додати задачу в чергу виконання.

Завантаження вихідних кодів та даних на кластер

Для цього використовуються програми PuTTY та pscp або WinSCP якщо у вас встановлена ОС Windows, або програми ssh, scp та sftp якщо у вас встановлена ОС Linux.

Рекомендується створювати окремі каталоги для різних програм. Наприклад, якщо ваш логін user та ви хочете створити каталог example, виконайте команду mkdir (англ. Make Directory):

[user@n001 ~]$ mkdir /home/user/example

Завантажте у створений каталог вихідні коди програми.

Перейдіть у створений каталог командою cd (англ. Change Directory):

[user@n001 ~]$ cd /home/user/example

Вибір та завантаження модулей середовища

На кластері встановлено декілька різних компіляторів мов C, C++, Fortran, декілька реалізацій MPI, декілька реалізацій мов Java та Python, та інші програмні компоненти. Звичайно, ви не можете одночасно використовувати дві різні реалізації MPI. Тому для того, щоб користувачі мали можливість використовувати різні програмні компоненти, на кластері НТУУ "КПІ" використовується система модулей середовища.

Модуль середовища -- це програмний компонент, наприклад компілятор чи реалізація MPI. Для управління модулями середовища використовується команда module. Всі дії команди module розповсюджуються тільки на поточний сеанс роботи з кластером. Після завершення сеансу всі зміни забуваються.

Відразу після початку нового сеансу роботи з кластером в ваше середовище завантажено тільки системний модуль HPCC та модуль системи управління ресурсами SLURM:

[user@n001 ~]$ module list
Currently Loaded Modulefiles:
  1) HPCC/1        2) SLURM/2.6.0

Зараз вам не доступний навіть компілятор:

[user@n001 ~]$ cc
bash: cc: command not found

[user@n001 ~]$ gcc
bash: gcc: command not found

Для того щоб отримати типовий набір програм, завантажте модуль середовища cgmvolf 1.1.12rc1, що включає Clang 3.2, GFortran 4.7.3, MVAPICH2 1.9rc1, та деякі інші бібліотеки:

[user@n001 ~]$ module load cgmvolf/1.1.12rc1

Зауважте, що під завантаженням модуля середовища слід розуміти підключення програмних компонентів, які вже встановлені на кластері. Вам не потрібно самостійно завантажувати будь-які програми з локального комп'ютера або з інтернету.

Після завантаження модуля cgmvolf можна перевірити, що компілятор Clang став доступний:

[user@n001 ~]$ clang --version
clang version 3.2 (tags/RELEASE_32/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix

УВАГА! Набір програм cgmvolf є лише однією із можливих комбінацій компілятор + MPI. Ваші програми можуть праціювати краще з іншими компіляторами або реалізаціями MPI, що встановлені на кластері. Прочитайте повну документацію та робіть свідомий вибір. Нажаль, для різних програм оптимальна комбінація різна. Можливо вам варто спробувати різні варіанти та експериментально виявити, який варіант краще для вашої програми.

Компіляція програми

Якщо програма написана стороннім розробником, разом з програмою можуть поставлятись інструкції для компіляції.

Програми на мові C, що написані з використанням MPI, компілюються наступним чином:

[user@n001 example]$ mpicc -W -Wall -O2 -std=c99 ім'я_файлу_1.c ім'я_файлу_2.c ... -o program

Де ім'я_файлу_1.c, ім'я_файлу_2.c -- імена всіх файлів, що входять до складу програми; program -- ім'я для виконуваного файлу програми, що створить компілятор.

Не забудьте перейти в каталог з вихідними кодами перед компіляцією.

Якщо програма написана на мові C++, необхідно використовувати компілятор mpic++.

Для програм на мові Fortran слід використовувати компілятори mpif77 чи mpif90.

Створення скрипту запуску програми

Створіть файл job.slurm в каталозі /home/user/example з наступним текстом:

#!/bin/bash -l
#SBATCH -J example
#SBATCH -o example.out.%j
#SBATCH -e example.out.%j
#SBATCH -n 8
#SBATCH -p debug
#SBATCH --qos=ku-debug
#SBATCH -t 00:05:00

set -x
set -e
module list 2>&1

mpirun ./a.out

Обов'язково передавайте командному інтерпретатору опцію -l в першому рядку, інакше система модулів середовища буде працювати некоректно.

УВАГА! Не слід передавати команді mpirun чи mpiexec параметр -n або -np для того, щоб вказати кількість ядер. OpenMPI та MVAPICH2 інтегровано з системою управління ресурсами SLURM, і ця інформація буде передана автоматично.

Рядки, що починаються з #SLURM є коментарями для командного інтерпретатора. Вони задають параметри запуску задачі. Ці параметри описані в man-сторінці sbatch:

[user@n001 ~]$ man sbatch

Найважливіші параметри:

  • -J example -- задає ім'я задачі. Не є обов'язковим, але допомагає відрізнити задачі в черзі одна від одної.

  • -o example.out.%j та -e example.out.%j -- задають імена файлів для збереження виводу та помилок програми (імена можуть бути однаковими чи різними). Текст %j буде замінено на номер задачі. Цей параметр не є обов'язковим, за замовчуванням буде створено файл з іменем, що починається на slurm.

  • -n 8 -- задає кількість ядер.

Інші параметри описані в повному варіанті документації.

Після рядків #SBATCH задаються команди запуску вашої програми. Ці команди буде запущено в тому каталозі, з якого задача була додана в чергу. Щоб явно задати робочий каталог, додайте на початку команду типу cd /home/user/example. Також можете додати команди завантаження модулів середовища.

Додайте задачу в чергу:

[user@n001 example]$ sbatch job.slurm
Submitted batch job 88

88 -- номер вашої задачі.

Користуйтесь командою squeue для перегляду статусу вашої задачі. Формат виводу описаний в повній документації.

Після завершення задачі продивіться файли виводу (example.out.%j) і файли результатів, які сформувала ваша програма.