Вычислительный комплекс для AI, ML, DL на базе DGX-2 в Центре хранения и анализа данных МГУ
Состав комплекса.
- Вычислительный узел DGX-2
- Узел доступа пользователей
- SLURM планировщик задач
- Общее хранилище
Вычислительный узел 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 из общих хранилищ , так и самостоятельно подготовить свой контейнер.
Рассмотрим типовой запуск задачи.
- Нужно подготовить 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
Готовый 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
В открывшемся окне кликаем Get API Key
Далее нажимаем Generate API Key
полученный ключ копируем в batch скрипт
export
SINGULARITY_DOCKER_PASSWORD='aHFhYXFlNzhxNnVtcWRyMWljZzZkaW41a3M6YmU4NWZiZmEtNTYxMC00YzdlLWEzYzctNzEzOTIxNjViYjA5'
и добавляем строку (в примере загрузка контейнера gromacs)
singularity run --nv docker://nvcr.io/hpc/gromacs:2018.2 nvidia-smi
Вариант 3
Ручная сборка выполняется на домашнем пк. (работы производятся под пользователем root)- на домашнем ПК устанавливается ПО Singularity https://singularity.lbl.gov/install-linux
- загружается подходящий контейнер, рекомендую использовать шаблон что представлен в примере singularity build --sandbox name_container/ docker://nvcr.io/nvidia/cuda:11.0-devel
- заходим в контейнер в интерактивном режиме singularity shell --writable name_container/
- выполняем установку, компиляцию необходимого ПО
- после завершения установки ПО создаем образ контейнера singularity build name_container.simg name_container/
- копируем контейнер в домашний каталог на узел доступа
- в batch скрипт (шаблон 1) добавляем строчку 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