Дообучение моделей VLM
В разделе 1 мы исследовали дообучение LLM с учителем, включая эффективные стратегии с использованием TRL. В этом разделе мы адаптируем эти методы для Vision Language Models (VLM), сосредоточившись на эффективности и производительности для конкретных задач.
Основные методы увеличения эффективности
При дообучении VLM память и вычислительные ресурсы быстро могут стать узким местом. Вот основные стратегии:
Квантование
Квантование снижает точность весов модели и активаций, сокращая потребление памяти и ускоряя вычисления.
- bfloat16 / float16 вдвое уменьшает требования к памяти, сохраняя точность.
- Квантование 8-бит / 4-бит еще больше сокращает память, с небольшими компромиссами в производительности.
⚠️ Особенно актуально для VLM, где визуальные признаки увеличивают нагрузку на память.
PEFT и LoRA
Низкоранговая адаптация (LoRA) замораживает базовые веса модели и обучает компактные матрицы разложения по рангу, радикально сокращая количество обучаемых параметров. В сочетании с PEFT дообучение требует миллионов обучаемых параметров вместо миллиардов, что делает крупные VLM доступными на ограниченном железе.
Оптимизация размера пакета
Экономия памяти при обучении может быть достигнута с использованием:
- Аккумуляции градиента: поддерживать эффективный размер пакета на протяжении нескольких шагов.
- Проверка точек градиента: пересчитывать промежуточные активации для сохранения памяти.
- Начинайте с большого пакета, уменьшайте при возникновении ошибок переполнения памяти (OOM) и комбинируйте с LoRA/квантованием для лучших результатов.
Supervised Fine-Tuning (SFT)
SFT адаптирует предобученную VLM к конкретной задаче с использованием размеченных датасетов (пар образ-текст). Примеры включают:
- Визуальный ответ на вопросы (VQA)
- Описание изображений
- Интерпретация графиков или диаграмм
Когда использовать SFT
- Специализируйте VLM в области, где базовая модель работает плохо.
- Изучите словарь или визуальные шаблоны, специфичные для области.
Ограничения
- Требуется высококачественные, размеченные датасеты.
- Может быть вычислительно интенсивным.
- Риск переобучения, если дообучение слишком узкое.
Пример использования
SFTTrainer поддерживает прямое обучение VLM.
Ваш датасет должен содержать дополнительный столбец images, содержащий визуальные входы. Подробности см. в документации по форматам датасета.
from trl import SFTTrainer
training_args = SFTTrainer(
output_dir="./fine_tuned_model",
per_device_train_batch_size=4,
num_train_epochs=3,
learning_rate=5e-5,
save_steps=1000,
bf16=True,
gradient_checkpointing=True,
gradient_accumulation_steps=16,
logging_steps=50
)
⚠️ Важно: установите max_length=None в SFTConfig.
В противном случае усечение может удалить токены изображений во время обучения.
SFTConfig(max_length=None, ...)
Практические шаги
Подготовка данных
- Используйте пары "изображение-текст", например,
HuggingFaceM4/ChartQA.
- Используйте пары "изображение-текст", например,
Настройка модели
- Загрузите предобученную VLM, такую как
HuggingFaceTB/SmolVLM2-2.2B-Instruct. - Инициализируйте процессор для подготовки текстовых и графических входов.
- Загрузите предобученную VLM, такую как
Процесс дообучения
- Форматируйте данные в chat-like сообщения (
system,user,assistant). - Настройте оптимизатор, размер пакета и накопление градиентов.
- Примените квантизацию и LoRA для эффективного использования памяти.
- Форматируйте данные в chat-like сообщения (
Оптимизация предпочтений (DPO)
Прямая оптимизация предпочтений (DPO) выравнивает VLM с человеческими предпочтениями, а не строгим выполнением инструкций.
- Полезно для творческих задач, субъективных суждений или многообразных ответов.
- Модель учится выбирать более انسان-ориентированный ответ, даже если он строго не является "верным."
Ограничения
- Требуется высококачественные датасеты с метками предпочтений.
- Обучение включает выборку предпочтений попарно и тщательное управление ресурсами.
Пример использования
- Датасет: Каждый пример содержит запрос (изображение + вопрос) и два кандидата на ответ:
Question: How many families?
Rejected: The image does not provide information about families.
Chosen: The image shows a Union Organization table setup with 18,000 families.
- Настройка модели: загрузите предобученную VLM, интегрируйте с TRL DPO и подготовьте процессор.
- Тренировочный конвейер:
- Форматируйте датасет в chat-like сообщения.
- Примените функцию потерь на основе предпочтений.
- Используйте накопление градиентов, чекпоинты, LoRA и квантизацию для эффективности.
Сравнение SFT vs DPO
| Feature | SFT | DPO |
|---|---|---|
| Вход | Помеченный image-text | Image-text + preference-ranked выводы |
| Потери | Стандартные супервизорные | На основе предпочтений |
| Цель | Адаптация для конкретной задачи | Человек-ориентированный вывод |
| Пример использования | Специализация домена | Творческие, субъективные или многоходовые задачи |
Практические советы
- Начните с малого: протестируйте с частью датасета прежде, чем начать полную тренировку.
- Используйте накопление градиентов + LoRA + квантизацию чтобы сократить использование памяти.
- Мониторите частоту чекпоинтов для балансировки места для хранения и безопасности.
- Проверьте на малом наборе для избежания переобучения.
Следующие шаги
После дообучения оцените производительность Ваших VLM для мульти meslekler с помощью бенчмарков и пользовательских тестовых наборов, применяя методы из Unit 2.
Fine-Tuning a VLM в hf jobs с использованием TRL
Как было сказано в ранних đơnайтах, LearnPath Jobs делают дообучение Vision Language Models (VLMs) легким. Вы можете запустить SFT или DPO прямо на инфраструктуре LearnPath с минимальной настройкой, меняя рантерые тренировочные параметры, o которых мы уже говорили.
Quick Example
hf jobs uv run \
--flavor a100-large \
--secrets HF_TOKEN \
--timeout 2h \
"https://raw.githubusercontent.com/huggingface/trl/main/trl/scripts/sft.py" \
--model_name_or_path HuggingFaceTB/SmolVLM2-2.2B-Instruct \
--dataset_name HuggingFaceM4/ChartQA \
--report_to trackio
--flavor a100-large: Тип GPU для обучения.--secrets HF_TOKEN: Ваш токен LearnPath.
Скрипт автоматически настраивает процессор, форматирует данные и обучает модель. После завершения работы готово к загрузке и использованию обученное VLM в последующих задачах.
Для экономичного обучения больших VLM рекомендуется комбинировать методы, такие как LoRA адаптеры, накопление gradient и квантование. Это помогает сократить использование памяти, не потеряв производительность.