Slurm accounting

Учетные записи в Slurm  .  Пользователи и учёт.

В Slurm есть две системы учёта пользователей. Первая система основана на системных учётных записях, хранит в служебных файлах обобщённую статистику истории запуска задач и используется для простой системы вычисления приоритетов — share. Вторая система — полноценная система биллинга использует БД для хранения полной истории запуска задач, системы учётных групп (account), ограничений ресурсов (QOS) и т.п.

Первая система не требует использования БД и сохраняет текущую информацию в файлах в каталоге, заданном параметром StateSaveLocation:

assoc_mgr_state, assoc_usage, clustername, dbd.messages,
fed_mgr_state,  job_state, last_config_lite, layouts_state_base,
node_state, part_state, priority_last_decay_ran, qos_usage, resv_state, trigger_state

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

sacctmgr -i add user testuser DefaultAccount=root 
Ассоциация (Association)

Учёт ресурсов в Slurm ведётся на основе учётных ассоциаций, каждая из которых объединяет четыре понятия:

  • кластер;
  • учетную группу (account);
  • имя пользователя;
  • необязательное имя раздела (partition).

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

Создание кластера

Кластер описывается в двух местах: в конфигурации Slurm и в учётной базе данных.

slurm.conf

AccountingStorageType=accounting_storage/slurmdbd
AccountingStoreJobComment=YES
ClusterName=cicc

Создание записи в базе:

sacctmgr add cluster cicc
Создание учетных групп
  • Учетная группа (account) используется для подсчёта ресурсов, использованных для запуска задач в рамках какого-либо договора, проекта и т.п.;
  • Накопленные данные об использованных ресурсах влияют на приоритет задач, запускаемых от имени учетной группы;
  • Учетная группа может быть использована для установки уровня обслуживания (QOS) задач, запускаемых от имени учетной группы;
  • С учетной группой может быть связано произвольное количество пользователей, в том числе ни одного;
  • Учетные группы могут быть организованы в иерархическое дерево путём назначения группе родительской группы;
  • Верхний уровень иерархии имеет стандартное имя root;
  • Имя учетной группы должно быть уникальным и не может быть использовано повторно в другой ветви иерархии учетных групп;
  • При подсчете приоритетов учитывается положение группы в иерархии;
  • Пользователь может связан с несколькими учетными группами, но должен иметь группу по умолчанию (DefaultAccount).

Примеры команд для создания иерархии организации и иерархии внешних пользователей, работающих по договорам:

sacctmgr add account imm Description="Институт математики и механики" Organization=imm
sacctmgr add account imm_opo Description="Отдел программного обеспечения" Organization=imm_opo parent=imm
sacctmgr add account imm_opo_sector_1 Description="Сектор системного программирования" Organization=imm_opo parent=imm_opo

sacctmgr add account external Description="Внешние пользователи" Organization=external
sacctmgr add account dogovor_10 Description="Договор N10" Organization=external
sacctmgr add account dogovor_11 Description="Договор N11" Organization=external

Отображение созданных учетных записей:

sacctmgr show account format=Account%30,Description%60
sacctmgr show account -s   # Показывает ассоциации связанные с аккаунтами

Moдификация учентных записей:

При добавлении или изменении учетной группы доступны следующие параметры:

  • Cluster= добавить учетную группу в указанные кластеры. По умолчанию учетная группа добавляется ко всем существующим кластерам.
  • Description= описание учетной группы. (По умолчанию — имя учетной группы)
  • Name= имя учетной записи.
  • Organization= организация на которую зарегистрирована учетная группа. По умолчанию это организация родительской учетной группы, если родительская учетная группа не является корневой. Если родитель root, то при создании по умолчанию используется имя учетной группы.
  • Parent= сделать эту учетную группу дочерним элементом другой учетной группы (уже существующей).

sacctmgr show account format=Account%30,Description%60 :

========================================================

account Descr Org
 ===========  =========  =======
alice alice lhc
atl_mcore atl_mcore lhc
bes bes grid
cms_mcore cms_mcore lhc
compass compass grid
etf etf etf
grid grid grid
ilc ilc grid
juno juno grid
lhc lhc lhc
lhcb lhcb lhc
nica nica nica
nova nova grid
root default root default root
users users users

==========================================================

sacctmgr show account -s:

Account Decrr Org Cluster ParentName User Share Priority GrpCPUs MaxSubmit QOS Def QOS
alice alice lhc cicc lhc 500 500 1200 middle middle
alice alice lhc cicc alice001 500 500 middle middle
bes bes grid cicc grid 300 300 100 normal normal
bes bes grid cicc bes001 300 300 normal normal
etf etf etf cicc root 600 3000 normal normal
etf etf etf cicc sali001 600 1000 normal normal
etf etf etf cicc satl001 600 5000 normal normal
etf etf etf cicc ssms001 600 5000 normal normal
etf etf etf cicc sdtm001 600 1000 normal normal
etf etf etf cicc slhcb001 600 5000 normal normal
grid grid grid cicc root 300 300 normal normal
ilc ilc grid cicc grid 300 300 100 normal normal
ilc ilc grid cicc ilc001 300 300 normal normal
juno juno grid cicc grid 300 300 100 normal normal
juno juno grid cicc sjuno001 300 300 normal normal
lhc lhc lhc cicc root 500 500 midl midl
lhcb lhcb lhc cicc lhc 500 500 1200 midl midl
lhcb lhcb lhc cicc lhcb001 500 500 midl midl
nica nica nica cicc root 350 350 3000 2000 middle middle
nica nica nica cicc bmn001 350 350 1000 2000 middle middle
nica nica nica cicc mpd001 350 350 1000 2000 middle middle
nica nica nica cicc spd001 350 350 1000 2000 middle middle
nova nova grid cicc grid 300 300 100 normal normal
nova nova grid cicc nova001 300 300 100 normal normal
normal normal
root default root account root cicc 1 normal
root default root account root cicc root 1 normal
users users users cicc root 150 150 400 low low
users users users cicc berd 150 150 400 low low
users users users cicc aitbaev 150 150 100 low low
users users users cicc amaresh 150 150 500 low low
users users users cicc belolap 150 150 700 low low
users users users cicc zontikov 150 150 700 low low

