QLoRA для дообучення LLM: NF4 квантизація та LoRA на одному GPU

Ви працюєте з великими мовними моделями, але не вистачає GPU для дообучення? Ми стикаємося з цією проблемою щодня. Наша команда вже 5+ років досвіду займається LLM і використовує **QLoRA** для ефективного навчання гігантських моделей на кшталт Llama 3.1 70B на одному A100 80GB. QLoRA (Quantized Low-

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

Часті запитання

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Ви працюєте з великими мовними моделями, але не вистачає GPU для дообучення? Ми стикаємося з цією проблемою щодня. Наша команда вже 5+ років досвіду займається LLM і використовує QLoRA для ефективного навчання гігантських моделей на кшталт Llama 3.1 70B на одному A100 80GB. QLoRA (Quantized Low-Rank Adaptation) — метод, що поєднує квантизацію базової моделі до 4-bit з навчанням LoRA-адаптерів у bf16/fp32. Це дозволяє дообучати 70B моделі на одному GPU з мінімальною втратою якості: за нашими тестами, різниця з повним fine-tuning у bf16 не перевищує 0.5% за метриками. QLoRA потребує в 4 рази менше пам'яті, ніж LoRA у bf16, при цьому якість знижується менш ніж на 0.5%. Ми пропонуємо дообучення під ключ: від підготовки даних до деплою. Гарантуємо відтворюваність результатів з фіксацією seed та версій. У нашому портфоліо 10+ успішних проєктів з дообучення LLM для юриспруденції, медицини та фінансів. QLoRA дозволяє заощадити до 70% витрат на інфраструктуру: економія на оренді GPU може сягати $1500 на місяць при використанні QLoRA замість повного fine-tuning.

Як працює QLoRA

Крок 1: базова модель завантажується в 4-bit NormalFloat (NF4) — спеціальний формат квантизації, оптимальний для нормально розподілених ваг нейромереж. Використовується бібліотека bitsandbytes.

Крок 2: для кожного квантизованого блоку зберігається окремий масштабуючий коефіцієнт (Double Quantization — квантизація самих масштабів).

Крок 3: при forward/backward pass ваги деквантизуються в bf16 «на льоту» для обчислень. Крок 4: LoRA-адаптери зберігаються та оновлюються в повній точності (bf16/fp32).

Результат: споживання пам'яті знижується приблизно в 4× порівняно з bf16 LoRA, при цьому якість практично не страждає завдяки NF4 квантизації.

Чому QLoRA — оптимальний вибір для обмежених GPU?

Основна причина — можливість дообучати моделі в 70B на єдиній карті. Якщо у вас немає доступу до кластера з 8 GPU, QLoRA — єдиний практичний метод. Наші клієнти підтверджують: після переходу з повного fine-tuning на QLoRA витрати на інфраструктуру знижуються в 3–5 разів при збереженні точності в межах 1%.

Як QLoRA впливає на якість?

Наші вимірювання показують: різниця між QLoRA та повним fine-tuning у bf16 становить менше 0.5% за recall/precision. Це підтверджується і в бенчмарках: NF4 квантизація спеціально спроєктована для мінімальної деградації.

Реалізація QLoRA

Код конфігурації QLoRA
from transformers import AutoModelForCausalLM, BitsAndBytesConfig from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training import torch # NF4 квантизація з Double Quantization bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16, bnb_4bit_use_double_quant=True, ) model = AutoModelForCausalLM.from_pretrained( "meta-llama/Meta-Llama-3.1-70B-Instruct", quantization_config=bnb_config, device_map="auto", ) model = prepare_model_for_kbit_training(model) lora_config = LoraConfig( r=64, lora_alpha=128, target_modules=["q_proj", "v_proj", "k_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], lora_dropout=0.05, task_type="CAUSAL_LM", bias="none", ) model = get_peft_model(model, lora_config) model.print_trainable_parameters() # trainable: 0.84% | all: 70B | memory: ~40 GB на 1×A100 80GB 

Вимоги до пам'яті QLoRA vs LoRA vs Full FT

Метод 7B 13B 34B 70B
Full FT (bf16) 4×A100 40GB 8×A100 40GB N/A 8×A100 80GB
LoRA (bf16) 1×A100 40GB 2×A100 40GB 4×A100 40GB 4×A100 80GB
QLoRA (NF4) 1×A100 24GB 1×A100 40GB 2×A100 40GB 1×A100 80GB

QLoRA дозволяє працювати з 70B моделлю на одній A100 80GB — це революційне зниження вимог до інфраструктури.

Gradient Checkpointing при QLoRA

При QLoRA активації займають основну пам'ять. Gradient checkpointing критично важливий:

from trl import SFTTrainer, SFTConfig training_args = SFTConfig( output_dir="./qlora-output", num_train_epochs=3, per_device_train_batch_size=2, gradient_accumulation_steps=16, gradient_checkpointing=True, gradient_checkpointing_kwargs={"use_reentrant": False}, learning_rate=2e-4, lr_scheduler_type="cosine", warmup_ratio=0.05, bf16=True, max_seq_length=4096, logging_steps=25, save_steps=100, report_to="wandb", ) 

Практичний кейс: 70B модель на одному A100 80GB (з нашої практики)

Задача: спеціалізація Llama 3.1 70B Instruct для аналізу юридичних договорів — класифікація ризиків, виявлення нестандартних умов, порівняння з шаблоном.

Чому 70B, а не 8B: раніше тестували Llama 3.1 8B — якість аналізу складних договорів неприйнятна (занадто багато пропущених нюансів). 70B дає якість, порівнянну з GPT-4o.

Інфраструктура: 1×A100 80GB. QLoRA NF4, r=64, alpha=128.

Датасет: 1400 договорів з розміткою (проведена практикуючими юристами): кожен договір → список ризиків з категорією та severity.

Час навчання: 3 епохи, 22 години на одній A100 80GB. Результати:

Метрика Llama 3.1 8B (fine-tuned) Llama 3.1 70B (QLoRA)
Recall ризиків 0.71 0.89
Precision 0.79 0.87
Якість формулювань (LLM-as-judge, 1–5) 3.6 4.5
Вартість інференсу vs GPT-4o API - -71%

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

Що входить у дообучення під ключ

  • Аудит даних: перевірка якості, розмітка, аугментація при необхідності.
  • Вибір архітектури LoRA (rank, alpha, target modules).
  • Конфігурація QLoRA: NF4, double quant, gradient checkpointing.
  • Навчання на вашому GPU або орендованому інстансі (допоможемо з налаштуванням).
  • Оцінка якості (hold-out set, LLM-as-judge).
  • Деплой через vLLM або Triton Inference Server з API endpoint.
  • Документація та передача моделі (ваги LoRA, конфіги, інструкції).
  • Навчання вашої команди роботі з моделлю.

Обмеження QLoRA

Швидкість навчання: деквантизація на льоту уповільнює навчання на ~20% порівняно з bf16 LoRA. Тепловиділення: A100 при QLoRA працює на межі — потрібна адекватна система охолодження.

Варіативність: результати трохи менш відтворювані через квантизаційні помилки (але ми фіксуємо seed і версії).

Терміни

  • Підготовка даних: 2–5 тижнів
  • Навчання (70B, QLoRA, 1×A100 80GB): 12–36 годин
  • Ітерації: 1–2 тижні
  • Разом: 4–8 тижнів

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

Джерело: Деттмерс Т. та ін., QLoRA: Efficient Finetuning of Quantized Language Models, arXiv:2305.14314, 2023.