Вопрос или проблема
Я использую Slurm 21.08.5, установленный через apt.
Мой кластер состоит из 4 GPU машин (nd-gpu[001-005]) с 8 GPU в каждой. Я могу запускать задания следующим образом:
srun --gres=gpu:8 nvidia-smi -L
И я вижу свои GPU. Я также могу планировать реальные задания с любым числом GPU от 0 до 8. Однако планирование ресурсов работает неправильно.
Если я запускаю:
srun --gres=gpu:1 sleep 1000
Вся нода будет выделена, и я не смогу использовать оставшиеся 7 GPU на этой ноде.
Следующий файл gres.conf:
NodeName=nd-gpu001 Name=gpu File=/dev/nvidia0
NodeName=nd-gpu001 Name=gpu File=/dev/nvidia1
NodeName=nd-gpu001 Name=gpu File=/dev/nvidia2
NodeName=nd-gpu001 Name=gpu File=/dev/nvidia3
NodeName=nd-gpu001 Name=gpu File=/dev/nvidia4
NodeName=nd-gpu001 Name=gpu File=/dev/nvidia5
NodeName=nd-gpu001 Name=gpu File=/dev/nvidia6
NodeName=nd-gpu001 Name=gpu File=/dev/nvidia7
NodeName=nd-gpu002 Name=gpu File=/dev/nvidia0
NodeName=nd-gpu002 Name=gpu File=/dev/nvidia1
NodeName=nd-gpu002 Name=gpu File=/dev/nvidia2
NodeName=nd-gpu002 Name=gpu File=/dev/nvidia3
NodeName=nd-gpu002 Name=gpu File=/dev/nvidia4
NodeName=nd-gpu002 Name=gpu File=/dev/nvidia5
NodeName=nd-gpu002 Name=gpu File=/dev/nvidia6
NodeName=nd-gpu002 Name=gpu File=/dev/nvidia7
NodeName=nd-gpu003 Name=gpu File=/dev/nvidia0
NodeName=nd-gpu003 Name=gpu File=/dev/nvidia1
NodeName=nd-gpu003 Name=gpu File=/dev/nvidia2
NodeName=nd-gpu003 Name=gpu File=/dev/nvidia3
NodeName=nd-gpu003 Name=gpu File=/dev/nvidia4
NodeName=nd-gpu003 Name=gpu File=/dev/nvidia5
NodeName=nd-gpu003 Name=gpu File=/dev/nvidia6
NodeName=nd-gpu003 Name=gpu File=/dev/nvidia7
NodeName=nd-gpu004 Name=gpu File=/dev/nvidia0
NodeName=nd-gpu004 Name=gpu File=/dev/nvidia1
NodeName=nd-gpu004 Name=gpu File=/dev/nvidia2
NodeName=nd-gpu004 Name=gpu File=/dev/nvidia3
NodeName=nd-gpu004 Name=gpu File=/dev/nvidia4
NodeName=nd-gpu004 Name=gpu File=/dev/nvidia5
NodeName=nd-gpu004 Name=gpu File=/dev/nvidia6
NodeName=nd-gpu004 Name=gpu File=/dev/nvidia7
файл slurm.conf:
# См. страницу man для slurm.conf для получения дополнительной информации.
#
ClusterName=cluster
SlurmctldHost=nd-cpu01
SlurmctldHost=nd-cpu02
#
#GresTypes=
#GroupUpdateForce=0
ProctrackType=proctrack/cgroup
ReturnToService=1
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
SlurmUser=slurm
StateSaveLocation=/home/slurm/slurmctd
TaskPlugin=task/affinity,task/cgroup
# ТАЙМЕРЫ
InactiveLimit=0
KillWait=30
MinJobAge=300
SlurmctldTimeout=120
SlurmdTimeout=300
Waittime=0
# ПЛАНИРОВАНИЕ
SchedulerType=sched/backfill
SelectType=select/cons_tres
# ЖУРНАЛИРОВАНИЕ И УЧЕТ
JobCompType=jobcomp/none
JobAcctGatherFrequency=30
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurmd.log
# ВЫЧИСЛИТЕЛЬНЫЕ НОДЫ
GresTypes=gpu
NodeName=nd-gpu[001-004] Sockets=2 CoresPerSocket=56 ThreadsPerCore=1 State=UNKNOWN Gres=gpu:8
PartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP
и файл cgroups.conf:
ConstrainDevices=yes
Ответ или решение
Проблема, с которой вы сталкиваетесь, связана с неправильным распределением ресурсов GPU в вашем кластере Slurm. Когда вы запускаете команду srun --gres=gpu:1 sleep 1000
, и вся нода занимает все 8 GPU, это может быть связано с несколькими факторами, которые мы рассмотрим ниже.
Возможные причины проблемы и решения
-
Конфигурация GRES (Generic Resources):
Убедитесь, что ваша настройкаgres.conf
правильно определяет ресурсы GPU на каждой узле. Ваш файлgres.conf
, судя по предоставленным данным, выглядит корректно, так как он перечисляет каждый GPU на каждой ноде. Однако, проверьте, чтобыGresTypes=gpu
было явно указано вslurm.conf
. -
Опции
SelectType
иSelectTypeParameters
:
Параметр в файлеslurm.conf
SelectType=select/cons_tres
является верным, но не забудьте также указать параметрыSelectTypeParameters
для правильной конфигурации ресурсов. Убедитесь, что вы добавилиSelectTypeParameters=CR_CPU,Gres
, если вы используете только ресурсы GPU. -
Проверка состояния узлов:
Выполните командуsinfo
для проверки состояния ваших узлов. Убедитесь, что они находятся в состоянииUP
и доступны для работы. Также можно использовать командуscontrol show nodes
, чтобы увидеть детальную информацию о каждом узле, включая доступные ресурсы и статус. -
Ресурсные ограничения:
Проверьте, нет ли установленных ограничений в вашей конфигурации на использование ресурсов. В параметрах запуска вы можете задать дополнительные ограничения в зависимости от ваших нужд. Например, если у вас есть ограничения по количеству запущенных задач на один узел, это может повлиять на выделение ресурсов. -
Классы ресурсов (partition):
Убедитесь, что ваша конфигурацияPartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP
не накладывает никаких дополнительных ограничений на использование GPU. -
Логи Slurm:
Проверьте логи Slurm (/var/log/slurmctld.log
и/var/log/slurmd.log
) на наличие ошибок или предупреждений. Это может дать вам подсказки о том, почему ресурсы распределяются неправильно. Обратите внимание на сообщения об ошибках и предупреждениях, которые могут говорить о проблемах с конфигурацией или взаимодействием между компонентами. -
Тестирование с учетом более поздней версии:
Рассмотрите возможность обновления вашей версии Slurm. Версия 21.08.5 может иметь известные ошибки, которые были исправлены в более поздних версиях.
Пример изменения конфигурационного файла
Добавление параметра SelectTypeParameters
в slurm.conf
:
SelectTypeParameters=CR_CPU,Gres
После внесения изменений в конфигурационные файлы не забудьте перезапустить службы Slurm:
sudo systemctl restart slurmctld
sudo systemctl restart slurmd
Заключение
При тщательном анализе ваших конфигурационных файлов и логов, а также проверке состояния узлов, вы сможете устранить проблему с выделением GPU в вашем кластере. Убедитесь, что все настройки пропорциональны вашим требованиям и, при необходимости, обратитесь к документации Slurm для получения дополнительных рекомендаций. Если проблема сохраняется, рассмотрите возможность обращения в сообщество поддержки Slurm или на форумы, где специалисты смогут оказать вам дополнительную помощь.