==============================

Создание пользователей

Создание пользователя Slurm с именем xxx и учетной группой по умолчанию (обязательно) yyy:

sacctmgr create user name=xxx DefaultAccount=yyy

При необходимости пользователи могут также добавляться в дополнительные учетные группы, например:

sacctmgr add user xxx Account=zzzz

Имя учетной группы может указываться в пакетных заданиях пользователя, например, с помощью sbatch :

-A <account> или --account=<account> 

Список пользователей:

sacctmgr show user #показывает пользователей и их учетные группы по умолчанию
sacctmgr show user -s #показывает пользователей и все их ассоциации
sacctmgr show user -s test_user #выдает учетные группы пользователя test_user

При добавлении или изменении пользователя доступны следующие параметры:

  • Account= Учетная группа(ы) для добавления пользователя (см. также DefaultAccount ).
  • AdminLevel= Это поле используется, чтобы позволить пользователю добавлять учетные привилегии этому пользователю. Возможные варианты:
    • None
    • Operator — может добавлять/изменять/удалять любой объект базы данных (пользователь, учетная запись и т. Д.) и добавлять других операторов. На SlurmDBD, обслуживаемом slurmctld, эти пользователи могут: просматривать информацию, которая блокируется для регулярного использования флагом PrivateData; создавать/изменять/удалять бронирование.
    • Admin — эти пользователи имеют тот же уровень привилегий, что и оператор в базе данных. Они также могут изменять что-либо в slurmctld, как если бы они были пользователем slurm или root.
  • Cluster= добавлять к ассоциациям только на этих кластерах (по умолчанию все кластеры)
  • DefaultAccount= учетная группа по умолчанию. (обязательный параметр).
  • DefaultWCKey= пользовательский ключ по умолчанию для пользователя, используемый, когда не указан WCkey при отправке задания. (Используется только при отслеживании WCkey .)
  • Name= имя пользователя
  • Partition= Название раздела Slurm, к которому относится данная ассоциация.
Изменение и удаление объектов

При изменении свойств объектов и при их удалении можно задавать параметры в стиле SQL, используя ключевые слова WERE и SET. Некоторые параметры, например имя объекта, изменить нельзя. Типичная команда имеет следующий вид:

sacctmgr modify <entity> set <options> where <options>

Например:

sacctmgr modify user where user=example set defaultaccount=groupb
sacctmgr modify user set DefaultAccount=none where DefaultAccount=test

меняет у пользователей учетную группу по умолчанию "test" на "none". Удаление пользователя из учетной группы: sacctmgr remove user brian where Account=imm_opo
sacctmgr delete user example account=groupa

Удаление пользователей означает, в первую очередь, удаление ассоциаций.

После того, как объект был добавлен, изменен или удален, соответствующие изменения отправляются соответствующим демонам Slurm и мгновенно становятся доступными для использования.

Примечание. В большинстве случаев удаленные объекты сохраняются, но помечены как удаленные. Если объект существовал менее 1 дня, то он будет удален полностью. Такое поведение предназначено для защиты от опечаток.

Изменения лимита CPU для конкретного account
Для переназначения (изменения) лимита CPU для конкретного account в Slurm используется команда   sacctmgr с правами администратора. Основной способ — изменение ассоциации, устанавливающей жесткое ограничение (GrpTRES) на количество ядер.
Основная команда для изменения лимита CPUs
Чтобы изменить лимит CPU для AccountName на, например, 100 ядер:
sacctmgr modify account where name=AccountName set GrpTRES=cpu=100
Разбор команды и нюансы
  1. sacctmgr modify account: Основная команда для изменения настроек аккаунта.
  2. where name=...: Указывает, какой именно аккаунт (группу) нужно изменить.
  3. set GrpTRES=cpu=...: Устанавливает общее количество ресурсов (Trackable Resources) для аккаунта. В Slurm CPU часто определяются через GrpTRES.
  4. MaxJobs, MaxNodes: Также можно установить через set для ограничения количества заданий или узлов.
Примеры использования
  • Установить лимит в 500 ядер для группы physics:
    sacctmgr modify account where name=physics set GrpTRES=cpu=500
  • Снять ограничение (установить в бесконечность):
    sacctmgr modify account where name=physics set GrpTRES=cpu=-1
  • Изменить лимит для конкретного пользователя внутри аккаунта:
    sacctmgr modify user where name=UserName account=AccountName set GrpTRES=cpu=50
Проверка изменений
Чтобы убедиться, что лимиты применились:
sacctmgr show account AccountName format=Name,GrpTRES
Изменения обычно вступают в силу немедленно, влияя как на новые, так и на уже запущенные задания.

Печать объектов
sacctmgr show cluster|account|user [-s] format=account%20,description%40  [<name>]
sacctmgr show cluster|account|user [-s] [-n] -p [<name>]
  • -s показывает связанные объекты
  • format= задает список полей и количество символов, отводимых на поле
  • -n — без строки заголовка
  • -p — формат удобный для программного разбора

Использованы материалы со страницы https://wiki.fysik.dtu.dk/niflheim/Slurm_accounting