Налаштування автоскейлінгу GPU-інфраструктури для AI-навантажень

Пікове навантаження впирається в чергу на прискорювачі, а в затишшя обчислювальний пул простоює. Ми налаштовуємо автоскейлінг GPU під ключ: пул сам розширюється під пік і стискається в простої. Черги на розрахунки скорочуються в рази, а ємність витрачається за фактичним попитом.

Налаштування автоскейлінгу GPU-інфраструктури для AI-навантажень

MLOps та інфраструктураСкладний~3-5 днів
Часті запитання

Чому автомасштабування GPU не тримає пікове навантаження

Класична схема автомасштабування GPU спирається на середнє завантаження прискорювачів за вікно у кілька хвилин. Поки трафік рівний, метрика встигає відреагувати, і пул зростає вслід за попитом.

Але щойно з’являється черга завдань на навчання, середня утилізація перестає відображати реальний дефіцит: завдання чекають, частина прискорювачів зайнята підготовкою даних, і пороги просто не спрацьовують.

Звідси друге джерело втрат — простій прискорювачів між піками.

Пул тримають за нижньою межею, щоб ресурси не висіли без діла, тому в спокійні години черга розбирається майже миттєво, а за одночасного запуску кількох експериментів вона зростає швидше, ніж планувальник встигає додати вузли. Масштабування запізнюється саме на той інтервал, де навантаження максимальне.

Ручне розширення пулу додає до цього затримку в години: заявка, погодження, підняття вузлів, прогрів образів і кешу ваг, перевірка доступності прискорювачів у потрібному регіоні.

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

Ззовні це виглядає як нестача потужностей, хоча вузли є — просто вони не там і не тоді, де потрібні. Розбираємо, як це закривається: які сигнали мають керувати пулом замість середньої утилізації та як пов’язати чергу завдань, прогрів і відкат в одну керовану схему.

Що дає автомасштабування GPU: час, ємність, стійкість

Автомасштабування GPU починається з черги. Поки завдань більше, ніж вільних прискорювачів, кожне нове стає в очікування, і хвіст черги зростає швидше за середнє.

Тому першим ділом ми вимірюємо час очікування завдання до старту навчання й розподіл завантаження прискорювачів по пулу: за ручного керування про перевантаження дізнаються зі скарг, а не з графіка.

Кероване масштабування тримає завантаження в робочому коридорі. Під пік пул розгортається заздалегідь за сигналом довжини черги, у спокійні години стискається до мінімуму — ємність під пік з’являється на момент запуску, а не через годину після нього.

Резерв при цьому не гріється марно: частка простоюючих прискорювачів падає в рази, а вартість простою кластера перестає бути постійним рядком.

Відмовостійкість пулу — другий ефект. Автоматика знімає вузол, що випав, з балансування, перезапускає завдання з останньої контрольної точки на здоровому прискорювачі й не віддає планувальнику неробочі ресурси, тож завислі завдання перестають займати ємність до ручного втручання. Телеметрію беремо ту саму, що віддають штатні засоби NVIDIA, — окремий агент для цього не потрібен.

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

Порівняння режимів масштабування обчислювального пулу

Ємність обчислювального пулу змінюють чотирма способами, і вони не взаємозамінні — у кожного своя затримка реакції на пік і своя ціна помилки. Вибір залежить від профілю навантаження: рівний потік запитів, передбачувані вікна або різкі сплески від зовнішніх подій.

Варіант Коли підходить Обмеження
Масштабування за метрикою Навантаження корелює із завантаженням прискорювачів або обсягом зайнятої пам’яті; потік рівний Затримка реакції на пік — одиниці хвилин: метрика усереднюється за вікном, вузол ще піднімається й прогрівається. Різкий сплеск встигає стати в чергу
Масштабування за довжиною черги (поріг черги) Сервіси з явною чергою завдань: пакетний інференс, обробка файлів, фонові прогони Поріг добирається під профіль: низький — пул смикається на кожному залпі, високий — зростає час очікування для всіх
Масштабування за розкладом Передбачувані піки: робочі години, вікна вивантажень, регулярні перерахунки Не витримує незапланованого сплеску — ємність упирається в стелю розкладу
Статичний резервний пул Критичні сервіси з жорстким лімітом часу відповіді Простоюючі прискорювачі; потрібна верхня межа й політика повернення до загального пулу

На практиці режими комбінують: розклад закриває базову криву, метрика або поріг черги добирає залишок, резервний пул тримає мінімальну гарячу ємність.

Ключова величина під час вибору — затримка реакції на пік: вона складається з вікна усереднення метрики, часу запуску вузла й прогріву моделі.

Етапи впровадження: від аудиту навантаження до передачі регламентів

