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

Аллокации и очереди


Аллокация — это набор выделенных ресурсов GPU и CPU в рамках одного региона, предназначенный для запуска задач обучения и Jupyter Server.

Ключевыми параметрами аллокации являются:

  • Тип ресурсов — CPU и/или GPU;

  • Количество ресурсов.

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

Примечание

Данные в NFS-хранилище остаются на прежнем месте и не требуют перемещения при создании или расформировании аллокации.

Аллокация тарифицируется 24/7 по объему выделенных ресурсов. При этом реальная утилизация ресурсов внутри аллокации не влияет на тарификацию.

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

Типы аллокаций

Аллокация без очередей

В аллокации без очередей все задачи обучения и Jupyter Server выполняются в порядке их поступления, как только появляются свободные ресурсы.

Воркспейс может быть подключен к нескольким аллокациям в рамках одного региона.

После создания аллокации администратор проекта может:

Примечание

Расформировать аллокацию может только владелец аллокации.

Аллокация с очередями

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

Очереди — это механизм организации и распределения задач по выделенному набору ресурсов, в котором задачи могут вытесняться согласно их приоритету. Вытесненная задача может быть приостановлена до появления свободных ресурсов или завершена.

При подключении очередей в аллокации автоматически создаются два типа очередей: Default и Shared. Администратор проекта может дополнительно создать третий тип: пользовательскую Custom-очередь.

Типы очередей

Shared-очередь

Базовая очередь аллокации, которая не может быть удалена. В Shared-очереди доступны ресурсы, которые не утилизированы в Default- и Custom-очередях. Запустить задачу в Shared-очереди может любой воркспейс, подключенный к аллокации.

Характеристики:

  • Размер очереди не может превышать общий размер аллокации и адаптируется в зависимости от загрузки других очередей.

  • Задачи в Shared-очереди могут быть вытеснены задачами с более высоким приоритетом из других очередей.

  • Не поддерживается запуск Jupyter Server из-за высокого приоритета.

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

Default-очередь

Базовая очередь аллокации, которая не может быть удалена. При подключении имеет доступ ко всем ресурсам аллокации. Воркспейсы, подключенные к аллокации, автоматически получают доступ к Default-очереди.

Характеристики:

  • Администратор проекта может уменьшить размер для создания Custom-очередей.

  • Задачи в Default-очереди не могут быть вытеснены задачами из других очередей.

  • При отсутствии Custom-очередей использует полный объем ресурсов аллокации.

  • Размер очереди не может превышать общий размер аллокации.

  • Возможен запуск задач обучения с приоритетами high, medium и low.

  • Jupyter Server поддерживаются только с приоритетом high.

  • Если не указана конкретная очередь при запуске задач и Jupyter Server, то используется Default-очередь.

Custom-очередь

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

Характеристики:

  • Размер очереди задается администратором, ресурсы забираются из других очередей.

  • Задачи обучения поддерживаются с приоритетами high, medium и low.

  • Jupyter Server поддерживаются только с приоритетом high.

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

  • Серверы фиксируются за очередью.

Сравнение типов очередей

Ниже представлено сравнение трех типов очередей по разным параметрам.

Типы очередей

Характеристика

Shared-очередь

Default-очередь

Custom-очередь

Кто создает

Создается автоматически на аллокацию

Создается автоматически на аллокацию

Создает администратор проекта

Кому доступна

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

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

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

Запуск Jupyter Server и задач обучения

Jupyter Server запускать нельзя.

Задача обучения запускается с параметром queue_name = 'shared'. Если не передать параметр, то задача запустится в очереди, которая определена как очередь по умолчанию.

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

Задача обучения запускается с параметром queue_name = 'default'

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

Задача обучения запускается с параметром queue_name = 'custom_name'. Если не передать параметр, то задача запустится в очереди, которая определена как очередь по умолчанию.

Лимит на ресурсы

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

При создании размер очереди равен размеру аллокации. Администратор может его изменить.

Объем ресурсов для Сustom-очереди забирается из других очередей. Администратор проекта задает лимит на количество ресурсов.

Приоритет задач в очереди

shared-medium и shared-low.

high, medium и low.

high, medium и low.

Вытеснение задач

Задачи в этой очереди может вытеснить любая задача из Default- или Custom-очереди с любым приоритетом.

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

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

Правила выбора очереди

