Добро пожаловать на Ekman!
Инструкция по использованию вычислительного кластера Ekman (ИО им. П.П. Ширшова РАН )

1. Описание

Вычислительный кластер Ekman ИОРАН состоит из 5 партиций: rack1, broadwellr2, r2c2, knl и gpu. Каждая партиция состоит из идентичных вычислительных узлов (одинаковые процессоры, количество оперативной памяти и т.д.). В таблице ниже представлены конфигурации каждой партиции.

Партиция Модель процессора Ядер
на узел
Всего
узлов
Всего
ядер
RAM
на ядро
rack1 Intel Platinum 8368Q 76 17 1292 3.4G
broadwellr2 Intel Xeon E5-2697A v4 32 15 480 8G
knl Intel Phi CPU 7290 72 2 144 1.3G
r2c2 Intel Xeon Gold 6248R 48 15 720 4G
gpu NVIDIA H100 Gen5, 80G 14592 2 карты 29184 5.6M

⚠️ Объединять партиции невозможно, т.е. одну задачу можно отправить только на одну партицию.

2. Доступ на Ekman

Доступ предоставляется только по протоколу ssh. Адрес точки входа: sail.msk.ru, порт 2240. Для пользователей Linux или MacOS команда в терминале будет выглядеть примерно вот так:

ssh -X USERNAME@sail.msk.ru -p 2240

где USERNAME – это полученное от системного администратора имя вашего пользователя.

3. Общие правила

3.1 Хранение данных

На кластере есть 2 основные системы хранения: /storage/ekman (267T, SAS диски) и /storage/scratch (27T, SSD диски). Вторая система более производительна, однако, из-за ограничения в объеме, данные старше чем три месяца безвозвратно удаляются автоматическим скриптом.

Для достижения максимальной скорости расчета, задачки для партиции rack1 рекомендуется запускать из /storage/scratch , а расчет на остальных партициях лучше запускать из /storage/ekman. Это связанно с особенностью подключения высокоскоростного интерконнекта.

Дополнительно пользователям доступны хранения: /storage/kubrick, /storage/tartar и /storage/thalassa. Это сетевые хранилища. Расчет с них запустить не получится, однако они позволяют работать с большими объемами данных.

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

⚠️ В СВОЕЙ ДОМАШНЕЙ ПАПКЕ ($HOME/USERNAME) РАБОТАТЬ НЕЛЬЗЯ!

3.2 Работа в своем аккаунте

На кластере Ekman реализована система модулей окружения. Посмотреть наличие нужного модуля можно командой module avail. Посмотреть список модулей, которые уже загружены: module list. Загрузить модуль можно командой module load {MODULE_NAME}, где MODULE_NAME это название модуля из списка module avail. К примеру, для загрузки компиляторов необходимо выполнить команду:

module load compiler/2021.3.0

Далее можно использовать стандартные команды компиляции для OneAPI©. Компиляция последовательного кода: ifort (FORTRAN) или icc (C/C++). Компиляция параллельного кода: mpiifort (FORTRAN) или mpiicc (C/C++).

Для загрузки библиотек работы с компиляторами и NetCDF нужно загрузить модули:

module load compiler/2021.3.0
module load netcdf4/intel/serial

При работе с языком Python, рекомендуется загружать пакет module load anaconda/24.1.2. В этом случае нет необходимости устанавливать его индивидуально. Настоятельно рекомендуется для работы создавать окружения (enviroment). Например, для создания обертки для работы с numpy модулем:

module load anaconda/24.1.2
conda create -n numpy
conda activate numpy
conda install conda-forge::numpy

Выйти из окружения можно командой

conda deactivate

Просмотри текущих загруженных модулей вополняется командой module avail, а просмотр всего списка доступных модулей – module list. Выгрузить все модули разом можно командой module purge. Для установки новых модулей необходимо обратиться к системному администратору (Гавриков Александр). Однако предпочтительным является вариант установки нужных версий того или иного софта средствами conda enviroment. Например, чтобы установить полный пакет редактирования NetCDF файлов из командной строки, необходимы следующие команды:

module load anaconda/24.1.2
conda create -n cdo
conda activate cdo
conda install -y conda-forge::cdo
conda install -y conda-forge::nco
conda install -y conda-forge::ncview
conda deactivate

Такая логика позволяет контролировать версии пакетов пользователями, что значительно ускоряет работу.

4. Выполнение задач

4.1 Проверка доступности ресурсов

Проще всего проверить есть ли свободные ресурсы командой

sinfo

