Soup: как fine-tune LLM на ноутбуке без боли

#llm#fine-tuning#yaml-config#machine-learning

Когда впервые увидел Soup от MakazhanAlpamys, подумал — очередной wrapper над transformers. Но цифры в README заставили перепроверить: 8B параметров на 4GB GPU? Это либо гениально, либо слишком хорошо, чтобы быть правдой. Решил разобраться, как работает этот «супчик» и кому он реально полезен.

Layer streaming против OOM

Главный трюк Soup — layer streaming. Вместо загрузки всей модели в память, он динамически подгружает и выгружает слои во время обучения. Технически это выглядит так:

model:
  name: "meta-llama/Llama-2-7b-hf"
  streaming:
    enabled: true
    buffer_layers: 4  # сколько слоёв держать в памяти

На практике это означает, что:

Важный нюанс — layer streaming не magic bullet. Если у вас действительно древний ноутбук с 2GB памяти, даже этот подход не спасёт. Но разница между «вообще не запускается» и «работает с оверхедами» существенна.

YAML как единый интерфейс

Что мне реально зашло в Soup — это минималистичный конфиг. Всё, от гиперпараметров до данных, описывается в одном YAML:

training:
  dataset: "path/to/preprocessed.jsonl"
  batch_size: 2
  gradient_accumulation: 8
  lr: 5e-5
  lora:
    r: 16
    target_modules: ["q_proj", "v_proj"]

Плюсы такого подхода:

Но есть и подводные камни. Например, если нужно кастомный preprocessing — придётся либо дописывать Python-скрипты, либо мириться с ограниченными возможностями встроенного пайплайна.

Практический сценарий: дообучение на доменных данных

Попробовал Soup на реальной задаче — дообучить Llama 2 7B на датасете технической документации. Вот что сработало:

  1. Подготовка данных: Конвертировал Markdown-документы в JSONL с помощью простого Python-скрипта
  2. Базовый конфиг: Взял шаблон из examples и адаптировал под свои нужды
  3. Запуск:
soup train --config my_finetune.yaml --output_dir ./checkpoints

Результаты после 3 часов на RTX 3060 (6GB):

Неожиданно обнаружил, что Soup неплохо интегрируется с W&B для логгирования. Достаточно добавить в конфиг:

logging:
  wandb:
    project: "my-llm-experiments"
    tags: ["finetune", "docs"]

Где Soup не панацея

При всей своей элегантности, инструмент имеет ограничения:

Для production-grade тонкой настройки я бы всё равно использовал более зрелые фреймворки. Но как инструмент для быстрого прототипирования и экспериментов на слабом железе — Soup действительно удобен.

Если вы:

…то стоит дать Soup шанс. Лично я добавил его в свой инструментарий для быстрых экспериментов, когда не хочется разворачивать тяжёлую инфраструктуру. А вот для продакшена пока присматриваюсь — нужно больше тестов на stability и reproducibility.


Источник: https://github.com/MakazhanAlpamys/Soup