Профіль навантаження на GPU рідко буває рівним: нічні пакетні розрахунки, денні інтерактивні запити й короткі піки вкладаються в добу з різною амплітудою.

Правила, виставлені на око, дають або простій дорогих карт, або черги, у яких користувач чекає відповіді довше, ніж вважає прийнятним. Тому йдемо від вимірювань до схеми і лише потім до порогів.

  1. Аудит профілю навантаження — знімаємо метрики за характерний період: утилізація по кожній карті, довжина черги, час очікування завдання, форма піків, частка простоюючих карт у спокійні години.
  2. Схема пулу — скільки вузлів тримаємо в постійному резерві, скільки віддаємо в еластичну частину, як завдання розподіляються між картами й де вузьке місце: пам’ять карти, обмін між вузлами або підготовка даних.
  3. Правила масштабування — цільова метрика, пороги спрацьовування, крок додавання й зняття вузлів, час стабілізації, пріоритети черг, запас під термінові запити.
  4. Навантажувальна перевірка — прогін реального профілю з піками й відмовою одного вузла: чи встигає система добрати ресурси, скільки триває запуск нової карти, що відбувається з чергою в цей момент.
  5. Передача в експлуатацію — регламенти, панелі моніторингу, оповіщення про деградацію, сценарії ручного втручання й зрозумілий черговій зміні відкат правил.

Після передачі автомасштабування GPU не заморожують: профіль змінюється, і пороги переглядають за тими самими метриками — інакше через пару місяців налаштування знову починає працювати проти навантаження.

Конфігурації, схеми й регламенти: комплект документів

Працююче автомасштабування — це не лише пули, які зростають під навантаження.

Без комплекту документів будь-яка зміна конфігурації перетворюється на ризик: пороги спрацьовування пам’ятає один інженер, чергова зміна не знає, які оповіщення потребують втручання, а відкат робиться з пам’яті.

Тому ми передаємо замовнику набір артефактів, за якими інфраструктуру можна обслуговувати власними силами.

  • Конфігурація пулу — файли з порогами спрацьовування, мінімальним і максимальним розміром, часом прогріву й охолодження вузлів, прив’язкою класів завдань до типів прискорювачів. Правки йдуть через репозиторій, а не руками на живій системі.
  • Схема інфраструктури — розміщення пулів, зони, канали до сховищ моделей і даних, точки відмови та їхній вплив на масштабування. Оновлюється за кожної зміни топології.
  • Матриця доступу — які ролі змінюють ліміти, піднімають вузли, читають метрики й логи. Прив’язка до корпоративних груп: під час звільнення співробітника доступ відкликається однією операцією.
  • Регламент чергування — що перевіряти на початку зміни, які оповіщення критичні, що можна робити без погодження і куди ескалювати. Окремо перелічено заборонені дії, як-от ручне зниження лімітів «щоб не шуміло».
  • Інструкція з відкату — покрокове повернення попередніх порогів і розмірів пулу, перевірка, що навантаження знову йде за старим сценарієм, і контрольні метрики, що підтверджують результат.
  • Журнал змін — що змінювали, за чиєю заявкою і з яким ефектом: через місяць видно, який поріг прибрав черги, а який лише додав простій.

Комплект лежить поруч із конфігурацією, проходить рев’ю і версіонується — за наступної правки видно, що й навіщо змінювали.

Розбір впровадження: зняття черг на пікових навантаженнях

Що було

Пул прискорювачів виділявся під піковий попит і стояв цілком: уночі простій тримався на 60–70%, а вдень черга на навчання зростала до 9 годин.

Завдання дослідників чекали в загальній черзі без пріоритетів — дрібний експеримент на одному прискорювачі міг простояти за великим навчанням понад добу.

Інцидентів із нестачею ємності набиралося 4–6 на місяць, і майже кожен закривали вручну: шукали вільні вузли, домовлялися із сусідньою командою, зупиняли чужі завдання.

Що зробили

Звели розрізнені пули в загальний і вивели метрики завантаження кожного вузла в автоскейлер: масштабування йде за довжиною черги та утилізацією пам’яті, а не за середнім за період.

Правила й пріоритети описали в KEDA: окремі черги на навчання та інференс, ліміт вузлів на команду, звільнення вузла одразу після завершення завдання.

Образи прогріваємо заздалегідь — новий вузол входить у роботу без очікування завантаження, тому масштабування не впирається в підготовку середовища.

Що стало

Очікування в черзі на навчання скоротилося з 9 годин до 20–40 хвилин на тих самих піках, частка простою впала з 65% до 18%. Інциденти з нестачею ємності — 0–1 на квартал замість 4–6 на місяць, ручний розбір більше не потрібен.

Відкат передбачено: правила автомасштабування знімаються, і пул повертається до статичного режиму за один крок, без перезбирання завдань і втрати запущених навчань.