Ее примерный вывод

PARTITION AVAIL TIMELIMIT   NODES  STATE  NODELIST
login      down infinite     1     drain  login1
rack1*       up 30-00:00:0   2     alloc  n01p[001-002]
rack1*       up 30-00:00:0   9      idle  n01p[003-011]
broadwellr2  up 30-00:00:0   1      down* n02p016
broadwellr2  up 30-00:00:0  14      idle  n02p[001-008,010-011,013-015,017]
knl          up 30-00:00:0   2      idle  n02p[018-019]
r2c2         up 30-00:00:0  14      idle  n02p[020-025,027-034]
gpu          up 30-00:00:0   1      idle  nvidia

означает, что в партиции rack1 свободной 9 узлов (их статус помечен как idle) и 2 узла заняты (alloc). Партиции knl, r2c2 и gpu полностью свободны. В партиции broadwellr2 доступно 14 узлов и один находится в выключенном состоянии (down).

⚠️ Максимальное разрешенное время на выполнение задачи: 30 суток. Если требуется сверх долгий расчет -- необходимо согласовать его с адмиристраторм.

4.2 Запуск на классической архитектуре (CPU)

Наиболее распространенный тип запуска. Если вы не знаете на какой архитектуре вам запускать задачу – это означает, что запускать нужно здесь.

Интерактивный запуск

Задача отправляется на расчет и не "отпускает"" консоль. Как будто вы запускаете исполняемый файл прямо на текущем компьютере. Часто делается при дебагинге. Обращаю внимание: запускать таким образом нужно сразу исполняемый файл! Пример -- отправляем на расчет задачу test.exe на 16 ядрах партиции rack1:

srun --partition=rack1 -n 16 ./task.exe

Запуск с использованием планировщика задач

Наиболее частый (и рекомендуемый!) способ. Мы ставим задачу в очередь, отпуская консоль. Для этого требуется небольшой скрипт, в котором будет указана конфигурация запуска. Например, запускам задачу по количеству требуемых ядер

sbatch -n 128 ./program.sh

... или указываем вычислительные ноды -- в этом случае количество используемых ядер посчитается автоматически (предпочтительный вариант):

sbatch -w n01p[001-02] ./program.sh

В обоих случаях скрипт program.sh должен выглядеть примерно таким образом (показано на примере партиции rack1):

#!/bin/bash
#SBATCH -J real              # название задачки (как она будет отображатсья в системе)
#SBATCH --partition=rack1    # название партишена
#SBATCH --time=00-00:10:00   # Примерное время на выполнение (DD-HH:MM:SS) (10 минут)
#SBATCH --ntasks-per-node=76 # Количество ядер на одном ноде

# Можно внутри скрипта загрузить модули, которые нужны для расчета, например:
module purge                   # Чистим окружение 
module load compiler/2021.3.0  # Загружаем компилятор 
module load mpi/2021.12        # Загружаем MPI библиотеки 
module load netcdf4/intel/2021.3.0/serial  # Загружаем NetCDF библиотеки 

# Конифгурируем настройки Intel MPI (mpi/2021.12):
export I_MPI_OFI_PROVIDER=verbs  # (только для запуска из /storage/scratch!) Включить быстрый InfiniBand провайдер

srun ./program.exe

То есть мы запустили задачу в очередь на 152 ядра, потому что потребовали в строке запуска 2 узла из очереди rack1, а эти ноды имеют по 76 ядер на ноде (см. таблицу вверху). Об этом мы пишем уже внутри скрипта (параметры --partition и --ntasks-per-node).

⚠️ Обращаю внимание, что эти параметры зависимы: количество ядер на узел зависит от того, какая партиция была выбрана! Т.е. если хотим запустить задачу в партиции r2c2, то в скрипте меняем переменные --partition=r2c2 и --ntasks-per-node=48, согласно первой таблице.

4.3 Запуск на графических картах (GPU) [in progress…]

4.4 Проверка статуса задачи

Проверить как дела у запущенной задачи можно командой

squeue

Ее вывод

JOBID   PARTITION  NAME   USER   ST   TIME  NODES  NODELIST(REASON)
636       rack1    real   gavr    R   0:52  2      n01p[001-002]

говорит о том, что задача под номером 636 и именем real была запущена в партиции rack1 пользователем gavr сейчас находится в статусе активного расчета R уже почти минуту (0:52) на двух нодах n01p[001-002]. И т.д. для остальных партиций.

4.5 Остановка задачи

scancel JOBID

5. Полезные советы [in progress…]