QLoRA: де ламається звичайне донавчання великої моделі
Повне донавчання великої моделі оновлює всі ваги одразу, а разом із ними тримає в пам’яті градієнти й стан оптимізатора. До обсягу самих ваг додаються проміжні активації, і сумарні витрати пам’яті в рази перевищують розмір моделі у файлі.
Запуск на одній карті закінчується переповненням пам’яті під час навчання: процес падає посеред епохи, чекпойнт не зберігається, робота попередніх годин втрачається.
Далі починається вибір із поганих варіантів. Зменшуємо розмір пакета — навчання відбувається з постійними перерахунками й розтягується, а шумні градієнти заважають збіжності.
Розкладаємо шари по кількох прискорювачах — платимо обміном між ними й усе одно впираємося зі зростанням довжини контексту. Обрізаємо контекст або чистимо вибірку — втрачаємо саме ту частину предметної області, заради якої затівалася адаптація моделі під власні дані.
Найнеприємніший наслідок — не падіння, а тиха деградація. Запуск проходить, втрати на навчальній вибірці знижуються, а на відкладеній виходять на плато, і модель починає відтворювати формулювання з інструкцій замість потрібної поведінки. Діагностика дорога: ресурси вже витрачено, а результат непридатний.
Корінь у тому, що повне донавчання переписує всю модель заради задачі, яка зазвичай потребує правки невеликої частини поведінки.
QLoRA вирішує це інакше: базові ваги зберігаються в низькорозрядному вигляді й заморожені, а навчаються компактні низькорангові адаптери LoRA — частки відсотка від загальної кількості параметрів. Розбираємо, як це влаштовано й де залишаються обмеження.
Що дає донавчання з квантуванням ваг: вимірюваний ефект
Квантування ваг переводить базову модель у низькорозрядне представлення, а донавчання з LoRA залишає адаптери в повній точності.
Градієнти й стани оптимізатора обчислюються лише для адаптерів — це частки відсотка параметрів, тому економія пам’яті під час навчання вимірюється в разах: конфігурація, якій раніше був потрібен вузол із кількох прискорювачів, запускається на одному. Звільнений запас іде на більший розмір батчу й довжину контексту.
Час донавчання моделі падає з двох причин: менше пристроїв — менше обміну градієнтами, а крок оптимізатора оновлює невелику частину тензорів. Прогін на корпусі в сотні тисяч прикладів укладається в години — гіпотези перевіряються за день.
Частка успішних запусків зростає: пікова пам’ять більше не впирається в межу прискорювача, і падіння через нестачу пам’яті переходять із регулярних в одиничні.
Якість відповідей моделі зберігається: базові ваги заморожені, а втрати від квантування вимірюються на відкладеній вибірці до випуску в продукт.
На доменних задачах — розбір звернень, вилучення полів, відповіді за базою знань — розбіжність із повним донавчанням залишається в межах похибки, якщо ранг адаптерів, цільові модулі та швидкість навчання підібрані під задачу.
Окремий ефект — відтворюваність: на стеку Hugging Face ми версіонуємо конфігурацію прогону й самі адаптери окремо від базових ваг. Оновлення моделі перетворюється на заміну адаптера, який на порядки легший за базову модель, а відкат до попередньої версії займає хвилини.
QLoRA та альтернативи: порівняння підходів і обмежень
Вибір методу донавчання моделі визначається трьома осями: доступною пам’яттю прискорювача, обсягом і однорідністю даних, вимогами до відтворюваності й відкату. Нижче — чотири варіанти адаптації, між якими реально обирають на проєктах.
| Варіант | Коли підходить | Обмеження |
|---|---|---|
| Повне донавчання | Новий домен або мова, багато даних, поведінка моделі змінюється глибоко | Максимальні вимоги до пам’яті, під кожну задачу зберігається повний набір ваг |
| Адаптери LoRA | Формат, стиль, вилучення сутностей; потрібні десятки версій під різні задачі | Ранг адаптера обмежує обсяг нових знань, на сильно зсунутих даних якість просідає |
| Квантоване донавчання (QLoRA) | Велика модель, а пам’ять обмежена; адаптер навчається поверх ваг у 4-бітному представленні | Крок навчання повільніший, результат чутливий до налаштування квантування |
| Навчання підказок | Класифікація та вузькі задачі, мало розмічених прикладів | Нові знання засвоює слабко, чутливе до формулювання входу |
Різниця між QLoRA і класичними адаптерами в тому, що базові ваги заморожуються в 4-бітному представленні NF4, а навчаються лише низькорангові матриці: вимоги до пам’яті падають, якість залишається близькою до повного донавчання.
Інструментарій рівня Hugging Face PEFT дає змогу перемикати варіанти на одній кодовій базі, тому метод оборотний: починаємо з адаптерів і переходимо до повного донавчання лише за доведеного дефіциту якості.
Порядок робіт: від аудиту даних до передачі моделі
До першої ітерації фіксуємо, що вважаємо результатом: тип задачі, формат відповіді моделі та метрику приймання. Без цього підбір параметрів перетворюється на перебір наосліп. Далі йдемо кроками, і кожен завершується артефактом, який можна перевірити.
-
Аудит даних і постановка задачі. Дивимося, що вже є: логи, документи, таблиці. Рахуємо обсяг за класами, шукаємо дублі, пропуски та витоки цільової змінної — ознака, що опосередковано містить відповідь, обнуляє метрику на прийманні.
-
Схема навчання. Ділимо вибірку на навчальну та відкладену так, щоб вони не перетиналися за клієнтами або за часом. Заздалегідь домовляємося, яка відповідь вважається правильною, а яка — небезпечною помилкою.
-
Підготовка набору даних і розмітка прикладів. Приводимо тексти до єдиного вигляду, формуємо пари «запит — еталонна відповідь». Спірні випадки розмічаємо за письмовою інструкцією та заміряємо згоду розмітників.
-
Налаштування конфігурації QLoRA. Обираємо базову модель, ранг адаптера, цільові шари та довжину контексту. Перевіряємо збіжність на малому зрізі, перш ніж запускати повний прогін.
-
Навчання та перевірка якості моделі. Ведемо прогін із проміжним оцінюванням на відкладеній вибірці, щоб упіймати перенавчання до фіналу. Окремо рахуємо метрики на рідкісних і критичних випадках та порівнюємо з вихідною моделлю.
-
Передача моделі замовнику. Віддаємо ваги, файли конфігурації, скрипт запуску й документацію. Проводимо передачу команді: як оновлювати дані, на що дивитися у звітах, за яких сигналів перенавчати.
Що залишається у замовника: адаптери, ваги, документація
Навчання не закінчується на моменті, коли метрика на контрольній вибірці вийшла на цільовий рівень. Цінність у тому, що залишається після: артефакти, за якими ваша команда сама перенавчить модель на нових даних, перевірить якість і відкотить версію без нас.
- Збережені адаптери — ваги QLoRA-донавчання окремо від базової моделі: прив’язка до версії базових ваг, контрольна сума та позначка, на яких даних їх отримано.
- Конфігурація навчання — ранг і масштаб адаптера, цільові модулі, схема квантування, швидкість навчання, планувальник і кількість епох: за цим файлом запуск повторюється на іншому стенді.
- Схема навчання моделі — як зібрано й очищено датасет, як розділено на навчання й контроль, як токенізовано приклади та чим відстежувалося перенавчання.
- Звіт про метрики — динаміка за епохами, порівняння базової та донавченої моделі на контрольному наборі, розбір помилок за типами запитів і приклади відповідей до і після.
- Набір регресійних перевірок — фіксовані запити, з якими нова версія звіряється перед викладкою.
- Інструкція із запуску — підключення адаптера до базової моделі, режими виведення, робота з довгим контекстом і обмеженнями щодо пам’яті.
- Регламент роботи моделі — коли ініціювати перенавчання, які дані додавати, як версіонувати адаптери та як відкочуватися до попередньої версії.
Усе лежить в одному репозиторії з описом структури: донавчання залишається відтворюваним, а модель — на вашій інфраструктурі.
Кейс: донавчання моделі на обмеженому парку прискорювачів
Замовник прийшов із задачею: модель на 13 мільярдів параметрів має впевнено тримати галузеву термінологію та видавати відповідь строго заданим форматом, а в наявності — чотири прискорювачі в закритому контурі.
Повне донавчання на такому парку не запускалося взагалі: стани оптимізатора й градієнти не вміщалися в пам’ять, процес падав на першому ж кроці.
Перевели навчання на квантований режим: базова модель завантажується в 4-бітному представленні, навчаються лише низькорангові адаптери, а стани оптимізатора обчислюються для невеликої частки параметрів.
Навчальний обсяг скоротився на порядки, і якість відповідей почала визначатися даними, а не запасом заліза.
Метрики до і після: було — нуль успішних запусків на наявному парку; стало — навчання йде на двох прискорювачах, ще два залишаються під виведення моделі та паралельні експерименти.
Частка коректних відповідей на галузевому наборі питань зросла з 61% до 88%, дотримання формату — з 70% до 96%. Одна епоха навчання займає втричі менше часу, ніж спроба повного донавчання на орендованому кластері.
Терміни та передача
Впровадження зайняло чотири тижні: збір і чистка датасету, підбір рангу адаптерів і кроку навчання, приймання на фіксованому наборі питань. Передача включала скрипти навчання, конфігурації адаптерів, збережені контрольні точки та інструкцію, як повторити запуск без нас.
QLoRA у цьому проєкті — не експеримент, а робочий режим: внутрішня команда перенавчає модель на нових даних сама, не чекаючи на нас і не розширюючи парк прискорювачів.
Чим QLoRA відрізняється від повного донавчання на практиці?
Повне донавчання змінює всі ваги моделі: для кожного параметра зберігаються градієнти й стани оптимізатора, а пам’ять під це в рази перевищує саму вагу моделі. Тому такі запуски впираються в кілька прискорювачів і розподілену синхронізацію, а не в обсяг даних. QLoRA залишає базові ваги замороженими й навчає лише низькорангові адаптери.
Базова модель зберігається у 4-бітному квантованому вигляді, а обчислення йдуть у вищій точності — виграш щодо пам’яті виходить кратним, а не відсотковим. Задача, яка раніше потребувала кількох вузлів, розв’язується на одній карті. Плата за це — розпакування квантованих блоків на кожному кроці.
За швидкістю один крок навчання в QLoRA повільніший: ваги доводиться розгортати на льоту. Зате весь цикл донавчання часто коротший — немає пересилання градієнтів між вузлами й очікування синхронізації. Після злиття адаптера з базовою моделлю швидкість відповіді не змінюється.
Точність адаптера передбачувана: на звуженні домену, стилю або формату відповіді низький ранг наздоганяє повне донавчання. Якщо потрібно вкласти в модель нові знання або змінити мову, повний варіант точніший — ранг обмежує обсяг того, що модель здатна дописати.
Змінюється й спосіб оновлення: повне донавчання дає новий знімок усієї моделі, який зберігається й версіонується цілком. QLoRA віддає компактний файл адаптера — його тримають поруч із базою, перемикають під різні задачі та відкочують без перезбирання моделі.
Технічні сумніви: розбираємо часті питання
Перед стартом замовники перевіряють ризики: чи не деградує модель після донавчання, чи вистачить власних даних і що із захистом корпоративної інформації. Відповіді на сумніви, які найчастіше виринають на етапі оцінювання, — нижче.
Чи не погіршиться якість на загальних задачах?
Базові ваги заморожені, навчаються лише низькорангові адаптери — загальні знання не перезаписуються. До викату проганяємо єдиний набір контрольних питань за вихідною та донавченою версією: є розбіжності — зменшуємо кількість епох або внесок адаптера.
У нас мало даних — навчання вистачить?
Для вузької задачі достатньо кількох сотень якісних пар «запит — відповідь», які доповнюємо синтетикою та розміткою реальних звернень. Якщо прикладів зовсім мало, звужуємо задачу до однієї операції — точність зростає замість розмивання по всьому домену.
Модель уже в продукті — донавчання її зламає?
Навчання йде в окремому контурі й не чіпає працюючий сервіс. Адаптер підключається до тієї ж базової моделі, тому перемикання — підміна одного файлу, а відкат — повернення попереднього, без простою та повторного впровадження.
Яке потрібне обладнання під QLoRA і як часто перенавчати?
Вистачає однієї карти професійного класу: квантування стискає ваги, кластер не потрібен. Дані не залишають ваш контур, а перенавчання запускаємо за метрикою — коли зростає частка відмов, а не за календарем.
Обговоримо задачу: з чого починається робота над моделлю
Починаємо не з навчання, а з розбору сценарію: що модель має робити краще за базову, які відповіді вважаємо неправильними й чим це вимірюється.
Так оцінка задачі донавчання спирається на метрику якості, а не на обсяг датасету, і рішення про QLoRA ухвалюється по суті, а не за замовчуванням.
Що робимо на вході:
- розбираємо сценарій і формулюємо, який результат вважаємо покращенням щодо вихідної моделі;
- перевіряємо дані: повнота, дублікати, якість розмітки, перетини між навчальною та перевірною вибірками;
- пропонуємо схему навчання: які шари адаптуємо через LoRA, які ваги тримаємо в квантованому вигляді, якого розміру адаптера достатньо;
- збираємо перевірний набір і набір метрик — частка коректних відповідей, відповідність формату, стійкість на рідкісних запитах;
- запускаємо пробний прогін навчання на малому зрізі: він показує, чи збігається модель і який обсяг даних реально потрібен;
- фіксуємо план робіт за етапами з точками контролю й зрозумілою умовою зупинки, якщо якість не зростає.
Пробний прогін — найдешевший спосіб зняти невизначеність: він займає години, а не тижні, і дає цифри, з якими можна ухвалювати рішення про старт проєкту. Далі йде повний цикл: донавчання, порівняння адаптера з базовою моделлю на відкладеній вибірці, пакування в робочий сервіс.
Опишіть задачу — повернемося з оцінкою, варіантами схеми та планом робіт.







