Заметки про SLURM
SLURM - система управления заданиями для суперкомпьютерных систем. Если это не то, что вы думали, то дальше читать нет смысла. Тут мои заметки по возможностям этой системы.
Reservations (резервы)
Полезные опции: duration=infinite duration=10-00:00:00, StartTime=now+1day,
NodeCnt=10
Полезные флаги:
- IGNORE_JOBS создать резерв, даже если не можем гарантировать, что нужные узлы (число узлов) освободится к его началу;
- OVERLAP можно перекрывать другие резервы (аналогично MAINT);
- REPLACE_DOWN автоматически добавить в резерв узлы взамен отключившихся или ушедших в DRAIN;
-
MAGNETIC если задача пользователя подходит под условия резерва, она автоматом запустится в резерве (не надо писать
sbatch --reservation=...).
Опции slurm.conf: ResvProlog и ResvEpilog - пролог/эпилог для резервов.
Выделение ресурсов
За это отвечает опция SelectType в конфиге. В случае select/linear выделяются узлы целиком. Иначе - по ресурсам. select/cons_res и select/cons_tres похожи, тамм тоже можно включить выделение узла целиком, если в разделе включить OverSubscribe=Exclusive. Виды ресурсов, по которым будет вестись планирование, задаются параметром SelectTypeParameters. Для linear возможно указание памяти, как ресурса. Возможные варианты для res/tres:
- CR_CPU Ресурс = CPU
- CR_CPU_Memory Ресурс = память Рекомендуется выставить DefMemPerCPU.
- CR_Core Ресурс = ядро
- CR_Core_Memory Ресурсы = память+ядро
- CR_ONE_TASK_PER_CORE Выделять ядра целиком
- CR_CORE_DEFAULT_DIST_BLOCK Выделять ядра “блоками”
- CR_LLN Занимать наименее занятые узлы
- CR_Pack_Nodes
“Заполнять” узлы максимально одной задачей по умолчанию вместо развномерного распределеняи по узлам. Можно отключить опцией
srun --distribution NoPack. - CR_Socket Ресурс = сокет
- CR_Socket_Memory Ресурсы = память+сокет
- CR_Memory Ресурс = память
Для tres ещё два параметра:
- DefCpuPerGPU - число CPU на один GPU
- DefMemPerGPU - объём памяти на GPU
Параметры узла
Features - чезер запятую список произвольных характеристик, возможно с численными значениями. Они не счётные - или есть или нет. Запрашивать их можно параметром sbatch --constraint.
Gres - список ресурсов в формате <name>[:<type>][:no_consume]:<number>[K|M|G]. name должно быть в GresType. type - название модели и т.п. Пример: Gres=gpu:tesla:1,gpu:kepler:1,bandwidth:lustre:no_consume:4G.
Разное
Каталог для хранения состояния - /var/spool, может быть изменён StateSaveLocation.
TaskPlugin=task/affinity,task/cgroup - да, так можно и нужно.
en|ru