Downloads · 30 days
5
12% of all-time downloads
Danilius228/llava-saiga-8b-lora-gqa-ru
llava-saiga-8b-lora-gqa-ru is a visual question answering model from Danilius228. Use it for the visual question answering task on the model card, and read the license before you ship it in a product. It is set up for peft. The card lists the license as llama3.
LoRA-адаптер к русскоязычной визуально-языковой модели deepvk/llava-saiga-8b, дообученный методом QLoRA на датасете GQA-ru. Адаптер повышает качество ответов на визуальные вопросы на русском языке. Работа выполнена в…
Downloads · 30 days
5
12% of all-time downloads
All-time downloads
43
Public
Repo size
1.1 GB
Likes
0
Public
Click a slice to open those files.
.safetensors177 MB · 91%
From the Hugging Face model README
LoRA-адаптер к русскоязычной визуально-языковой модели deepvk/llava-saiga-8b,
дообученный методом QLoRA на датасете GQA-ru. Адаптер повышает качество ответов на
визуальные вопросы на русском языке. Работа выполнена в рамках летней практики
VK Education.
Адаптер подключается поверх базовой модели и не содержит её весов.
Полный прогон, протокол VK (для честного сравнения с опубликованными числами).
| Бенчмарк | Базовая модель | С адаптером | VK опубликовано |
|---|---|---|---|
| GQA-ru (exact-match) | 51.61 | 53.15 | 51.44 |
| MMBench-ru (circular) | 55.37 | 56.0 | 56.65 |
По 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.
| Параметр | Значение |
|---|---|
| Метод | QLoRA (база в NF4, обучаются только адаптеры) |
| Ранг LoRA / alpha / dropout | 16 / 32 / 0.05 |
| Целевые модули | q, k, v, o, gate, up, down проекции языковой части |
| Learning rate | 2e-4, косинусный планировщик, warmup 0.03 |
| Эпохи | 1 |
| Эффективный размер батча | 16 |
| Обучающих примеров | 12 000 (GQA-ru train, seed=42) |
| Оборудование | NVIDIA L4 (Colab Pro) |
Зрительный энкодер и проектор «зрение → язык» заморожены; адаптеры добавлены только к линейным слоям языковой модели. При подсчёте функции потерь маскируются токены промпта и изображения — градиент идёт только от токенов ответа.
Дообучение на коротких открытых ответах GQA сдвигает модель в сторону краткого формата. Это помогает exact-match на GQA, но вредит логической проверке утверждений: в разборе ошибок 44 % вопросов, которые обучение испортило, — это инверсии да/нет. По MMBench-ru circular адаптер не превосходит опубликованное VK число, оставаясь в пределах шума.
MMBench-ru не использовался при обучении — только для оценки.