Slurm - это бесплатный планировщик задач с открытым исходным кодом, который можно использовать в HPC (High-performance computing). Данная статья призвана минимизировать количество проблем, возникающих у пользователя при сборке данного ПО.
Последовательность действий
Автор использовал ОС Ubuntu Server 22.04. Стоит упомянуть, что сборка/установка пакетов должна быть одинакова на всех нодах кластера.
Munge
Нельзя просто взять и установить Slurm. Для начала нужно установить Munge (https://dun.github.io/munge) - сервис аутентификации. Он нужен для того, чтобы ноды в кластере могли опознать друг друга с помощью ключа. Рекомендуется создать для него отдельного пользователя без права входа для максимальной безопасности. Для удобства запуск демона будет производиться от root, и только сборка от отдельного пользователя "munge". Собирается так:
sudo su
addgroup munge
adduser --gecos "" --ingroup munge --disabled-login --uid 1001 munge
apt-get install libssl-dev
cd /home/munge
wget https://github.com/dun/munge/releases/download/munge-0.5.15/munge-0.5.15.tar.xz
tar xJf munge-0.5.15.tar.xz
chown -R munge munge-0.5.15
cd munge-0.5.15
runuser -l munge -c '/home/munge/munge-0.5.15/configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --runstatedir=/run'
runuser -l munge -c 'make'
runuser -l munge -c 'make check'
cd ..
make install
Важно, чтобы GID и UID munge-пользователя совпадали на всех нодах кластера!
После этого можно указать пользователя, от которого будет производиться запуск, в файле /lib/systemd/system/munge.service:
User=munge -> User=root
Group=munge -> Group=root
Далее нужно сгенерировать ключ, который будет находиться на всех машинах кластера, использующих Slurm:
cd /etc/munge
sudo -u munge mungekey
Нужен только один ключ на кластер, поэтому он генерируется один раз. Поскольку для примера используем пользвателя root для запуска, меняем права и владельца ключа:
sudo chmod 0600 /etc/munge/munge.key
sudo chown root /etc/munge/munge.key
После этого munge-демон должен успешно запуститься:
systemctl daemon-reload
systemctl enable munge.service
systemctl start munge.service
systemctl status munge.service
Slurm
Если есть необходимость использовать MPI, то нужно произвести еще несколько действий. Соберем и установим OpenMPI:
wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.5.tar.gz
tar xfz openmpi-4.1.5.tar.gz
cd openmpi-4.1.5
./configure --with-cuda=/usr/local/cuda
make -j 32 all 2>&1 | tee make.out
sudo make install 2>&1 | tee install.out
sudo ldconfig
И установим пару необходимых пакетов:
sudo apt install libpmix-dev
sudo apt install libdbus-1-dev
Далее можно приступить к сборке и установке самого Slurm:
wget https://download.schedmd.com/slurm/slurm-23.02.3.tar.bz2
tar --bzip -x -f slurm-23.02.3.tar.bz2
cd slurm-23.02.3
./configure --with-pmix=/usr/lib/x86_64-linux-gnu/pmix2
make
sudo make install
Баг: отсутствуют slurmd.service slurmctld.service
После make install сервисы могут не скопироваться в /lib/systemd/system. Можно сделать это вручную:
cd slurm-23.02.3
sudo cp ./etc/slurmd.service /lib/systemd/system
sudo cp ./etc/slurmctld.service /lib/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable slurmd
sudo systemctl enable slurmctld
Запуск
Сначала нужно создать файл конфигурации. Для этого есть специальная страница - https://slurm.schedmd.com/configurator.html. Также существует упрощенный конфигуратор, можно использовать для тестового запуска - https://slurm.schedmd.com/configurator.easy.html.
После выбора всех опций и нажатия кнопки "submit" получим текст конфига - его записываем в /usr/local/etc/slurm.conf. Он также должен быть одинаковым на всех машинах в кластере.
slurmctld (управляющий демон) и slurmd (исполняющий демон) запускаются просто:
systemctl start slurmctld
systemctl start slurmd
Можно запускать оба на одной машине.
Вот так, разобравшись с зависимостями в виде Munge, OpenMPI и нескольких неочевидных пакетов, можно самостоятельно собрать, установить и сконфигурировать Slurm.