QLoRA-дообучение LLM: эффективная квантизация с LoRA для больших моделей

Большая модель уверенно отвечает в демо, но ошибается на ваших данных и не знает вашей терминологии. Мы дообучаем модели с квантизацией весов и адаптерами под ключ: аудит данных, настройка, оценка качества, передача адаптеров и документации. Работаем на ограниченном парке ускорителей — сроки и качество прогнозируемы.
Часто задаваемые вопросы

QLoRA: где ломается обычное дообучение большой модели

Полное дообучение большой модели обновляет все веса сразу, а вместе с ними держит в памяти градиенты и состояние оптимизатора. К объёму самих весов добавляются промежуточные активации, и суммарный расход памяти в разы превышает размер модели в файле. Запуск на одной карте заканчивается переполнением памяти при обучении: процесс падает на середине эпохи, чекпоинт не сохраняется, работа предыдущих часов теряется.

Дальше начинается выбор из плохих вариантов. Уменьшаем размер пакета — обучение идёт с постоянными пересчётами и растягивается, а шумные градиенты мешают сходимости. Раскладываем слои по нескольким ускорителям — платим обменом между ними и всё равно упираемся при росте длины контекста. Обрезаем контекст или чистим выборку — теряем ровно ту часть предметной области, ради которой затевалась адаптация модели под свои данные.

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

Корень в том, что полное дообучение переписывает всю модель ради задачи, которая обычно требует правки небольшой части поведения. QLoRA решает это иначе: базовые веса хранятся в низкоразрядном виде и заморожены, а обучаются компактные низкоранговые адаптеры LoRA — доли процента от общего числа параметров. Разбираем, как это устроено и где остаются ограничения.

Что даёт дообучение с квантизацией весов: измеримый эффект

Квантизация весов переводит базовую модель в низкоразрядное представление, а дообучение с LoRA оставляет адаптеры в полной точности. Градиенты и состояния оптимизатора считаются только для адаптеров — это доли процента параметров, поэтому экономия памяти при обучении измеряется в разах: конфигурация, которой раньше требовался узел из нескольких ускорителей, запускается на одном. Освободившийся запас уходит на больший размер батча и длину контекста.

Время дообучения модели падает по двум причинам: меньше устройств — меньше обмена градиентами, а шаг оптимизатора обновляет небольшую часть тензоров. Прогон на корпусе в сотни тысяч примеров укладывается в часы — гипотезы проверяются за день. Доля успешных запусков растёт: пиковая память больше не упирается в предел ускорителя, и падения по нехватке памяти переходят из регулярных в единичные.

Качество ответов модели сохраняется: базовые веса заморожены, а потери от квантования измеряются на отложенной выборке до выпуска в продукт. На доменных задачах — разбор обращений, извлечение полей, ответы по базе знаний — расхождение с полным дообучением остаётся в пределах погрешности, если ранг адаптеров, целевые модули и скорость обучения подобраны под задачу.

Отдельный эффект — воспроизводимость: на стеке Hugging Face мы версионируем конфигурацию прогона и сами адаптеры отдельно от базовых весов. Обновление модели превращается в замену адаптера, который на порядки легче базовой модели, а откат на предыдущую версию занимает минуты.

QLoRA и альтернативы: сравнение подходов и ограничений

Выбор метода дообучения модели определяется тремя осями: доступной памятью ускорителя, объёмом и однородностью данных, требованиями к воспроизводимости и откату. Ниже — четыре варианта адаптации, между которыми реально выбирают на проектах.

Вариант Когда подходит Ограничения
Полное дообучение Новый домен или язык, много данных, поведение модели меняется глубоко Максимальные требования к памяти, под каждую задачу хранится полный набор весов
Адаптеры LoRA Формат, стиль, извлечение сущностей; нужны десятки версий под разные задачи Ранг адаптера ограничивает объём новых знаний, на сильно сдвинутых данных качество проседает
Квантизованное дообучение (QLoRA) Большая модель, а память ограничена; адаптер учится поверх весов в 4-битном представлении Шаг обучения медленнее, результат чувствителен к настройке квантизации
Обучение подсказок Классификация и узкие задачи, мало размеченных примеров Новые знания усваивает слабо, чувствительно к формулировке входа

Разница между QLoRA и классическими адаптерами в том, что базовые веса замораживаются в 4-битном представлении NF4, а обучаются только низкоранговые матрицы: требования к памяти падают, качество остаётся близким к полному дообучению. Инструментарий уровня Hugging Face PEFT позволяет переключать варианты на одной кодовой базе, поэтому метод обратим: начинаем с адаптеров и переходим к полному дообучению только при доказанном дефиците качества.

Порядок работ: от аудита данных до передачи модели

До первой итерации фиксируем, что считаем результатом: тип задачи, формат ответа модели и метрику приёмки. Без этого подбор параметров превращается в перебор вслепую. Дальше идём по шагам, и каждый заканчивается артефактом, который можно проверить.

  1. Аудит данных и постановка задачи. Смотрим, что уже есть: логи, документы, таблицы. Считаем объём по классам, ищем дубли, пропуски и утечки целевой переменной — признак, косвенно содержащий ответ, обнуляет метрику на приёмке.

  2. Схема обучения. Делим выборку на обучающую и отложенную так, чтобы они не пересекались по клиентам или по времени. Заранее договариваемся, какой ответ считается правильным, а какой — опасной ошибкой.

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

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

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

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

