Гетерогенный кластер | ЛИТ/ОИЯИ
 
Платформа "HybriLIT"

Инструкция по работе. Гетерогенная платформа «HybriLIT»

  1. Программно-аппаратная среда платформы HybriLIT
  2. Очереди
  3. Системы хранения и обработки данных на платформе
  4. 5 основных шагов для проведения расчетов на платформе
  5. Начало работы: удаленный вход на платформу
  6. Пакет Lmod
  7. Основные команды Linux
  8. Планировщик задач SLURM
  9. Компиляция и запуск
    OpenMP-приложений
    MPI-приложений
    CUDA-приложений
    Гибридные приложения OpenMP+CUDA
    Гибридные приложения MPI+CUDA
    Гибридные приложения MPI+OpenMP
    OpenCL-приложений


Программно-аппаратная среда платформы HybriLIT

Учебно-тестовый полигон построен на основе вычислительных узлов с многоядерными процессорами Intel и графическими ускорителями Nvidia (подробнее можно посмотреть в разделе «Аппаратное обеспечение»).

Типы вычислительных узлов:

  1. CPU: узлы с многоядерными процессорами Intel Xeon Phi 7290
  2. CPU: узлы с многоядерными процессорами Intel Xeon E5-2695 v2
  3. GPU: узлы с многоядерными процессорами Intel Xeon E5-2695 v3 и графическими ускорителями Nvidia K80
  4. GPU: узлы с многоядерными процессорами Intel Xeon E5-2698 v4 и графическими ускорителями Nvidia V100

Очереди

Запуск задачи осуществляется с помощью постановки ее в очередь на счет. Так как HybriLIT является гетерогенной платформой, то для использования различных ресурсов были созданы отдельные очереди.

На текущий момент HybriLIT содержит 5 очередей:

  • interactive — включает 1 вычислительный узел с 2 Intel Xeon E5-2695 v2 12-cores (* означает, что очередь используется по умолчанию). Очередь подойдет для запуска тестовых программ. Время расчетов для этой очереди ограничено и составляет 2 часа;
  • cpu — включает 15 вычислительных узла с 1 Intel Xeon Phi 72-cores на каждом. Очередь подойдет для запуска приложений, использующих центральные процессоры для расчетов. Время расчетов для этой очереди составляет до 7 дней;
  • long — очередь включает 6 вычислительных узлов с 1 Intel Xeon Phi 72-cores на каждом. Очередь подойдет для запуска приложений, требующих длительных (до 4 недель) вычислений;
  • gpu_k80 — очередь включает 1 вычислительный узел: 2 Intel Xeon E5-2695 v3 14-cores и 2 NVIDIA Tesla K80. Очередь подойдет для запуска приложений, использующих графические ускорители для расчетов. Время расчетов до 7 дней;
  • gpu_volta — очередь включает 1 вычислительный узел: 2 Intel Xeon E5-2698 v4 20-cores и 8 NVIDIA V100. Очередь подойдет для запуска приложений, требующих длительных (до 7 дней) вычислений;

Гетерогенная платформа находится под управлением операционной системы AlmaLinux 9.6, с планировщиком задач SLURM и установленным программным обеспечением: компиляторами и пакетами для разработки, отладки и профилировки параллельных приложений, а также пакетом Lmod.

Системы хранения и обработки данных на платформе

Для повышения надежности и скорости работы всей Платформы введены различные системы хранения и обработки данных пользователей:

  1. Home

    Домашняя директория пользователя: /zfs/store5.hydra.local/user/l/login
    Директория предназначена для редактирования файлов, сборки и компиляции программ. На эту директорию установлена квота в 100 GB на каждого пользователя.
    Домашняя директория не предназначена для проведения расчетов и не доступна на вычислительных узлах платформы!

  2. Project

    Директория пользователя для проведения расчетов, хранения и обработки данных: /lustre/projects/l/login
    Директория предназначена для проведения расчетов и размещения рабочих файлов (исполняемых, входных и выходных файлов) при выполнении счетных задач на платформе. На данную директорию не установлена квота и она доступна на вычислительных узлах платформы.

  3. Scratch Lustre 12×12*

    Директория пользователя для быстрой обработки данных: /lustre/scratch/l/login (* будет доступна позже)
    Директория размещена на файловой системе Lustre 12×12, имеющей специальную архитектуру, оптимизированную для операций ввода-вывода данных. Директория предназначена для обработки массивно-параллельных задач, использующих интенсивный ввод-вывод данных.
    В директории Scratch 12×12 не гарантируется сохранение файлов, дата размещения которых более 90 дней.

  4. Scratch NFS/ZFS*

    Резервная директория пользователя для обработки данных: /zfs/scratch/l/login (* будет доступна позже)
    Директория размещена на файловой системе NFS/ZFS и предназначена для запуска задач, связанных с обработкой большого количества файлов небольшого размера (менее 10 Mb).
    В директории Scratch NFS/ZFS не гарантируется сохранение файлов, дата размещения которых более 90 дней.

  5. Lustre

    Старая домашняя директория пользователя: /lustre/home/user/l/login.
    В настоящее время продолжается копирование файлов из предыдущего хранилища в текущую директорию пользователя /lustre/projects.
    Этот процесс может занять некоторое время. Просим не беспокоиться — все данные сохранены и будут полностью перенесены.


