nav-img
ML Space

Использование приоритетов при обучении моделей

Приоритеты позволяют организовать запуск задач в порядке их важности. Они доступны только в аллокациях.

Используйте приоритеты запуска, чтобы:

  • запускать срочные prod-задачи с более высоким приоритетом, отделяя их от R&D-задач;

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

Установить приоритет для задачи обучения

Приоритеты доступны в публичном API и client_lib и задаются при помощи поля priority_class. Например:


POST /public/v2/jobs
{
base_image='cr.ai.cloud.ru/aicloud-base-images/py3.10-torch2.1.2:0.0.40',
script='/home/jovyan/test_script.py',
region='SR006',
instance_type='a100plus.8gpu.80vG.96C.768G',
n_workers=2,
type="pytorch2",
processes_per_worker=1,
job_desc="medium-priority training job",
priority_class="medium",
max_retry=3
}

Описание приоритетов

Приоритеты

Название

Значение поля priority_class

Для какой сущности

Описание

Низкий

low

Задача обучения

В очереди из приоритетов выполняется последним.

Средний

medium

Задача обучения

Значение по умолчанию.

В очереди из приоритетов выполняется после Jupyter Server и всех задач с высоким приоритетом.

Высокий

high

Задача обучения, Jupyter Server

В очереди из приоритетов выполняется первым.

Примечание

Для задач с низким и средним приоритетом рекомендуется задавать параметр max_retry, чтобы они перезапустились, если их вытеснит более приоритетная задача.

Принцип работы

Поскольку у Jupyter Server всегда высокий приоритет запуска, то:

  • Если запуска ожидают задача с высоким приоритетом и Jupyter Server, то они запустятся в порядке очереди и освобождения ресурсов.

  • Если запуска ожидают Jupyter Server и несколько задач обучения со средним приоритетом, то сначала запустится Jupyter Server, а потом задачи обучения со средним приоритетом в порядке очереди.

Примечание

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

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

  1. Допустим, в регионе запущено 2 задачи: Job 0 с низким приоритетом в стадии завершения и Job 1 с высоким приоритетом. Обе задачи вместе заняли 8 из 8 доступных в регионе GPU.

    При этом в очереди находится задача Job 3 со средним приоритетом, которая претендует на освобождающиеся 4 GPU в регионе.

    Пока ресурсы заняты, новые задачи Job 4 и Job 2 не могут попасть в очередь.

    ../../../_images/schm__job-priority-1.svg
  2. Job 1 тоже завершается, и в очередь попадает задача Job 4. Она имеет приоритет выше, чем у Job 3.

    ../../../_images/schm__job-priority-2.svg
  3. Поскольку при завершении Job 1 не все поды могут успеть завершить работу, на частично освободившихся ресурсах запустится задача с высоким приоритетом Job 4.

    Задача Job 3 останется в очереди, задача Job 2 в очередь не попадает, несмотря на то что она была создана раньше.

    ../../../_images/schm__job-priority-3.svg