В Distributed Train реализована система аллокаций и очередей — механизм управления вычислительными ресурсами, который позволяет распределять GPU и CPU между различными типами нагрузки: задачами обучения, Jupyter Servers и приложениями Playground.
Аллокация — выделенный объем вычислительных ресурсов в определенном регионе.
Очередь — компонент аллокации, организующий выполнение нагрузки с учетом приоритетов и правил вытеснения. Поддерживаются различные типы очередей.
Нагрузка — активная задача обучения, Jupyter Servers или приложение Playground, которые используют ресурсы аллокации или очереди. При превышении лимита новые нагрузки ожидают освобождения ресурсов.
Приоритет — параметр, определяющий порядок выполнения задач обучения, Jupyter Servers и приложений Playground в очереди или между очередями. Поддерживаются приоритеты: Высокий high, Средний medium, Низкий low, shared-medium, shared-low и shared-cluster.
Вытеснение — механизм, при котором нагрузка с более низким приоритетом приостанавливается или завершается, чтобы освободить ресурсы нагрузке с более высоким приоритетом. Вытесненная нагрузка переводится в состояние ожидания до появления свободных ресурсов.
Default-очередь — базовая очередь аллокации с доступом ко всем ее ресурсам. Создается автоматически и не может быть удалена. Нагрузка в ней не может быть вытеснена нагрузкой из других очередей.
Shared-очередь — очередь для утилизации свободных ресурсов, которые не используются в Default- и Custom-очередях. Доступна всем воркспейсам аллокации, но нагрузка может быть вытеснена нагрузкой с более высоким приоритетом.
Custom-очереди — пользовательская очередь с фиксированным лимитом ресурсов, создаваемая администратором проекта. Предоставляет изолированный доступ к ресурсам для конкретных воркспейсов.
Shared-cluster — общая низкоприоритетная очередь, использующая свободные ресурсы из нескольких аллокаций. Доступна только в регионе SR008 и предназначена исключительно для задач обучения с приоритетом shared-cluster.
Ключевыми параметрами аллокации являются:
Тип ресурсов — CPU или GPU;
Количество ресурсов.
При создании новой аллокации выделенные ресурсы становятся доступными только привязанным к ней воркспейсам. Пользователи воркспейсов могут запускать задачи обучения, Jupyter Servers и приложения Playground, но их суммарная нагрузка не должна превышать выделенные ресурсы. При превышении лимита новые задачи ожидают свободных ресурсов.
Данные в NFS-хранилище остаются на прежнем месте и не требуют перемещения при создании или расформировании аллокации.
Аллокация тарифицируется 24/7 по объему выделенных ресурсов. При этом реальная утилизация ресурсов внутри аллокации не влияет на тарификацию.
Тарификация каждой аллокации начисляется в проект, выбранный при создании аллокации. Стоимость складывается из суммы всех подключенных аллокаций.
В аллокации без очередей нагрузка выполняется в порядке поступления, по мере появления свободных ресурсов.
Воркспейс может быть подключен к нескольким аллокациям в рамках одного региона.
После создания аллокации администратор проекта может:
Посмотреть информацию об аллокации и ее ресурсах и ознакомиться с детальной статистикой об общем, используемом и доступном количестве ресурсов аллокации, а также с динамикой потребления ресурсов.
Привязать воркспейс к аллокации, чтобы воркспейс получил доступ к выделенным ресурсам.
Установить аллокацию по умолчанию для задач обучения или Jupyter Servers для автоматического распределения нагрузки между аллокациями. Задачи обучения и Jupyter Servers могут использовать как одну аллокацию по умолчанию, так и разные аллокации.
Отвязать воркспейс от аллокации, чтобы ограничить доступ воркспейса к ресурсам аллокации.
Расформировать аллокацию может только владелец аллокации.
Аллокация с очередями включает в себя несколько типов очередей и систему приоритетов, определяющих последовательность выполнения задач.
При подключении очередей в аллокации автоматически создаются два типа очередей: Default и Shared. Администратор проекта может дополнительно создать третий тип: пользовательскую Custom-очередь. Владелец аллокации может подключить аллокацию к очереди Shared-cluster.
Базовая очередь аллокации, которая не может быть удалена. При подключении имеет доступ ко всем ресурсам аллокации. Воркспейсы, подключенные к аллокации, автоматически получают доступ к Default-очереди.
Характеристики:
Администратор проекта может уменьшить размер для создания Custom-очередей.
Нагрузка в Default-очереди не может быть вытеснена нагрузкой из других очередей.
При отсутствии Custom-очередей использует полный объем ресурсов аллокации.
Размер очереди не может превышать общий размер аллокации.
Возможен запуск нагрузки с приоритетами high, medium и low.
Если не указана конкретная очередь при запуске нагрузки, то используется Default-очередь.
Пользовательская очередь, которую может создать администратор проекта. Воркспейсы получают доступ к ресурсам Custom-очередей после того, как администратор устанавливает доступ. Если воркспейс привязан к аллокации, но не привязан к конкретной Custom-очереди, его пользователи не смогут запускать нагрузку в этой очереди.
Характеристики:
Размер очереди задается администратором, ресурсы забираются из других очередей.
Запуск нагрузки поддерживаются с приоритетами high, medium и low.
Если свободных ресурсов для выбранного приоритета в очереди нет, то нагрузка будет ожидать ресурсы.
Серверы фиксируются за очередью.
Ниже представлено сравнение типов очередей по разным параметрам.
Характеристика | Shared-очередь | Default-очередь | Custom-очередь | Shared-cluster-очередь |
|---|---|---|---|---|
Кто создает | Создается автоматически на аллокацию | Создается автоматически на аллокацию | Создает администратор проекта | Создана автоматически в регионе SR008, владелец аллокации подключает к очереди через запрос в техническую поддержку |
Кому доступна | Всем пользователям всех подключенных воркспейсов аллокации | Всем пользователям всех подключенных воркспейсов аллокации | Пользователям воркспейсов, которые администратор проекта привязал к очереди | Пользователям воркспейсов, которые администратор проекта привязал к очереди |
Запуск нагрузки | Можно запустить все типы нагрузки: задачи обучения, Jupyter Servers и приложения Playground | Можно запустить все типы нагрузки, если воркспейс подключен к очереди | Можно запустить все типы нагрузки, если воркспейс подключен к очереди | Можно запустить только задачи обучения |
Лимит на ресурсы | При создании размер очереди равен размеру аллокации. Но для запуска нагрузки можно использовать только неутилизированные ресурсы из других очередей. Администратор не может его изменить | При создании размер очереди равен размеру аллокации. Администратор может его изменить | Объем ресурсов для Сustom-очереди забирается из других очередей. Администратор проекта задает лимит на количество ресурсов | Использует свободные ресурсы из нескольких аллокаций, подключенных к ней. Администратор не может изменить размер |
Приоритет нагрузки в очереди | shared-medium и shared-low | Высокий high, Средний medium и Низкий low | Высокий high, Средний medium и Низкий low | shared-cluster |
Вытеснение нагрузки | Нагрузку в этой очереди может вытеснить любая нагрузка из Default- или Custom-очереди с любым приоритетом | Нагрузка в этой очереди вытесняется только нагрузкой из нее же в соответствии с приоритетами | Нагрузка в этой очереди вытесняется только нагрузкой из нее же в соответствии с приоритетами | Нагрузку в этой очереди может вытеснить любая нагрузка из Shared-, Default- или Custom-очереди с любым приоритетом |
При запуске нагрузки система определяет очередь следующим образом:
Указан параметр queue_name — нагрузка попадает в указанную очередь при наличии доступа.
Не указан queue_name — используется очередь по умолчанию для данного типа нагрузки.
Очередь по умолчанию не задана — нагрузка запускается в Default-очереди.
Алгоритм принятия решений при запуске нагрузки:
Пример 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 Servers.
Общее потребление RAM.
Среднюю загрузку GPU.
На основе этой информации вы можете:
изменить конфигурацию аллокации;
перераспределить задачи между очередями;
спланировать бюджет на вычислительные ресурсы.
Правильная конфигурация аллокаций позволяет настраивать аллокации с учетом типов нагрузки — это снижает расходы и ускоряет выполнение задач.