5 основных шагов для проведения расчетов на платформе

  • Для проведения расчетов на HybriLIT можно выделить основных шагов:

 

Начало работы: удаленный вход на платформу

Удаленный доступ к гетерогенной вычислительной платформе HybriLIT открыт только по протоколу SSH.
DNS адрес гетерогенной платформы:hydra.jinr.ru
Более подробная инструкция для подключения к платформе для различных операционных систем приведена ниже.


Для пользователей  OS Linux

Запустите терминал и введите:

где USERNAME – логин, который Вы получили при регистрации, hydra.jinr.ru – адрес сервера. После требования системы ввести пароль — введите его. В случае успешной авторизации на платформе Вы увидите командную строчку на экране:

Это означает, что Вы подключились к платформе и находитесь в своем домашнем каталоге.
drawit-diagram-8 При первой попытке доступа появится уведомление о незнакомом IP-адресе, к которому Вы пытаетесь подключиться. Наберите yes, нажмите Enter, и этот адрес будет добавлен в список известных адресов.


Для пользователей OS Windows

Для подключения к платформе пользователей Windows необходимо использовать специальную программу – SSH-клиент, например, PuTTY или MobaXterm.

Установка для программы PuTTY не требуется. Нужно просто скачать файл putty.exe  по ссылке http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe в удобное место на компьютере и запустить его.

Ниже описана пошаговая процедура настройки PuTTY для доступа к платформе.

  • В поле Host Name (or IP address) введите адрес сервера: hydra.jinr.ru
  • В поле Saved Sessions введите предпочтительное имя для текущего подключения (например, hydra.jinr.ru).

  • Для подключения удаленного графического интерфейса X11 переходим на вкладку Connection SSH>X11 и выделяем поле Enable X11 forwarding

  • Проверяем, что на вкладке Connection > SSH > Tunnels выделено поле Local ports accept connections from other hosts

  • После этого возвращаемся во вкладку Session и нажимаем Save, чтобы сохранить все наши изменения.
  • Нажимаем Open для подключения к платформе HybriLIT и вводим логин и пароль, которые Вы получили при регистрации.

В случае успешной авторизации на платформе Вы увидите командную строчку на экране:

Это означает, что Вы подключились к платформе и находитесь в своем домашнем каталоге.
drawit-diagram-8При первой попытке доступа появится уведомление о незнакомом IP-адресе, к которому Вы пытаетесь подключиться. Наберите yes , нажмите Enter, и этот адрес будет добавлен в список известных адресов.

Инструкция по установке MobaXterm

1. По ссылке mobaxterm.mobatek.net можно на выбор скачать портативную версию программы, не требующую установки (синяя кнопка), и версию с установщиком. Далее рассмотрим версию с установкой.

pic00
2. После скачивания установщика на компьютер, открыть файл MobaXterm_Setup_XX.exe и следовать стандартным шагам установки программы.
pic01
3. По завершению установки на рабочем столе появится ярлык для запуска программы.
pic02
4. Запустите ее и в верхнем меню в разделе Sessions выберите New session
pic03
5. Введите в поле Remote host адрес сервера hydra.jinr.ru и нажмите OK

pic04

6. Откроется новая вкладка, где Вам надо будет ввести логин и пароль для доступа на платформу. И в случае успешной авторизации на платформе Вы увидите командную строчку на экране:

[USERNAME@hydra ~] $
pic05

 

Пакет Lmod

Для динамического изменения переменных окружения на платформе установлен пакет Lmod 9.1.2. Данный пакет позволяет пользователю изменять список компиляторов для сборки приложений с поддержкой основных языков программирования (C/C++, FORTRAN, Java), технологий параллельного программирования (OpenMP, MPI, OpenCL, CUDA) и использовать установленные на платформе пакеты программ. Перед компиляцией приложения пользователю необходимо загрузить модули, необходимые для работы.

