Облачная платформаEvolution

Система приоритетов и вытеснения нагрузки

Эта статья полезна?

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

В Default- и Custom-очередях поддерживаются базовые приоритеты:

  • Высокий high — применяется для важной и срочной нагрузки, требующей гарантированных ресурсов.

  • Средний medium — применяется для важной, но не срочной нагрузки. Такая нагрузка выполняется после всех нагрузок с приоритетом high, но имеет преимущество перед нагрузкой с приоритетом low.

  • Низкий low — применяется для фоновых нагрузок, экспериментов и длительных вычислений, которые не требуют немедленного результата.

В Shared-очереди поддерживаются специальные приоритеты:

  • shared-medium — средний приоритет в Shared-очереди.

  • shared-low — самый низкий приоритет в Shared-очереди.

В Shared-cluster очереди можно использовать только приоритет shared-cluster — наименьший приоритет в системе.

Приоритет нагрузки (задач обучения, Jupyter Servers и приложений Playground) вы можете задать при запуске через интерфейс Distributed Train, client_lib, CLI или API.

priority_class = "low" | "medium" | "high" | "shared-medium" | "shared-low" | "shared-cluster"

Соблюдение приоритетов в системе обеспечивает механизм вытеснения нагрузки. Когда появляется нагрузка с более высоким приоритетом, система останавливает выполняющуюся нагрузку с низким приоритетом и освобождает ресурсы.

Порядок выполнения нагрузки

При поступлении нагрузки система классифицирует ее по категориям приоритета.

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


Высокий приоритет high — нагрузка выполняется строго последовательно по принципу FIFO (First In, First Out).

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

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

Ниже представлены примеры последовательности запуска нагрузок high в разных ситуациях:

  • Пример 1: Последовательное выполнение нагрузок high

  • Пример 2: Выбор нагрузки по принципу FIFO среди нагрузок high

  • Пример 3: Параллельный запуск нагрузок

  • Пример 4: Взаимодействие с нагрузкой других приоритетов


Пример 1: Последовательное выполнение нагрузок high.

На сервере имеется 8 доступных GPU-карт. В очереди находятся следующие нагрузки:

  • Нагрузка А — высокий high приоритет, 4 GPU-карты, ожидает 15 минут.

  • Нагрузка Б — высокий high приоритет, 6 GPU-карт, ожидает 10 минут.

Система запустит нагрузку А, так как нагрузки высокого приоритета выполняются строго последовательно. Нагрузка Б будет ожидать освобождения ресурсов.

Правила вытеснения нагрузок

Для приоритетов high, medium и low:

  • Jupyter Servers и нагрузки с высоким high приоритетом могут вытеснять нагрузки со средним medium и низким low приоритетом.

  • Нагрузки со средним medium приоритетом могут вытеснять только нагрузки с низким приоритетом.

  • Нагрузки с низким low приоритетом могут вытеснять нагрузки с приоритетом shared-medium и shared-low.

Для приоритетов shared-medium и shared-low в Shared-очереди:

  • Любая нагрузка с high, medium и low может вытеснить нагрузку с приоритетом shared-medium или shared-low.

  • Нагрузки могут вытеснять только другие нагрузки с более низким приоритетом.

  • Вытеснение никогда не происходит между нагрузками одинакового приоритета.

  • При попытке установить high, medium или low приоритеты в Shared-очереди будет отображаться ошибка.

  • Нагрузка с приоритетом shared-medium или shared-low завершается, как только Default- или Custom-очередь запрашивает ресурсы.

Если при запуске нагрузки не указан приоритет в параметре priority_class, то по умолчанию будет установлен:

  • в Default- и Custom-очередях средний medium приоритет;

  • в Shared-очереди shared-low приоритет.

Вытеснение нагрузок внутри и между очередями:

  • Между Default- и Custom-очередями: нагрузка из одной Default- или Custom-очереди не может вытеснить нагрузку из другой Default- или Custom-очереди, даже если ее приоритет выше.

  • Между Shared- и Default-/Custom-очередями: нагрузки из Shared-очереди могут быть вытеснены любой нагрузкой из Default- или Custom-очередей. Обратное вытеснение из Default- или Custom-очереди в Shared-очередь невозможно.

  • Внутри очереди: в пределах одной очереди нагрузка с более высоким приоритетом может вытеснить нагрузку с более низким приоритетом. Например, нагрузка с приоритетом high из queue_1 может вытеснить нагрузку с приоритетом low из queue_1, но не может вытеснить нагрузку с приоритетом low из queue_2.

  • Запрет на вытеснение между очередями: нагрузка из одной очереди не может вытеснить нагрузку из другой очереди, за исключением случаев с Shared-очередью.

В таблице ниже представлены типы приоритетов с их назначением и правилами вытеснения.

Приоритет

Описание

Очередь

Правила вытеснения

Высокий high

Приоритет, предназначенный для критически важных и срочных нагрузок.

Default- и Custom-очереди

  • Внутри очереди: может вытеснить нагрузки с приоритетами medium и low в той же очереди.

  • Между очередями: может вытеснить любые нагрузки в Shared-очереди, но не вытесняет нагрузки из других Default- и Custom-очередей.

Средний medium

Приоритет, предназначенный для важных, но не срочных нагрузок. При отсутствии указания приоритета пользовательские нагрузки в Default- и Custom-очередях получают medium по умолчанию.

Default- и Custom-очереди

  • Внутри очереди: может вытеснить только нагрузки с приоритетом low в той же очереди.

  • Между очередями: может вытеснить нагрузки в Shared-очереди.

Низкий low

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

Default- и Custom-очереди

  • Внутри очереди: не может вытеснять любые другие нагрузки, но может быть вытеснен нагрузкой high или medium в той же очереди.

  • Между очередями: может быть вытеснен любой нагрузкой из Shared-очереди. Вытеснение нагрузкой из других Default- или Custom-очередей не допускается.

shared-medium

Средний приоритет в Shared-очереди. Выше, чем shared-low, но ниже любого базового приоритета. Предназначен для нагрузок, которые могут использовать оставшиеся ресурсы, но требуют некоторого уровня гарантии выполнения.

Shared-очередь

  • Внутри очереди: может вытеснить только нагрузки с shared-low.

  • Между очередями: может быть вытеснена любой нагрузкой с базовым приоритетом из Default- и Custom-очередей.

shared-low

Низкий приоритет в Shared-очереди. Нагрузки с этим приоритетом запускаются только тогда, когда нет конкурирующих запросов из Default- или Custom-очередей.

Shared-очередь

  • Внутри очереди: может быть вытеснена нагрузкой с приоритетом shared-medium в Shared-очереди.

  • Между очередями: всегда вытесняется любой нагрузкой из Default- и Custom-очередей с любым базовым приоритетом.