Назад | Перейти на главную страницу

Автоматизация планирования и отправки вычислительных заданий разными пользователями

Я собираюсь установить Linux-сервер (вероятно, CentOS) в отделе информатики. Сервер будет использоваться в качестве вычислительного сервера людьми, занимающимися исследованиями в области вычислений на GPU, биоинформатики или искусственного интеллекта.

Гипотетически я мог бы просто дать оболочку каждому пользователю и позволить им запускать свои задания, и, вероятно, именно этим я и займусь вначале.

Однако я сталкиваюсь с потенциальной проблемой: иногда машина будет использоваться как вычислительное средство с целью просто получить результаты вычислений, а иногда она будет использоваться как сравнительный анализ платформа, чтобы измерить эффективность новых методов / алгоритмов / чего угодно.

Это означает, что пока сервер используется для задачи второго типа, другие пользователи не должны иметь возможности запускать другие тяжелые задачи, влияя на результаты тестирования.

Поэтому я хотел бы настроить и, возможно, автоматизировать такую ​​систему:

  1. Как правило, у пользователей нет ограничений на ресурсы, и различные задания планируются и обычно совместно используют ресурсы системы.
  2. Если пользователь запускает «приоритетное» задание, другие пользователи попадают в ограниченное cgroup, ограниченный только одним или двумя доступными ЦП и ограниченным лимитом использования памяти.
  3. Приоритетное задание запускается на отдельной cgroup который имеет доступ ко всем остальным процессорам и не имеет ограничений на использование памяти

Есть ли программный пакет, который помогает автоматизировать такую ​​архитектуру? Все, что я нахожу в Интернете, говорит об оркестровке контейнеров, но разница в том, что я хочу ограничить ресурсы, используемые другие пока моя работа выполняется, поэтому размещение работы в контейнере не помогает.

Я также посмотрел на что-то вроде dockersh, чтобы реализовать обратное: все напрямую входят в систему внутри контейнера, поэтому я могу легко выделять ресурсы каждому по запросу. Но, dockersh кажется неподдерживаемым, и я не нашел ничего другого, реализующего ту же концепцию.

Linux с systemd можно установить cgroups управление ресурсами на единицы. Вы можете установить большой коэффициент для machine.slice, например CPUShares=100000. Затем запускайте важные задания как контейнеры в этом срезе.

Квота, вводимая только при выполнении заданий, может быть более сложной. Квоты статичны и могут нуждаться в корректировке. Возможно, такой сценарий (спасибо Вики Криса)

systemctl --runtime set-property user-1001.slice CPUQuota=200% 

Если вам нужны дополнительные функции, такие как управление пакетными заданиями, вам нужно будет найти или написать систему, которая это сделает.