Danilius228/llava-saiga-8b-lora-gqa-ru
llava-saiga-8b-lora-gqa-ru
LoRA-адаптер к русскоязычной визуально-языковой модели deepvk/llava-saiga-8b, дообученный методом QLoRA на датасете GQA-ru. Адаптер повышает качество ответов на визуальные вопросы на русском языке. Работа выполнена в рамках летней практики VK Education.
Адаптер подключается поверх базовой модели и не содержит её весов.
Результаты
Полный прогон, протокол VK (для честного сравнения с опубликованными числами).
По GQA-ru адаптер превосходит опубликованное VK число (+1.71). По MMBench-ru результат в пределах статистического шума относительно базовой модели и опубликованного числа.
Использование
При загрузке обязательны два ручных фикса: у чекпоинтов deepvk стратегия выбора визуальных признаков в конфиге стоит default, хотя модель обучалась с full, а размер патча у процессора не заполняется автоматически. Без них адаптер даёт неверные ответы или падает.
import torch
from peft import PeftModel
from transformers import AutoProcessor, BitsAndBytesConfig, LlavaForConditionalGeneration
BASE = "deepvk/llava-saiga-8b"
ADAPTER = "Danilius228/llava-saiga-8b-lora-gqa-ru"
quant = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
)
model = LlavaForConditionalGeneration.from_pretrained(
BASE, quantization_config=quant, dtype=torch.bfloat16, device_map="cuda:0",
)
model.eval()
processor = AutoProcessor.from_pretrained(BASE)
processor.vision_feature_select_strategy = "full" # обязательный фикс
processor.patch_size = model.config.vision_config.patch_size # обязательный фикс
model = PeftModel.from_pretrained(model, ADAPTER) # подключаем LoRAТребуется transformers==4.57.3. Версия 5.x ломает LLaVA внутри get_placeholder_mask.
Обучение
Зрительный энкодер и проектор «зрение → язык» заморожены; адаптеры добавлены только к линейным слоям языковой модели. При подсчёте функции потерь маскируются токены промпта и изображения — градиент идёт только от токенов ответа.
Ограничения
Дообучение на коротких открытых ответах GQA сдвигает модель в сторону краткого формата. Это помогает exact-match на GQA, но вредит логической проверке утверждений: в разборе ошибок 44 % вопросов, которые обучение испортило, — это инверсии да/нет. По MMBench-ru circular адаптер не превосходит опубликованное VK число, оставаясь в пределах шума.
MMBench-ru не использовался при обучении — только для оценки.
Ссылки
- Код, отчёт и инструкция запуска: https://github.com/KYBOEB/vk-practice
- Базовая модель: deepvk/llava-saiga-8b
