Система приоритетов управляет выполнением нагрузки в очередях: определяет порядок запуска и автоматически вытесняет менее важную нагрузку, когда нужны ресурсы для более важной.
В 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 | Приоритет, предназначенный для важных, но не срочных нагрузок. При отсутствии указания приоритета пользовательские нагрузки в Default- и Custom-очередях получают medium по умолчанию. | Default- и Custom-очереди |
|
Низкий low | Приоритет, предназначенный для фоновых, длительных процессов, которые могут ждать, пока будут освобождены ресурсы. | Default- и Custom-очереди |
|
shared-medium | Средний приоритет в Shared-очереди. Выше, чем shared-low, но ниже любого базового приоритета. Предназначен для нагрузок, которые могут использовать оставшиеся ресурсы, но требуют некоторого уровня гарантии выполнения. | Shared-очередь |
|
shared-low | Низкий приоритет в Shared-очереди. Нагрузки с этим приоритетом запускаются только тогда, когда нет конкурирующих запросов из Default- или Custom-очередей. | Shared-очередь |
|