При запуске задачи или Jupyter Server система определяет очередь следующим образом:

  • Указан параметр queue_name — задача попадает в указанную очередь при наличии доступа.

  • Не указан queue_name — используется очередь по умолчанию для данного типа задачи.

  • Очередь по умолчанию не задана — задача запускается в Default-очереди.

Алгоритм принятия решений при запуске задачи или Jupyter Server:

../_images/s__concepts__allocations-choice.svg

Система приоритетов

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

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

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

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

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

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

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

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

Приоритет задачи задает пользователь при запуске задачи через client_lib, CLI или Public API.

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

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

Правила вытеснения для базовых приоритетов:

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

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

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

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

Правила вытеснения для приоритетов в Shared-очереди:

  • Любая задача с базовым приоритетом может вытеснить задачу.

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

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

  • При попытке установить базовый приоритет в Shared-очереди будет отображаться ошибка.

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

Правила вытеснения внутри и между очередями:

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

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

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

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

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

Приоритет

Описание

Очередь

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

Высокий high

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

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

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

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

Средний medium

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

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

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

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

Низкий low

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

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

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

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

shared-medium

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

Shared-очередь

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

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

shared-low

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

Shared-очередь

  • Внутри очереди: может быть вытеснена любой задачей в Shared-очереди.

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

Примеры запуска задач

Пример 1: Запуск без указания очереди

Пример API-запроса запуска задачи без указания очереди:

curl -X POST "https://api.ai.cloud.ru/public/v2/jobs" \
-H "X-Workspace-Id: <workspace_id>" \
-H "X-Api-Key: <api_key>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"script": "/home/jovyan/training/model_train.py",
"base_image": "cr.ai.cloud.ru/aicloud-base-images/py3.11-torch2.4.0:0.0.40",
"region": "SR006",
"instance_type": "a100.1gpu.8C.243G",
"type": "pytorch2",
"n_workers": 1,
"job_desc": "Training-job1",
}'

Алгоритм обработки:

  • queue_name не указан.

  • Тип задачи: job.

  • Проверка очереди по умолчанию для задач обучения — Default-очередь.

Результат: Запуск в Default-очереди с medium приоритетом.

Пример 2: Запуск в Shared-очереди

Пример API-запроса фоновой задачи:

curl -X POST "https://api.ai.cloud.ru/public/v2/jobs" \
-H "X-Workspace-Id: <workspace_id>" \
-H "X-Api-Key: <api_key>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"script": "/home/jovyan/training/model_train.py",
"base_image": "cr.ai.cloud.ru/aicloud-base-images/py3.11-torch2.4.0:0.0.40",
"region": "SR006",
"instance_type": "a100.1gpu.8C.243G",
"type": "pytorch2",
"n_workers": 1,
"queue_name": "shared",
"priority_class": "shared-low"
"job_desc": "Training-job1",
}'

Алгоритм обработки:

  • Параметр queue_name = shared — Shared-очередь.

  • Приоритет: shared-low (низший в системе).

  • Доступ: все воркспейсы аллокации.

  • Ресурсы: адаптивные (остаточные).

Пример 3: Запуск в Custom-очереди

Пример API-запроса фоновой задачи критически важной задачи:

curl -X POST "https://api.ai.cloud.ru/public/v2/jobs" \
-H "X-Workspace-Id: <workspace_id>" \
-H "X-Api-Key: <api_key>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"script": "/home/jovyan/training/model_train.py",
"base_image": "cr.ai.cloud.ru/aicloud-base-images/py3.11-torch2.4.0:0.0.40",
"region": "SR006",
"instance_type": "a100.1gpu.8C.243G",
"type": "pytorch2",
"n_workers": 1,
"queue_name": "production-pipeline",
"priority_class": "high"
"job_desc": "Training-job1",
}'

Алгоритм обработки:

  • queue_name = production-pipeline — Custom-очередь.

  • Проверка доступа воркспейса к очереди.

  • Приоритет: high — выполняется в первую очередь.

  • Ресурсы: фиксированный лимит очереди.

Мониторинг и оптимизация использования

Мониторинг аллокаций предоставляет возможность отслеживать нагрузку и потребение ресурсов на дашборде по аллокациям.

Сервис мониторинга отслеживает:

  • Количество запущенных задач обучения.

  • Количество запущенных Jupyter Server.

  • Общее потребление RAM.

  • Среднюю загрузку GPU.

На основе этой информации вы можете принимать следующие решения:

  • Изменение конфигурации аллокации.

  • Перераспределение задач между очередями.

  • Планирование бюджета на вычислительные ресурсы.

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