Ограничения PBS на использование ресурсов

  • PBS позволяет ограничить максимальное количество определённого ресурса, которое может быть одновременно занято всеми работающими задачами конкретного пользователя. Если запуск очередной задачи приведёт к превышению такого имеющегося ограничения, тогда эта задача не будет запускаться, даже если все необходимые ей ресурсы свободны.
  • Задача с запросом ресурсов, превышающим какое-либо действующее ограничение, будет без каких-либо замечаний поставлена командой 'qsub' в очередь, но никогда не запустится, т.к. PBS неспособен предоставить ей запрошенные ресурсы. Такие задачи администраторами ИВЦ НГУ периодически удаляются.
  • У нас применяются ограничения как минимум на следующие типы ресурсов:
  • Ограничения бывают глобальными (пременимыми ко всему кластеру) и локальными для какой-то определённой очереди задач.
  • Ограничения бывают персональными (применимыми к конкретной учётной записи) или пременимыми ко всем пользователям. Персональные ограничения имеют более высокий приоритет.
  • Значения ограничений со временем могут изменяться для управления текущей нагрузкой на кластер. Например:
    • Если на кластере интенсивно работает всего несколько пользователей и много свободных ресурсов простаивает (хотя в очереди есть задачи, ожидающие запуска) - тогда значения ограничения увеличивается, чтобы избежать неоправданного простоя.
    • Если с определённым ресурсом активно работает большое количество пользователей и все ресурсы заняты (нет свободных GPU, нет ни одного полностью свободного узла определённного типа, …), тогда значение ограничения уменьшается, чтобы досталось всем, пусть и меньше.
  • При этом имеются минимальные значения ограничений, ниже которых ограничения не опускаются, либо об уменьшении сообщается через список рассылки. Средствами pbs их просмотреть нельзя.
  • По состоянию на июнь 2020 эти ограничения:
    • 72 ncpus
    • 9 ngpus
  • :!: Если пользователь запрашивает для задачи максимальное количество ресурсов, ориентируясь на текущие значениях ограничений в момент выполнения qsub, то может получиться так, что к тому времени, как необходимые ресурсы освободятся, значения ограничений будут уменьшены и задача не сможет запуститься. Поэтому не стоит в рамках одной задачи запрашивать больше ресурсов, чем установленные минимальные значения ограничений.
  • Просмотреть текущий список всех ограничений можно на интерфейсном сервере следующей командой:
    qmgr -c'print server'|grep max_run|grep -v hpcuser|sort
    set queue bl2x220g6q max_run_res.ncpus = [u:PBS_GENERIC=80]
    set queue bl2x220g7q max_run_res.ncpus = [u:PBS_GENERIC=96]
    set queue xl230g9q max_run_res.ncpus = [u:PBS_GENERIC=24]
    set server max_run_res.lic_matlab = [u:PBS_GENERIC=3]
    set server max_run_res.ncpus += [u:avpetrov=16]
    set server max_run_res.ncpus = [u:PBS_GENERIC=96]
    set server max_run_res.ngpus = [u:PBS_GENERIC=18]
  • В данном случае:
    • Каждый может использовать не более 18 ngpus
    • Каждый может использовать не более 96 ядер CPU, при этом дополнительно накладываются ограничения:
      • Не более 80 ядер в очереди bl2x220g6q
      • Не более 96 ядер в очереди bl2x220g7q
      • Не более 24 ядер в очереди xl230g9q
    • Пользователь 'avpetrov' может занимать не более 16 ядер.
    • Каждый может использовать не более 3х лицензий lic_matlab. Подобные правила позволяют управлять выдачей лицензий при работе нескольких пользователей,