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

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

  1.   Обучающее видео «Запуск задач»
  2.   Программно-аппаратная среда платформы HybriLIT
  3.   Начало работы: удаленный вход на платформу
  4.   Планировщик задач SLURM
  5.   5 основных шагов для проведения расчетов на платформе
  6.   Компиляция и запуск OpenMP-приложений
  7.   Компиляция и запуск MPI-приложений
  8.   Компиляция и запуск CUDA-приложений
  9.   Компиляция и запуск гибридных приложений OpenMP+CUDA
  10.   Компиляция и запуск гибридных приложений MPI+CUDA
  11.   Компиляция и запуск гибридных приложений MPI+OpenMP
  12.   Компиляция и запуск OpenCL-приложений
  13.   Основные команды Linux
  14.   Инструкция по установке MobaXterm
  15.   Инструкция по использованию программы GNUPlot
  16.   Инструкция использования MATLAB в среде JupyterHub в рамках экосистемы ML/DL/HPC
  17.   Запуск Matlab скриптов в параллельном режиме (CPU) в среде JupyterHub


Обучающее видео «Запуск задач»

Полезные ссылки:

Рассказывает Максим Зуев, главный аналитик группы по гетерогенным вычислениям, ЛИТ ОИЯИ

Видеоматериалы подготовлены А.С. Воронцовым



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

Гетерогенная вычислительная платформа HybriLIT  состоит из Учебно-тестового полигона и суперкомпьютера «Говорун», работающих в единой программно-информационной среде.

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

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

  1. Узлы с многоядерными CPU и сопроцессорами Intel Xeon Phi
  2. Узлы с многоядерными CPU и  3 графическими ускорителями Nvidia Tesla K40
  3. Узлы с многоядерными CPU и 2 (4) графическими ускорителями Nvidia Tesla K80
  4. Mix-узел с многоядерными CPU и   сопроцессорами Intel Xeon Phi и графическим ускорителем Nvidia Tesla K20

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


Пакет Modules

