Содержимое
LoRA: краткий гайд перед собеседованием Full fine‑tuning LLM — дорого и медленно. Если хочется дообучать LLM быстрее и дешевле, один из вариантов — Low‑Rank Adaptation (LoRA). Идея подхода состоит в обучении компактных добавок к весам модели и оставлении базовых весов замороженными. Этот подход позволяет дообучить модель, сэкономив ресурсы на обучение, а скорость инференса останется как у оригинальной модели. 📌Принцип работы LoRA Линейный слой — матрица весов W размером d×d (для простоты рассматриваем квадратную). При full fine‑tuning для неё обновляется d² элементов. В LoRA веса остаются замороженными, а обучается только добавка ΔWᵈˣᵈ, которая является произведением матриц Bᵈˣʳ и Aʳˣᵈ. Выход h для линейного слоя с новой добавкой вычисляется по формуле: h = Wx + (α / r) ∆Wx где: • x — входной вектор размерностью d; • ∆W = BA, Aʳˣᵈ и Bᵈˣʳ — обучаемые матрицы весов, где r значительно меньше d. Таким образом, в LoRA обучаются 2*d*r параметров, то есть намного меньше, чем при full finetuning. • α/r регулирует вклад адаптера: - r — ёмкость адаптера. Чем она больше, тем сильнее обновления, но тем выше риск переобучения и стоимость шага обучения (время и VRAM). На практике начинают со значений в диапазоне от 4 до 32, при сложных задачах можно увеличить до 64. - α — масштабирует вклад обновлений LoRA-адаптера. Здесь часто начинают с α = r. Если модель переобучается или градиенты нестабильны, можно уменьшать α (или добавить dropout). Главное — при изменении r держать α/r постоянным: если растет r, то α должен вырасти пропорционально. Часто LoRA-адаптеры добавляют к линейным проекциям attention — query_proj и value_proj. Для большего качества можно добавить и к другим элементам блока трансформера, например, к MLP или output_proj. Применение: • При дообучении LLM для сервисов поиска с RAG, корпоративных ассистентов, мультиязычных моделей и др. • Также популярен сценарий использования одной базовой LLM с несколькими адаптерами (multi-LoRA) под разные домены и клиентов. 📝Частые вопросы с собеседований • Зачем матрица обновления ΔW раскладывается на произведение A и B ? Почему бы не использовать одну матрицу? Если в качестве добавки использовать одну матрицу размером d × d — экономии не будет. Факторизация на Aʳˣᵈ и Bᵈˣʳ, где r значительно меньше d, сокращает количество обучаемых параметров и ускоряет обучение. • Преимущества LoRA vs классические адаптеры? LoRA не добавляет новых слоёв на инференсе, как в классических адаптерах, где из-за этого растёт latency и потребление памяти. Здесь их можно смержить в базовые веса, сложив по формуле и убрав накладные расходы на инференсе. • Когда выбирать LoRA? ◦ Нужно дообучение при ограниченных ресурсах Даже при 1-2 GPU по 24 GB можно дообучать модели размером 8b c LoRA и 30b с QLoRA, где базовая модель квантуется до 4-бит (NF4). ◦ Нужны лёгкие артефакты или быстрое переключение между доменами LoRA-адаптеры — небольшие добавочные веса, которые легко подмешиваются / меняются на инференсе. Можно держать адаптеры для разных доменов (например, «техподдержка», «юридический стиль», «код») и по запросу активировать нужный (multi-LoRA). ◦ Важно не удлинять ввод на инференсе В отличие от prompt / prefix-методов, которые добавляют позиции / KV-префиксы, увеличивают вычисления и KV-кэш, LoRA не меняет длину последовательности. А это критично для latency. ◦ Промптинг не даёт нужного качества или стабильного поведения Если улучшение промпта не решает задачу, LoRA даёт более стабильное поведение и прирост качества при минимуме обучаемых параметров. 🔗Полезные ссылки • Оригинальная статья LoRA • QLoRA • Документация huggingface по LoRA А чтобы знать, как применять finetuning для адаптации LLM под домен в реальном проекте — приходите на наш курс LLM Pro. Старт — 13 ноября. Читайте подробнее на сайте и оставляйте заявку до 12 ноября, чтобы присоединиться к обучению со скидкой 5% ⚡️ Автор: Алексей Яндутов