Основные команды для работы с модулями:

drawit-diagram-8Загруженные модули не сохраняются между сессиями, если Вам нужно всегда использовать один набор модулей, допишите команду:

Также Вы можете подключить версии компиляторов и пакеты, которые установлены в системе cvmfs (CernVM File System).


CernVM File System

Добавление системы CernVM-FS к установленному списку программных пакетов позволяет получить доступ к установленному программному обеспечению CERN.
Список доступных пакетов можно посмотреть, выполнив команду:

Стоит отметить, что директория /cvmfs/sft.cern.ch/ монтируется динамически при обращении к ее содержимому и спустя некоторое время бездействия может исчезнуть из списка доступных директорий. Заново смонтировать ее можно, повторно выполнив команду

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



Основные команды Linux

Команда Описание
man <имя_команды> после вводе этой команды на экране появляется информация о команде
man -k <ключевое_слово> получить список команд, к которым относится данное <ключевое слово>
Простейшие действия:
ls получить список файлов в текущем каталоге
ls -la получить подробный список, включая скрытые файлы
cd <каталог> сменить текущий каталог. Если имя каталога не указывается, то текущим становится домашний каталог пользователя
cp <что_копировать> <куда_копировать> копировать файлы
mv <что_перемещать> <куда_перемещать> переместить или переименовать файл
ln -s <на_что_сделать_ссылку> <имя_ссылки> создать символьную ссылку
rm <файл(ы)> удалить файл(ы)
rm -r <директория> удалить директорию, с параметром <-r> — рекурсивно
cat <имя_файла> вывод содержимого файла на стандартный вывод (по умолчанию — на экран)
more <имя_файла> вывод содержимого файла на стандартный вывод (по умолчанию — на экран)
less <имя_файла> просмотр содержимого текстового файла с возможностью вернуться к предыдущим страницам. Нажатие q означает выход из программы
find <каталог> -name <имя_файла> найти файл <имя_файла> в <каталоге> и отобразить результат на экране
tar -zxvf <файл> распаковать архив tgz или tar.gz
nano <имя_файла> редактировать текстовый файл с помощью текстового редактора nano
vim <имя_файла> редактировать текстовый файл с помощью текстового редактора vim
pico <имя_файла> редактировать текстовый файл с помощью текстового редактора pico
mc запустить программу управления файлами MidnightCommander
manmc вывести описание опций MidnightCommander
Стандартные команды:
pwd вывести имя текущего каталога
whoami вывести имя, под которым Вы зарегистрированы
date вывести текущие дату и время
time <имя программы> выполнить программу и получить информацию о времени, нужном для ее выполнения
ps -a вывести список текущих процессов в текущем сеансе работы
chmod <права доступа><файл> изменить права доступа к файлу, владельцем которого Вы являетесь
*Есть три способа доступа к файлу:
-чтение —read
-запись — write
-исполнение — execute
Отсутствие права доступа показывается как «-«
и три типа пользователей:
— владелец файла (u)
— члены группы владельца (g)
— все остальные (o)
Пример:
chmod a+r zara Эта команда позволит Вам установить права доступа на чтение для файла zara для всех (all=user+group+others)
chmod o-x zara Эта команда отнимет право доступа на исполнение файла у всех, кроме пользователя и группы
chown <новый_владелец> <файлы> изменить владельца файлов
chgrp <новая_группа> <файлы> изменить группу принадлежности для файлов
ls -l <имя_файла> проверить текущие права доступа
*если файл доступен всем пользователям, то напротив имени файла будет следующая комбинация букв: rwxrwxrwx
Контроль процессов:
<имя_файла> | grep < фрагмент> поиск <фрагмента> текста в файле <имя_файла>
man grep справка о команде
ps axu | grep <Ваше_имя_пользователя> отобразить все процессы, запущенные в системе от Вашего_имени_пользователя
kill <номер процесса> принудительно завершить («убить») процесс с заданным номером
killall <имя_программы> «убить» все процессы по имени программы

 


Планировщик задач SLURM

SLURM – это высоко масштабируемый отказоустойчивый менеджер кластеров и планировщик заданий с открытым кодом, который обеспечивает три основные функции:

  • Выделяет эксклюзивный и/или неэксклюзивный доступ к ресурсам (компьютерные узлы) для пользователей в течение некоторого периода времени;
  • Обеспечивает основу для запуска, работы и мониторинга работы (как правило, параллельной работе) на множестве выделенных узлов;
  • Поддерживает очередь ожидающих заданий и управляет общей загрузкой ресурсов в процессе выполнения работы.

1. Основные команды