Для динамического изменения переменных окружения на платформе установлен пакет Modules 3.2.10. Данный пакет позволяет пользователю изменять список компиляторов для сборки приложений с поддержкой основных языков программирования (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/ монтируется динамически при обращении к ее содержимому и спустя некоторое время бездействия может исчезнуть из списка доступных директорий. Заново смонтировать ее можно, повторно выполнив команду

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

Директории в cvmfs имеют определенную структуру. Рассмотрим ее на примере пакета ROOT. Полный путь до директории будет выглядеть следующим образом:

где /6.07.02-f644e – версия пакета ROOT, в названии директории /x86_64-slc6-gcc49-opt: x86_64 указывает на поддержку 64-битности пакета, slc6 – то, что компиляция пакета из исходного кода проводилась под Scientific Linux 6, gcc49 – пакет компилировался с применением gcc 4.9.9.
Файлы с переменными окружения могут иметь одно из двух имен:

  • setup.sh

Например, команда для использования компилятора gcc 4.9.3 будет выглядеть следующим образом

  • [ИМЯ_ПАКЕТА]-env.sh

Например, для пакета ROOT 6.18.00 команда будет выглядеть следующим образом



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

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


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

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

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

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

drawit-diagram-8Для запуска с поддержкой графического интерфейса введите в терминале


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

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

Установка для программы 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, и этот адрес будет добавлен в список известных адресов.

drawit-diagram-8Для запуска с поддержкой графического интерфейса введите



Планировщик задач 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 содержит 6 очередей:

  • interactive* — включает 1 вычислительный узел с 2 Intel Xeon E5-2695 v2 12-cores, 1 NVIDIA Tesla K20X, 1 Intel Xeon Coprocessor 5110P (* означает, что очередь используется по умолчанию). Очередь подойдет для запуска тестовых программ. Время расчетов для этой очереди ограничено и составляет 1 день;
  • cpu — включает 7 вычислительных узла с 2 Intel Xeon E5-2695 v2 12-cores на каждом. Очередь подойдет для запуска приложений, использующих центральные процессоры для расчетов;
  • gpu — очередь включает 6 вычислительных узла:  3 NVIDIA Tesla K40 (Atlas) на каждом, 3 вычислительных узла с 2 NVIDIA Tesla K80 на каждом. Очередь подойдет для запуска приложений, использующих графические ускорители для расчетов;
  • long — очередь включает 2 вычислительных узла с  NVIDIA Tesla. Очередь подойдет для запуска приложений, требующих длительных (до 14 дней) вычислений;

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-файлов для различных технологий программирования будут приведены ниже в соответствующих разделах.



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

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

Компиляция и запуск 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 версии 4.8.5 (установлен по умолчанию), 4.9.3-1, 5.3.0-1, 6.2.0-2, 7.2.0-1, 8.2.0-1, 8.3.0, 9.1.0-1, 9.4.0, 10.2.0 и 11.2.0 с поддержкой OpenMP. Перед компиляцией с использованием Intel — компиляторов необходимо загрузить соответствующий модуль:

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

          Intel GNU PGI
C icc -qopenmp hello.c gcc -fopenmp hello.c pgcc -mp hello.c
C++ icpc -qopenmp hello.cpp g++ -fopenmp hello.cpp  pgc++ -mp hello.cpp
Fortran    ifort -openmp hello.f gfortran -fopenmp hello.f pgfortran -mp hello.f

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

имя бинарного файла будет hello.


Запуск

Запуск 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-библиотекам нужно добавить подходящий модуль 1.8.8, 2.1.2, 3.1.2 или 3.1.3:

или

Компиляция

Ниже представлены команды для компиляции программ, написанных на С, С++ или 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 Telsa на платформе HybriLIT, доступны два компилятора с поддержкой CUDA:

  • Реализация CUDA для языка C/C++ компании NVIDIA, основанная на компиляторе с открытым исходным кодом Open64: компилятор nvcc.
  • Реализация CUDA для Fortran c закрытой лицензией от компании Portland Group Inc. (PGI): pgfortran

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

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

     Версия CUDA     Подключаемый модуль
8.0 $ module add cuda/v8.0-1
9.2 $ module add cuda/v9.2
10.0 $ module add cuda/v10.0-1
10.1 $ module add cuda/v10.1-1
11.4 $ module add cuda/v11.4

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

CUDA  8.0, 9.2, 10.0, 10.1, 11.4, 12.1

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

Компиляция приложений с использованием библиотек 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 (см. п.1.3.2). Например, для использования в расчетах графических ускорителей NVIDIA Tesla K80 , в script-файл надо добавить строку:
  • количество требуемых графических процессоров (GPU), которое задается опцией

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

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

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

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

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 программы на архитектурах SkyLake и KNL.

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

или

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

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

или mpiicpc:

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

В данном скрипте запрашивается запуск программы на двух узлах по два MPI-процесса каждый и по две OpneMP-нити на каждый MPI-процесс. После запуска приложения

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

Видно, что как OpenMP-нити приветствуют мир представляются своим идентификационным номеров внутри MPI-процесса и сообщают на каком узле они родились.

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

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

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

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

Видно как OpenMP-нити приветствуют мир, заметим, что они все выполнялись на одном узле.

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


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

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

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

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

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

где *.* — номер версии от 8.0 и выше.

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

drawit-diagram-8

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

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

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

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

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

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

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

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


Основные команды 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 <имя_программы> «убить» все процессы по имени программы

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

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

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

 

Инструкция по использованию программы GNUPlot

GNUPlot имеет собственную систему команд, может работать интерактивно (в режиме командной строки) и выполнять скрипты, читаемые из файлов.
Также используется в качестве системы вывода изображений в различных математических пакетах: GNU Octave, Maxima, Reduce и других.

Запуск GNUPlot осуществляется с виртуальной машины space31, для подключения к виртуальной машине ипользуйте команду ssh space31.

После подключения к виртуальной машине, чтобы запустить GNUPlot введите команду:

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

и указать функцию которую вы хотите напечатать. Ниже приведен список наиболее популярных функций.

Программа так же поддерживает построение графиков на основе файлов с данными. Ниже приведен пример тестового файла с данными (testdata.dat):

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

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

Настройка графика осуществляется следующими командами:

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

Более подробную информацию о возможностях программы вы можете прочитать на сайте: http://www.gnuplot.info/

 

Maple 2020.2

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

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

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

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

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

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

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

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

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

Mathematica 11.2-1

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

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

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

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

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

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

MATLAB R2020b, R2022b

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

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

или

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

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

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

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

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

Инструкция использования MATLAB в среде JupyterHub в рамках экосистемы ML/DL/HPC

  1. Перейти по адресу https://jhub2.jinr.ru
  2. Авторизоваться через GitLab
  3. Выбрать Matlab
  4. Выбрать на вкладке Network License Manager и ввести адрес (последующие разы это вводить будет не нужно, сохранится в конфигурационном файле): 25815@lm-hlit.jinr.ru
  5. Первый старт ядра может быть очень долгим — около 2-3 минут. Однако, после этого к нему можно возвращаться практически мгновенно (Jupyter-сервер продолжит работать в фоновом режиме в течении одного часа, если в нем не совершается никаких действий. Даже если закрыть вкладку браузера, вы сможете вернутся в то состояние Matlab, в котором были до этого). Стоит учесть, что загруженность системы хранения данных (далее СХД), в которой хранятся домашние директории, тоже влияет на отзывчивость Matlab.
  6. Когда интерфейс прогрузился отобразился путь до домашней директории и появился список файлов в домашней директории можно начинать работать с Matlab

     

  7. Для создания интерактивного скрипта Matlab (аналог Jupyter IPython Notebook) нажмите New LiveScript
    Вставить в ячейку код:

    И нажать Сtrl+Enter

  8. По завершению работы с Matlab просьба закрыть сессию, чтобы не занимать выделенную лицензию. Сделать это можно с помощью Matlab Integration settings

     

  9. На данный момент доступно 6 лицензий MATLAB. При исчерпании данного лимита будет отображаться окно с предупреждением

Запуск MATLAB скриптов в параллельном режиме (CPU) в среде JupyterHub

  • Создать вычислительный скрипт, содержащий параллельные конструкции.

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

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

  • Запустить скрипт как обычно при помощи кнопки Run или консоли.

Когда программа дойдет до строки, содержащей параллельную команду, автоматически активируется параллельной кластер (статус активации кластера можно увидеть в нижней левой части экрана), который создаст параллельных «работников» и с их помощью будет выполнять соответствующий код.

Количество работников по умолчанию равно количеству физических ядер процессора. Если нужно указать количество «работников» вручную в код скрипта добавляется следующие команды:

Полный текст скрипта:

Запуск Matlab скриптов в параллельном режиме (CPU) через batch

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

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

Запустить скрипт на исполнение.