Аллокация — это набор выделенных ресурсов GPU и CPU в рамках одного региона, предназначенный для запуска задач обучения и Jupyter Server.
Ключевыми параметрами аллокации являются:
Тип ресурсов — CPU и/или GPU;
Количество ресурсов.
При создании новой аллокации выделенные ресурсы становятся доступными только привязанным к ней воркспейсам. Пользователи воркспейсов могут запускать задачи обучения и Jupyter Server, но их суммарная нагрузка не должна превышать выделенные ресурсы. Нагрузкой считаются все активные задачи обучения и Jupyter Server, которые используют выделенные ресурсы. При превышении лимита новые задачи ожидают свободных ресурсов.
Данные в NFS-хранилище остаются на прежнем месте и не требуют перемещения при создании или расформировании аллокации.
Аллокация тарифицируется 24/7 по объему выделенных ресурсов. При этом реальная утилизация ресурсов внутри аллокации не влияет на тарификацию.
Тарификация каждой аллокации начисляется в проект, выбранный при создании аллокации. Стоимость складывается из суммы всех подключенных аллокаций.
В аллокации без очередей все задачи обучения и Jupyter Server выполняются в порядке их поступления, как только появляются свободные ресурсы.
Воркспейс может быть подключен к нескольким аллокациям в рамках одного региона.
После создания аллокации администратор проекта может:
Посмотреть информацию об аллокации и ее ресурсах и ознакомиться с детальной статистикой об общем, используемом и доступном количестве ресурсов аллокации, а также с динамикой потребления ресурсов.
Привязать воркспейс к аллокации, чтобы воркспейс получил доступ к выделенным ресурсам.
Установить аллокацию по умолчанию для задач обучения или Jupyter Server для автоматического распределения нагрузки между аллокациями. Задачи обучения и Jupyter Server могут использовать как одну аллокацию по умолчанию, так и разные аллокации.
Отвязать воркспейс от аллокации, чтобы ограничить доступ воркспейса к ресурсам аллокации.
Расформировать аллокацию может только владелец аллокации.
Аллокация с очередями включает в себя несколько типов очередей и систему приоритетов, определяющих последовательность выполнения задач.
Очереди — это механизм организации и распределения задач по выделенному набору ресурсов, в котором задачи могут вытесняться согласно их приоритету. Вытесненная задача может быть приостановлена до появления свободных ресурсов или завершена.
При подключении очередей в аллокации автоматически создаются два типа очередей: Default и Shared. Администратор проекта может дополнительно создать третий тип: пользовательскую Custom-очередь.
Базовая очередь аллокации, которая не может быть удалена. При подключении имеет доступ ко всем ресурсам аллокации. Воркспейсы, подключенные к аллокации, автоматически получают доступ к Default-очереди.
Характеристики:
Администратор проекта может уменьшить размер для создания Custom-очередей.
Задачи в Default-очереди не могут быть вытеснены задачами из других очередей.
При отсутствии Custom-очередей использует полный объем ресурсов аллокации.
Размер очереди не может превышать общий размер аллокации.
Возможен запуск задач обучения с приоритетами high, medium и low.
Jupyter Server поддерживаются только с приоритетом high.
Если не указана конкретная очередь при запуске задач и Jupyter Server, то используется Default-очередь.
Пользовательская очередь, которую может создать администратор проекта. Воркспейсы получают доступ к ресурсам 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:
Система приоритетов позволяет управлять выполнением задач в очередях, обеспечивает соблюдение важности и срочности задач путем определения порядка их выполнения и автоматического вытеснения менее важных задач более важными.
В 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 | Приоритет, предназначенный для важных, но не срочных задач. При отсутствии указания приоритета пользовательские задачи в Default- и Custom-очередях получают medium по умолчанию. | Default- и Custom-очереди |
|
Низкий low | Приоритет, предназначенный для фоновых, длительных процессов, которые могут ждать, пока будут освобождены ресурсы. | Default- и Custom-очереди |
|
shared-medium | Средний приоритет в Shared-очереди. Выше, чем shared-low, но ниже любого базового приоритета. Предназначен для задач, которые могут использовать оставшиеся ресурсы, но требуют некоторого уровня гарантии выполнения. | Shared-очередь |
|
shared-low | Низкий приоритет в Shared-очереди. Задачи с этим приоритетом запускаются только тогда, когда нет конкурирующих запросов из Default- или Custom-очередей. | 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,"job_desc": "Training-job1",}'
Алгоритм обработки:
queue_name не указан.
Тип задачи: job.
Проверка очереди по умолчанию для задач обучения — Default-очередь.
Результат: Запуск в Default-очереди с medium приоритетом.
Пример 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 (низший в системе).
Доступ: все воркспейсы аллокации.
Ресурсы: адаптивные (остаточные).
Пример 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.
На основе этой информации вы можете принимать следующие решения:
Изменение конфигурации аллокации.
Перераспределение задач между очередями.
Планирование бюджета на вычислительные ресурсы.
Правильная конфигурация аллокаций позволяет оптимизировать как техническую производительность, так и финансовые затраты на вычислительную инфраструктуру.