Состав комплекса.

  1. Вычислительный узел DGX-2
  2. Узел доступа пользователей
  3. SLURM планировщик задач
  4. Общее хранилище

Вычислительный узел DGX-2 - это суперкомпьютер.

Спецификации системы:

Процессор 2 x 24-ядерных CPU Intel Xeon Platinum 8168 с тактовой частотой 2,7 ГГц
Объём оперативной памяти 1,5 TБ
Графические ускорители 16 x NVIDIA Tesla V100
Объем видеопамяти одного графического ускорителя 32 ГБ
Производительность 2 петафлопса

Узел доступа пользователей — это виртуальная машина, которая не является вычислительным узлом, а служит точкой входа пользователей.

SLURM планировщик задач - управляет очередью задач и ресурсами DGX-2.

Общее хранилище данных — это дисковое устройство объёмом 50 Тб задача которого хранить домашние каталоги пользователей, результаты расчётов, а так же выполнение задач для которых не нужно высокопроизводительного ввода-вывода, для задач где нужно использовать высокопроизводительный ввод вывод есть хранилище на NVME дисках, подключаемое по запросу.

Рабочий процесс

Для запуска задачи и выделения ресурсов используется планировщик задач SLURM.

Расчётный комплекс использует контейнеры singularity как окружение для выполнения пользовательских задач.

Можно использовать как готовые контейнеры Docker или Sungularity из общих хранилищ , так и самостоятельно подготовить свой контейнер.

Рассмотрим типовой запуск задачи.

  1. Нужно подготовить batch скрипт с указанием ресурсов для запуска задачи.

#!/bin/bash
#SBATCH -p compute
#SBATCH --gres=gpu:2
#SBATCH --mem=50G
#SBATCH --cpus-per-task=4
#SBATCH —time=7-0:0

Шаблон 1

где:

#SBATCH -p compute имя партиции на которой будет проводится расчёт.
#SBATCH —gres=gpu:2 количество графических карт запрашиваемых для расчёта.
#SBATCH —mem=50G объём запрашиваемой оперативной памяти.
#SBATCH —cpus-per-task=4 Количество ядер запрашиваемое для выполнения задачи.
#SBATCH —time=7-0:0 время которое требуется для задачи, по прошествии данного времени задача автоматически будет остановлена.

  1. Подготовка контейнер для расчёта

Вариант 1

Готовый Docker контейнер из репозиториев Docker


Важно! Готовый контейнер должен быть на базе СUDA-11


добавляем в наш batch скрипт (шаблон 1) строку

singularity run --nv docker://nvidia/cuda:11.0-devel-ubi7 nvidia-smi


singularity run запустит контейнер на DGX-2

--nv обеспечит проброс графических ускорителей в контейнер

конструкция docker://nvidia/cuda:11.0-devel-ubi7 загрузит контейнер в домашний каталог

данная команда равносильна команде Docker

docker pull nvidia/cuda:11.0-devel-ubi7

nvidia-smi это команда которая выполнится внутри контейнера, результат выполнения команды появится в домашнем каталоге в файле slutrm-*.out


Вариант 2

Готовый Docker контейнер из репозиториев NGC https://ngc.nvidia.com/

Важно! Готовый контейнер должен быть на базе СUDA-11 (во вкладке tag pull доступны контейнеры CUDA 8, 9, 10, 11)


В данном репозитории хранятся контейнеры docker оптимизированные для работы с DGX

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

Пройти процедуру регистрации нужно на сайте https://ngc.nvidia.com/ она бесплатна.


Для загрузки контейнеров из хранилища, нам нужно добавить в batch скрипт (шаблон 1) 2 параметра

export SINGULARITY_DOCKER_USERNAME='$oauthtoken'

export SINGULARITY_DOCKER_PASSWORD= значение находится в личном кабинете NGC


Входим в личный кабинет > верхнем правом углу кликаем по своему аккаунту > setup


Setup

В открывшемся окне кликаем Get API Key


Get API Key

Далее нажимаем Generate API Key


Generate API Key

полученный ключ копируем в batch скрипт

export
SINGULARITY_DOCKER_PASSWORD='aHFhYXFlNzhxNnVtcWRyMWljZzZkaW41a3M6YmU4NWZiZmEtNTY­xMC00YzdlLWEzYzctNzEzOTIxNjViYjA5'

и добавляем строку (в примере загрузка контейнера gromacs)

singularity run --nv docker://nvcr.io/hpc/gromacs:2018.2 nvidia-smi

Вариант 3

Ручная сборка выполняется на домашнем пк. (работы производятся под пользователем root)
  1. на домашнем ПК устанавливается ПО Singularity https://singularity.lbl.gov/install-linux
  2. загружается подходящий контейнер, рекомендую использовать шаблон что представлен в примере
  3. singularity build --sandbox name_container/ docker://nvcr.io/nvidia/cuda:11.0-devel
  4. заходим в контейнер в интерактивном режиме
  5. singularity shell --writable name_container/
  6. выполняем установку, компиляцию необходимого ПО
  7. после завершения установки ПО создаем образ контейнера
  8. singularity build name_container.simg name_container/
  9. копируем контейнер в домашний каталог на узел доступа
  10. в batch скрипт (шаблон 1) добавляем строчку
  11. singularity -d run --nv name_container.simg nvidia-smi

Как запустить в контейнере свой скрипт, код, бинарный файл?

В примерах использовалась команда nvidia-smi она служит индикатором того что контейнер собран правильно, если мы получаем информацию о версии сuda и видеокарте.

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

Например:

singularity -d run --nv tensorflow.simg python $HOME/tensor_test.py

ещё пример:

singularity -d run --nv СUDA.simg nvcc /$HOME/example.cu

пример с репозиторием

singularity run --nv docker://nvcr.io/nvidia/cuda:11.0-devel nvcc $HOME/example.cu

$HOME это домашний каталог, находится он в общем хранилище и доступен как на узле пользователя так и DGX-2.

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

Запуск задачи.

запустить скрипт командой sbatch {batch file}

Просмотр управление очередью.

Для просмотра очереди используйте команду:
[dgx_tester@dgx-login ~]$ squeue

JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)

68 compute date-con dgx_test R 0:04 1 cngpu01

69 compute date-con dgx_test R 0:01 1 cngpu01

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

[dgx_tester@dgx-login ~]$ sinfo

PARTITION AVAIL TIMELIMIT NODES STATE NODELIST

compute* up 2-00:00:00 1 idle cngpu01


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

Дополнительная информация по работе Singulatyti https://singularity.lbl.gov/docs-pull# в разделе User Guide

Дополнительная информация по работе Slurm https://slurm.schedmd.com/tutorials.html