К основным командам планировщика SLURM относятся: sbatch, scancel, sinfo, squeue, scontrol.

  • sbatch — команда для запуска приложения в режиме очереди

После запуска приложению присваивается персональный номер jobid, по которому его можно найти в списке запущенных приложений (squeue). Результат записывается в файл с именем slurm-jobid.out.
Пример использования sbatch:

  • squeue — команда для просмотра списка запущенных приложений в очереди;

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

  •  RUNNING (R) – выполняется;
  •  PENDING (PD) – в очереди;
  • COMPLETING (CG) – завершается. (в этом состоянии, возможно, может понадобиться помощь системного администратора для удаления приложения из очереди).

Пример использования squeue:

  • sinfo — команда для просмотра состояния вычислительных узлов и очередей. Вычислительные узлы могут быть в одном из следующих состояний:
  1. idle – узел свободен;
  2. alloc – узел используется процессом;
  3. mix – узел частично занят, частично свободен;
  4. down, drain, drng – узел заблокирован.

Пример использования sinfo:

  • scancel — команда для удаления приложения из очереди.

Пример использования scancel для удаления из очереди приложения с jobid 141980:

  • scontrol — используется для просмотра или изменения состояния SLURM, включающего: задачи, узла и очереди. Многие из управляющих команд могут выполняться только суперпользователем.

Пример использования scontrol для просмотра характеристик запущенного приложения:

Список характеристик содержит такие параметры, как:

 параметр          функция
UserId  имя пользователя
JobState  состояние приложения
RunTime текущее время расчетов
Partition используемая очередь
NodeList используемые узлы
NumNodes число используемых узлов
NumCPUs число используемых ядер процессора
Gres число используемых графических ускорителей или сопроцессоров
MinMemoryCPU      количество используемой оперативной памяти
Command  расположение файла для запуска приложения
StdErr расположение файла с ошибками
StdOut расположение файла с выходными данными

Пример использования scontrol для просмотра характеристик узлов:

Список характеристик содержит такие параметры, как:
NodeName – hostname вычислительного узла;
CPUAlloc – количество загруженных вычислительных ядер;
CPUTot – общее число вычислительных ядер на узле;
CPULoad – загрузка вычислительных ядер;
Gres – число доступных для расчетов графических уcкорителей и сопроцессоров;
RealMemory – общее количество оперативной памяти на узле;
AllocMem – количество загруженной оперативной памяти;
State – состояние узла.


2. Очереди

Запуск задачи осуществляется с помощью постановки ее в очередь на счет. Так как HybriLIT является гетерогенной платформой, то для использования различных ресурсов были созданы отдельные очереди.

На текущий момент HybriLIT содержит 5 очередей:

  • interactive*  — включает 1 вычислительный узел с 2 Intel Xeon E5-2695 v2 12-cores (* означает, что очередь используется по умолчанию). Очередь подойдет для запуска тестовых программ. Время расчетов для этой очереди ограничено и составляет 2 часа;
  • cpu — включает 15 вычислительных узла с 1 Intel Xeon Phi 72-cores на каждом. Очередь подойдет для запуска приложений, использующих центральные процессоры для расчетов. Время расчетов для этой очереди составляет до 7 дней;
  • long — очередь включает 6 вычислительных узлов с 1 Intel Xeon Phi 72-cores на каждом. Очередь подойдет для запуска приложений, требующих длительных (до 4 недель) вычислений;
  • gpu_k80 — очередь включает 1 вычислительный узел: 2 Intel Xeon E5-2695 v3 14-cores и 2 NVIDIA Tesla K80. Очередь подойдет для запуска приложений, использующих графические ускорители для расчетов. Время расчетов до 7 дней;
  • gpu_volta — очередь включает 1 вычислительный узел: 2 Intel Xeon E5-2698 v4 20-cores и 8 NVIDIA V100. Очередь подойдет для запуска приложений, требующих длительных (до 7 дней) вычислений;

3. Описание и примеры script-файлов

Для запуска приложения с помощью команды sbatch требуется использовать script-файл. В общем случае, script-файл – это обычный bash файл, удовлетворяющий следующим правилам:

drawit-diagram-8

  • Первая строка содержит #!/bin/sh (или #!/bin/bash) , что позволяет скрипту быть запущенным как bash-script;
  • Строки, начинающиеся с #  — это комментарии;
  • строки, начинающиеся с #SBATCH , устанавливают параметры для планировщика SLURM;
  • Все параметры планировщика SLURM должны быть установлены до непосредственного запуска приложения;
  • Script-файл содержит команду для запуска приложений.