Что остаётся у заказчика: адаптеры, веса, документация

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

  • Сохранённые адаптеры — веса QLoRA-дообучения отдельно от базовой модели: привязка к версии базовых весов, контрольная сумма и пометка, на каких данных они получены.
  • Конфигурация обучения — ранг и масштаб адаптера, целевые модули, схема квантизации, скорость обучения, планировщик и число эпох: по этому файлу запуск повторяется на другом стенде.
  • Схема обучения модели — как собран и очищен датасет, как разделён на обучение и контроль, как токенизированы примеры и чем отслеживалось переобучение.
  • Отчёт о метриках — динамика по эпохам, сравнение базовой и дообученной модели на контрольном наборе, разбор ошибок по типам запросов и примеры ответов до и после.
  • Набор регрессионных проверок — фиксированные запросы, с которыми новая версия сверяется перед выкладкой.
  • Инструкция по запуску — подключение адаптера к базовой модели, режимы вывода, работа с длинным контекстом и ограничениями по памяти.
  • Регламент работы модели — когда инициировать переобучение, какие данные добавлять, как версионировать адаптеры и как откатываться на предыдущую версию.

Всё лежит в одном репозитории с описанием структуры: дообучение остаётся воспроизводимым, а модель — на вашей инфраструктуре.

Кейс: дообучение модели на ограниченном парке ускорителей

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

Перевели обучение на квантизованный режим: базовая модель загружается в 4-битном представлении, обучаются только низкоранговые адаптеры, а состояния оптимизатора считаются для небольшой доли параметров. Обучаемый объём сократился на порядки, и качество ответов стало определяться данными, а не запасом железа.

Метрики до и после: было — ноль успешных запусков на имеющемся парке; стало — обучение идёт на двух ускорителях, ещё два остаются под вывод модели и параллельные эксперименты. Доля корректных ответов на отраслевом наборе вопросов выросла с 61% до 88%, соблюдение формата — с 70% до 96%. Одна эпоха обучения занимает втрое меньше времени, чем попытка полного дообучения на арендованном кластере.

Сроки и передача

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

Чем QLoRA отличается от полного дообучения на практике?

Полное дообучение меняет все веса модели: для каждого параметра хранятся градиенты и состояния оптимизатора, а память под это в разы превышает сам вес модели. Поэтому такие запуски упираются в несколько ускорителей и распределённую синхронизацию, а не в объём данных. QLoRA оставляет базовые веса замороженными и учит только низкоранговые адаптеры.

Базовая модель хранится в 4-битном квантизованном виде, а вычисления идут в более высокой точности — выигрыш по памяти получается кратным, а не процентным. Задача, которая раньше требовала нескольких узлов, решается на одной карте. Плата за это — распаковка квантизованных блоков на каждом шаге.

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

Точность адаптера предсказуема: на сужении домена, стиля или формата ответа низкий ранг догоняет полное дообучение. Если нужно вложить в модель новые знания или сменить язык, полный вариант точнее — ранг ограничивает объём того, что модель способна дописать.

Меняется и способ обновления: полное дообучение даёт новый слепок всей модели, который хранится и версионируется целиком. QLoRA отдаёт компактный файл адаптера — его держат рядом с базой, переключают под разные задачи и откатывают без пересборки модели.

Технические сомнения: разбираем частые вопросы

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

Не ухудшится ли качество на общих задачах?

Базовые веса заморожены, обучаются только низкоранговые адаптеры — общие знания не перезаписываются. До выката прогоняем единый набор контрольных вопросов по исходной и дообученной версии: есть расхождения — уменьшаем число эпох или вклад адаптера.

У нас мало данных — обучения хватит?

Для узкой задачи достаточно нескольких сотен качественных пар «запрос — ответ», которые дополняем синтетикой и разметкой реальных обращений. Если примеров совсем мало, сужаем задачу до одной операции — точность растёт вместо размывания по всему домену.

Модель уже в продукте — дообучение её сломает?

Обучение идёт в отдельном контуре и не трогает работающий сервис. Адаптер подключается к той же базовой модели, поэтому переключение — подмена одного файла, а откат — возврат предыдущего, без простоя и повторного внедрения.

Какое нужно оборудование под QLoRA и как часто переобучать?

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

Обсудим задачу: с чего начинается работа над моделью

Начинаем не с обучения, а с разбора сценария: что модель должна делать лучше базовой, какие ответы считаем неверными и чем это измеряется. Так оценка задачи дообучения опирается на метрику качества, а не на объём датасета, и решение о QLoRA принимается по делу, а не по умолчанию.

Что делаем на входе:

  • разбираем сценарий и формулируем, какой результат считаем улучшением относительно исходной модели;
  • проверяем данные: полнота, дубликаты, качество разметки, пересечения между обучающей и проверочной выборками;
  • предлагаем схему обучения: какие слои адаптируем через LoRA, какие веса держим в квантизованном виде, какого размера адаптера достаточно;
  • собираем проверочный набор и набор метрик — доля корректных ответов, соответствие формату, устойчивость на редких запросах;
  • запускаем пробный прогон обучения на малом срезе: он показывает, сходится ли модель и какой объём данных реально нужен;
  • фиксируем план работ по этапам с точками контроля и понятным условием остановки, если качество не растёт.

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

Опишите задачу — вернёмся с оценкой, вариантами схемы и планом работ.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139