Що робити, якщо пул прискорювачів уже розгорнуто вручну?

Розгорнутий вручну пул зазвичай тримається на фіксованих мітках: конкретні завдання закріплені за конкретними машинами, а зростання й скорочення робить інженер за заявкою.

Поки навантаження передбачуване, схема працює; за першого сплеску між «потрібно більше прискорювачів» і «прискорювачі з’явилися» минає час, і весь цей час черга завдань зростає, а частина запитів не дочікується відповіді.

Перевести такий парк під кероване масштабування можна без зупинки сервісів. Наявний пул описується декларативно — як є, з поточними мітками, іменами й розподілом завдань: опис стає джерелом істини, але на цьому етапі нічого не змінює.

Зворотна сумісність зберігається: звичні способи звернення до вузлів і ручні команди продовжують працювати, нічого не ламається в момент увімкнення.

Увімкнення йде поступово. Спочатку — режим спостереження: правила рахують цільову кількість вузлів, але не застосовують її, а ми порівнюємо розрахунок із фактичною поведінкою пулу й уточнюємо пороги за реальною утилізацією.

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

Переведення без простою будується на акуратному виведенні вузлів: машина залишає пул, лише коли на ній не залишилося активних завдань, а нове навантаження туди вже не планується. Завдання при цьому не перезапускаються, черги не втрачають позицій. Повернутися до ручного керування можна будь-якої миті, не розбираючи пул заново.

Технічні сумніви: черги, холодний старт, відмовостійкість

Інженерні питання до старту зазвичай одні й ті самі: чи встигне ємність з’явитися до пікового завдання, що буде з навчанням під час виведення вузла і чи доведеться чіпати код.

Холодний старт вузла затримає запуск завдання?

Вузол не готовий миттєво: потрібно виділити машину, підняти середовище, підтягнути образ і кеш моделі.

Тримаємо мінімальний резерв під профіль типового завдання й прогріваємо образ заздалегідь, а інтерактив і пакетні завдання розносимо по різних пулах — черга не простоює в очікуванні заліза.

Що як квота на ємність закінчиться в піку?

Верхню межу задаємо заздалегідь і розставляємо пріоритети: інтерактивні завдання отримують ресурс першими, пакетні чекають або вирушають в окремий пул. Якщо провайдер не дає потрібний обсяг, частина роботи йде на резервний профіль — повільніше, але без відмови.

Переривані вузли й виведення на обслуговування — що з навчанням?

Можливо, якщо навантаження можна перезапустити. Навчальний цикл пише контрольні точки за розкладом: переривання або виведення вузла відкочує завдання на останню точку, а не на початок.

Перед обслуговуванням вузол перестає отримувати нові завдання, зберігає стан і лише потім вимикається.

Чи доведеться переписувати код навчання?

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

Обговоримо задачу: зберемо схему масштабування під ваш профіль

Щоб оцінка спиралася на ваш профіль навантаження, а не на середні цифри, розбір починається з даних. Надішліть те, що вже збираєте, — схему пулу й порядок робіт зберемо ми.

  • Профіль навантаження: добові й тижневі піки, співвідношення тривалих завдань і коротких запитів, допустимий час очікування в черзі.
  • Поточна схема пулу: як згруповано вузли, чим запускаються завдання, де впирається — в утилізацію прискорювачів, пам’ять або пропускну здатність мережі.
  • Метрики за типовий тиждень: завантаження прискорювачів, довжина черги, частка відхилених завдань, час виходу нового вузла в робочий режим.
  • Обмеження середовища: регіони розміщення, вимоги до ізоляції, доступні квоти, вікна обслуговування.
  • Цільові показники: пікове навантаження, яке потрібно тримати, допустимий час простою за зміни кількості вузлів, клас відмов, який неприпустимий.
  • Точки інтеграції: моніторинг, планувальник, реєстр образів, інструменти керування конфігурацією.

Далі працюємо так. Спочатку разом із вашими інженерами розбираємо профіль навантаження й знаходимо, що саме обмежує масштабування — прогрів вузлів, брак квот або відсутність зворотного зв’язку від черги.

Потім пропонуємо схему пулу: які групи вузлів виділити, за якими метриками ухвалювати рішення про зростання й зниження, за який час вузол має входити в роботу і як налаштувати відкат.

За підсумками розбору повертаємося з оцінкою й планом: етапи, що робимо ми, що залишається на вашому боці, які ризики закриваємо на кожному кроці.

Опишіть задачу — що масштабуємо, з якими піками і в яких обмеженнях. Якщо частина метрик ще не збирається, так і скажіть: уточнимо на розборі й подивимося на доступні логи.

Напрямки AI-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1374
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142