SLURM имеет большое количество различных параметров (https://computing.llnl.gov/linux/slurm/sbatch.html). Ниже приведены параметры обязательные или рекомендованные для использования на платформе HybriLIT:

  • -p  — используемая очередь. В случае отсутствия данного параметра задача будет поставлена в интерактивную очередь, время выполнения в которой ограничено 1 часом. В зависимости от типа используемых ресурсов приложение может быть запущено в одной из существующих очередей: cpu, phi, gpu, gpuK80;
  • -n  — число используемых процессов;
  • -t  — резервируемое время расчетов. Это обязательный параметр. Доступны следующие форматы: minutes, minutes:seconds, hours:minutes:seconds, days-hours, days-hours:minutes, days-hours:minutes:seconds;
  • --gres  — число резервируемых графических ускорителей NVIDIA или сопроцессоров Intel Xeon Phi. Это обязательный параметр для задач, использующих gpu или сопроцессоры Intel Xeon Phi;
  • --mem  — резервируемая оперативная память, в мегабайтах. Это необязательный параметр, но если ваше приложение использует большое количество оперативной памяти, рекомендуется задать данный параметр;
  • -N  – число используемых узлов. Этот параметр следует устанавливать только в том случае, если количество ресурсов на 1 узле недостаточно для выполнения вашего расчета;
  • -o  – имя выходного файла. По умолчанию результат записывается в файл с именем slurm-jobid.out.

Ниже приведены примеры скриптов, использующие различные ресурсы платформы HybriLIT.

  • Для расчетов на CPU:

  • Для расчетов с использованием GPU:

Примеры script-файлов для различных технологий программирования будут приведены ниже в соответствующих разделах.



Компиляция и запуск

OpenMP-приложений

УЧЕБНОЕ ПОСОБИЕ «Основы технологии OpenMP на кластере HybriLIT».

OpenMP (Open Multi-Processing) — открытый стандарт для разработки многопоточных программ на языках С, С++ и Fortran. Содержит набор директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для разработки многопоточных приложений на многопроцессорных системах с общей памятью. Программная модель — Fork-Join Model, которая заключается в следующем (Рис.1.):

  • Любая программа начинает работу в нулевом потоке (Master thread), далее  нулевой поток создает  (с помощью директив компилятора) группу потоков  — FORK, которые выполняются параллельно, затем, по завершении работы порожденных потоков в параллельной области, происходит синхронизация — JOIN,  и программа продолжает работу в основном потоке.

drawit-diagram-19

Рис.1. Программная модель Fork-Join.


Компиляция

Используются стандартные компиляторы с ключами поддержки OpenMP. Доступны компиляторы GNU и Intel. Доступны компиляторы GNU версии 12.3.0 и 13.1.0 с поддержкой OpenMP.

Перед компиляцией с использованием Intel — компиляторов необходимо загрузить соответствующий модуль:

На данный момент доступны 2 версии компилятора Intel: v2023.1.0 (используются компиляторы Intel Compile Classic: icc, icpc) и v2025.3.1 (используются оптимизированные компиляторы: icx, icpx). Ниже представлены команды для компиляции программ, написанных на С, С++ или Fortran для различных компиляторов:

          Intel 2023 Intel 2025 GNU
C icc -qopenmp hello.c icx -qopenmp hello.c gcc -fopenmp hello.c
C++ icpc -qopenmp hello.cpp icpx -qopenmp hello.cpp g++ -fopenmp hello.cpp
Fortran    ifort -qopenmp hello.f ifx -qopenmp hello.f gfortran -fopenmp hello.f
 
При успешной компиляции образуется исполняемый бинарный файл. По умолчанию имя бинарного файла для всех компиляторов — a.out . Другое имя можно задать с помощью ключа -o . Например, в результате выполнения команды для Intel 2025 на языке C: 

имя бинарного файла будет hello, а на языке Fortran:


Запуск

Запуск OpenMP-приложений  осуществляться с помощью script-файла,  содержащего следующую информацию:

Использование следующей установки оптимизирует распределение потоков по вычислительным ядрам и, как правило, обеспечивает меньшее время счета по сравнению с расчетом без использования этой команды.

Число OMP-нитей (потоков) может быть  задано  с помощью переменной окружения OMP_NUM_THREADS  до выполнения программы в командной строке:

где threads — количество OMP-нитей.

Таким образом, рекомендуемый script-файл для OpenMP-приложений, например, с 5-ю потоками имеет вид:

Для запуска приложения используется следующая команда:

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

Message Passing Interface (MPI, интерфейс для передачи сообщений) — программный интерфейс (API) для передачи информации, который позволяет обмениваться сообщениями между процессами, выполняющими одну задачу.

Для работы с MPI доступны компиляторы GNU и Intel.

*Опубликовано учебное пособие Практическое введение в технологию MPI на платформе HybriLIT (скачать файл).


Компиляторы GNU

MPI-программы могут компилироваться GNU-компиляторами с библиотекой OpenMPI. GNU-компиляторы устанавливаются на HybriLIT по умолчанию. Для доступа к OpenMPI-библиотекам нужно добавить подходящий модуль 5.0.9:

Компиляция

Ниже представлены команды для компиляции программ, написанных на С, С++ или Fortran для GNU-компилятора:

     Язык программирования     Команды вызова компилятора
C mpicc
C++ mpiCC / mpic++ / mpicxx
Fortran 77 mpif77 / mpifort (*)
Fortran 90 mpif90 / mpifort (*)

drawit-diagram-8(*) Рекомендуется использовать команду mpifort вместо mpif77 или mpif90, которые считаются устаревшими. С помощью mpifort можно компилировать любые Fortran-программы, использующие в качестве интерфейса « mpif.h » или « use mpi «.

 

Пример компиляции программы на языке С:

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

Для запуска программы с использованием модулей OpenMPI используется script:


Intel-компилятор

Для использования MPI с Intel-компилятором нужно добавить модуль

MPI-библиотека входит в состав этого модуля.

Компиляция

Ниже представлены команды для компиляции программ, написанных на С, С++ или Fortran для Intel-компилятора:

     Язык программирования     Команды вызова компилятора
C mpiicc
C++ mpiicpc
Fortran  mpiifort

Пример компиляции программы на языке Fortran:


drawit-diagram-8Опции оптимизации компиляторов:

  Опция                     Назначение
-O0 без оптимизации; используется по умолчанию для GNU-компилятора
-O2 используется по умолчанию для Intel-компилятора
-O3 может быть эффективна для определенного класса программ
-march=native         -march=core2 настройка на архитектуру процессоров (использование дополнительных возможностей процессоров Intel)

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

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

где script_mpi – имя заранее заготовленного script-файла, содержащего «паспорт задачи».

Пример script-файла для запуска MPI-приложений на двух вычислительных узлах

Далее приведены два способа распределения MPI процессов по вычислительным узлам.

Пример использования комбинации ключей --tasks-per-node  и -n : задается 10 процессов  ( -n 10 )  по 5  процессов на один вычислительный узел ( --tasks-per-node=5). Таким образом, вычислительная работа распределяется по  2 вычислительным узлам:

Пример использования комбинации ключей --tasks-per-node  и -N:  задается  по 5  процессов на один вычислительный узел  ( --tasks-per-node=5 ) и количество узлов ( -N 2 ). Таким образом, создается 10 процессов и вычислительная работа распределяется по  2  узлам:

drawit-diagram-8Дополнительные узлы (**) имеет смысл заказывать, если для решения задачи требуется большое число параллельных процессов (больше 24).

Пример простейшего script-файла, в котором из множества возможных SLURM-директив фигурируют только самые необходимые:

Здесь исполняемый файл a.out, изготовленный компилятором, отправляется во входную очередь задач, предназначенных для счета на cpu-подмножестве платформы HybriLIT. Задача требует 7 ядер. Задача получит уникальный номер во входной очереди. Пусть это будет 1234. Тогда листинг задачи будет оформлен как файл slurm-1234.out в той же директории, где находился ее исполняемый файл a.out.

drawit-diagram-8

В программе на языке Fortan для подключения MPI-процедур обычно используется оператор Include ‘mpif.h’ , который можно заменить на более функциональный вариант – модуль mpi.mod, подключаемый командой Use mpi.

drawit-diagram-8

При запуске задачи на счет

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

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

CUDA (Compute Unified Device Architecture) — программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы NVIDIA (GPU).

Доступные версии CUDA

Наиболее эффективной технологией, позволяющей использовать графические процессоры NVIDIA, является платформа параллельных вычислений Compute Unified Device Architecture (CUDA), обеспечивающая набор расширений для языков C/С++ , Fortran.

Для разработки параллельных приложений (отладки, профилирования и компиляции), использующих графические ускорители NVIDIA на платформе HybriLIT доступен компилятор nvcc из NVIDAI CUDA Toolkit.

Компиляция CUDA C/C++ приложений

На платформе доступны следующие версии CUDA, подключаемые через соответствующие модули пакета Lmod:

     Версия CUDA     Подключаемый модуль
11.4 $ module add cuda/v11.4
13.0 $ module add cuda/v13.0

Для проведения расчетов с использованием графических ускорителей доступны два представителя семейства графических ускорителей NVIDIA Tesla K80 и NVIDIA Tesla V100. Согласно принятой NVIDIA системе наименования архитектур, графические процессоры именуют как sm_xy , где х обозначает число GPU-поколения,   у  — версии в этом поколении. Графические процессоры Tesla K80sm_37 , Tesla V100 sm_70 .

CUDA  11.4, 13.0

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

Компиляция приложений с использованием библиотек CUDA

Для проведения расчетов на графических ускорителях программно-аппаратная платформа CUDA предоставляет ряд хорошо оптимизированных математических библиотек,  не требующих специальной установки. Например:

  • библиотека для матрично-векторных операций cuBLAS – реализация библиотеки BLAS (Basic Linear Algebra Subprograms);
  • библиотека CUFFT, реализация быстрого преобразования Фурье (FFT), которая состоит из двух отдельных библиотек: CUFFT и cuFFTW;
  • библиотека cuRAND, предоставляющая средства для эффективной генерации высококачественных псевдослучайных и квазислучайных чисел;
  • библиотека cuSPARSE, предназначенная для операций с разряженными матрицами, например, для решения систем линейных алгебраических уравнений с матрицей системы, имеющей ленточную структуру.

Более подробная информация доступна по ссылке: http://docs.nvidia.com/cuda/

drawit-diagram-8

Ниже представлен пример компиляции приложений с функциями из библиотеки cuBLAS и cuFFT:

Как видно из этой строки компиляции, необходимо только добавить ключи -lcublas  -lcufft.

Запуск GPU-приложений на платформе в системе SLURM

Для запуска приложений, использующих графические ускорители, в пакетном режиме в системе SLURM необходимо указать в запускаемом script-файле следующие обязательные параметры/опции:

  • имя соответствующей очереди, в зависимости от типа GPU (см. очереди). Например, для использования в расчетах графических ускорителей NVIDIA Tesla K80 , в script-файл надо добавить строку:

  • количество требуемых графических процессоров (GPU), которое задается опцией

--gres  (Generic сonsumable RESources) в виде:

Например, для использования 3 GPU на одном узле, в script-файл надо добавить строку:

Для использования в расчетах большего количества GPU, чем на одном узле, в script-файл надо добавить две строки:

В этом случае будет задействовано вычислительных узла с 3 графическими процессорами на каждом, суммарно 6 GPU.

drawit-diagram-8

Особенности вычислений с использованием ускорителя NVIDIA K80.

Графический ускоритель Tesla K80 является двухпроцессорным устройством (два графических процессора в одном устройстве) и обладает почти в два раза более высокой производительностью и вдвое более широкой полосой пропускания памяти по сравнению с предшественником — Tesla K40.

Для задействования 2 процессоров ускорителя Tesla K80 в script-файле необходимо указать параметр --gres=gpu:2 .


Приложения, использующие один графический процессор

Ниже представлены общие script-файлы для запуска приложений с использованием графического ускорителя NVIDIA Tesla K40:

и одного процессора ускорителя Tesla K80 в пакетном режиме в системе SLURM:

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

  • несколько GPU на одном вычислительном узле;
  • несколько вычислительных узлов с графическими процессорами.

Для эффективного использования нескольких графических ускорителей разрабатываются гибридные приложения, например, OpenMP+CUDA, MPI+CUDA,  MPI+OpenMP+CUDA и т.п. Более подробную информацию можно найти в проекте GitLab  “Parallel  features”:  https://gitlab-hybrilit.jinr.ru/


Компиляция и запуск гибридных приложений OpenMP+CUDA

В данном разделе представлен пример запуска приложения, использующего несколько графических процессоров (multi-GPU application) на одном узле. Например, такое приложение может быть написано с использованием двух технологий параллельного программирования  OpenMP+CUDA, в котором каждому потоку/нити (OpenMP-thread) ставится в соответствие один графический процессор.

При использовании в расчетах ускорителей NVIDIA Tesla K40:

При использовании в расчетах ускорителей NVIDIA Tesla K80:


Компиляция и запуск гибридных приложений MPI+CUDA

В данном разделе представлен пример запуска приложения, использующего несколько графических процессоров (multi-GPU application) на нескольких вычислительных узлах. Например, такое приложение может быть написано с использованием двух технологий параллельного программирования  MPI+CUDA, в котором каждому процессу ставится в соответствие один графический процессор, при этом явно указано количество процессов на узел.

При использовании в расчетах ускорителей NVIDIA Tesla K40:

При использовании в расчетах ускорителей NVIDIA Tesla K80:


Компиляция и запуск гибридных приложений MPI+OpenMP

Пожалуй, наиболее эффективным средством разработки гибридных алгоритмов является комбинация технологий MPI и OpenMP. Рассмотрим пример компиляции и запуска MPI+OpenMP программы на архитектуре KNL.

Для этого добавим mpi-модуль:

или

где *.* — номер версии.

Для компиляции можно воспользоваться компиляторами mpic++:

или mpiicpc:

Запуск MPI+OpenMP-приложения на архитектуре KNL воспользоваться следующим скриптом:

В SLURM-скрипте запрашивается запуск в очереди CPU на одном узле с двумя MPI-процессами и тремя OpenMP-нитями на каждый MPI-процесс.

После запуска приложения

увидим следующее сообщение в выходном файле:

Скачать программу и ознакомиться с ней можно по адресу: disk.jinr.ru/mpiomp.


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

Open Computing Language (OpenCL) — язык программирования высокого уровня, основанный на стандарте C99, для разработки параллельных программ, использующих различные вычислительные устройства: графические процессоры, центральные процессоры и другие. При этом параллелизм обеспечивается как на уровне инструкций, так и на уровне данных.

OpenCL является открытым стандартом и поддерживается консорциумом Khronos Group, в который входят крупнейшие IT-компании, включая Intel, NVIDIA и многие другие. Таким образом, программы, написанные на языке OpenCL, могут выполняться практически на всех вычислительных устройствах.

Компиляция приложений, написанных на языке OpenCL

Приложения, написанные на языке OpenCL, могут быть скомпилированы и запущены на различных платформах. Рассмотрим для нашего случая платформу NVIDIA. Для этого необходимо подключить одну из доступных на платформе версий CUDA, используя пакетный модуль Lmod:

где *.* — номер версии.

Для компиляции можно воспользоваться различными компиляторами, например, компилятором GCC:

drawit-diagram-8

При компиляции необходимо добавлять опцию -lOpenCL .

После завершения компиляции в текущей директории появится исполняемый файл с именем a.out по умолчанию. Для задания другого имени исполняемому файлу нужно использовать команду:

Тогда исполняемый файл получит название helloWorld.out .

Запуск OpenCL-приложений

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

Приложения запускается командой:

После запуска задача получит номер:

После завершения расчетов в текущей директории будет создан файл slurm-XXXXX.out  (где XXXXX  — номер задачи), который будет содержать выходные данные программы.


Maple 2020.2

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

Подключение переменных окружения пакета
Введите в консоли команду

Запуск пакета

– запуск с графическим интерфейсом. Откроется окно программы и вы можете начать работать в нем. Для выхода необходимо выбрать пункт Exit в выпадающем меню.

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

В этом случае расчеты будут проводиться на Вашей ВМ. Для запуска расчетов непосредственно на ресурсах кластера HybriLIT необходимо запускать расчеты через следующий скрипт-файл

При добавлении опции

в выходной файл будет выводиться только результат вычислений, без подсказок ввода и выходных меток. В этом случае последняя команда будет иметь вид

Информацию по работе и описание основных команд Maple Вы можете посмотреть по ссылкам:
web-страницаpdf-документ.

Mathematica 11.2

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

Подключение переменных окружения пакета
Введите в консоли команду

 Запуск пакета
$ mathematica – запуск с графическим интерфейсом. Откроется окно программы, и вы можете начать работать в нем. Для выхода необходимо выбрать пункт Exit в выпадающем меню.
$ math – запуск в терминальном режиме. В этом случае все команды необходимо вводить в текущей консоли и результаты вычислений будут выводиться в нее же. Для выхода из программы в данном  режиме наберите команду
$ Quit
В этом случае расчеты будут проводиться на Вашей ВМ. Для запуска расчетов непосредственно на ресурсах кластера HybriLIT необходимо запускать расчеты через следующий скрипт-

При добавлении опции

в выходной файл будет выводиться только результат вычислений, без подсказок ввода и выходных меток. В этом случае последняя команда будет иметь вид

Документацию по работе в Mathematica и описание основных команд Вы можете посмотреть перейдя по ссылке.

MATLAB r2022b

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

Подключение переменных окружения пакета
Введите в консоли команду

Запуск пакета

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

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

В этом случае расчеты будут проводиться на Вашей ВМ. Для запуска расчетов непосредственно на ресурсах кластера HybriLIT необходимо запускать расчеты через следующий скрипт-файл:

Документацию по работе в Matlab и описание основных команд Вы можете посмотреть перейдя по ссылке.