Learnly
LLM Fine Tuning/Глава 4/Урок 3

Файн-тьюнинг VLM

Дообучение моделей 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, ...)

Практические шаги

  1. Подготовка данных

    • Используйте пары "изображение-текст", например, HuggingFaceM4/ChartQA.
  2. Настройка модели

    • Загрузите предобученную VLM, такую как HuggingFaceTB/SmolVLM2-2.2B-Instruct.
    • Инициализируйте процессор для подготовки текстовых и графических входов.
  3. Процесс дообучения

    • Форматируйте данные в chat-like сообщения (system, user, assistant).
    • Настройте оптимизатор, размер пакета и накопление градиентов.
    • Примените квантизацию и LoRA для эффективного использования памяти.

Оптимизация предпочтений (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 и квантование. Это помогает сократить использование памяти, не потеряв производительность.

Ресурсы

AI-тест
1 / 5

Что такое квантование при дообучении VLM?