Soup: файнтюнинг 8B модели на ноутбуке с 4 ГБ GPU
Soup — open-source CLI для файнтюнинга LLM из одного YAML-файла. Layer streaming позволяет обучать модель Llama 8B на GPU с 4 ГБ VRAM.
Файнтюнинг больших языковых моделей — теперь с ноутбука
Открытый инструмент Soup от казахстанского разработчика Alpamys Makazhan резко снижает порог входа в обучение больших языковых моделей. Soup превращает боль файнтюнинга LLM в простой рабочий процесс: один конфиг, одна команда — и готово. Главная особенность — технология layer streaming, которая позволяет файнтюнить 8B-модель на ноутбучном GPU с 4 ГБ VRAM, держа замороженную базу вне VRAM и подавая её в GPU по одному декодерному слою за раз.
Как работает layer streaming
Обычно при обучении модель целиком живёт в видеопамяти GPU. Файнтюнинг современного LLM имеет жёсткий входной барьер: сама модель не влезает в память большинства устройств — 8B-модель в fp16 весит ~16 ГБ, плюс нужен запас для активаций, состояния оптимизатора и градиентов.
Soup решает это иначе. LoRA держит базовую модель замороженной — она только читается, никогда не записывается. Поэтому Soup хранит её в системной RAM и стримит в GPU по одному декодерному слою за раз. Пиковое использование VRAM сводится к размеру одного слоя вместо всей модели.
Это ключевая особенность серии v0.72 — layer streaming держит замороженную базовую модель полностью вне VRAM и подаёт её на GPU по одному декодерному слою через выделенный CUDA-поток, ограничивая пиковую VRAM размером одного слоя.
graph LR
A[Базовая модель\nв системной RAM] -->|один декодерный слой| B[GPU VRAM\n≤ 4 ГБ]
B --> C[LoRA-адаптер\nобучается]
C --> D[Результат:\nфайнтюненная модель]
style A fill:#4a90d9,color:#fff
style B fill:#e74c3c,color:#fff
style C fill:#27ae60,color:#fff
style D fill:#8e44ad,color:#fff
Реальные измерения производительности
На RTX 3050 Laptop 4 ГБ: Llama-3.1-8B-Instruct + NF4 показала 119,6 tok/s при пике 3,32 ГБ — побитово идентична обычному запуску с полной загрузкой в VRAM, и воспроизведена независимо на H100 при 113,00 tok/s в тех же 3,32 ГБ.
Разработчики успешно провели квантизацию Llama 3.1 8B Instruct в формат NF4 и файнтюнинг с LoRA на GeForce RTX 3050 Laptop GPU с 4 ГБ VRAM. При длине последовательности 512 токенов и batch size 1 пиковое использование VRAM составило 3,32 ГБ, а скорость обработки — 119,6 токенов в секунду.
| Параметр | RTX 3050 Laptop (4 ГБ) | H100 (для сравнения) |
|---|---|---|
| Модель | Llama-3.1-8B-Instruct + NF4 | Llama-3.1-8B-Instruct + NF4 |
| Пик VRAM | 3,32 ГБ | 3,32 ГБ |
| Скорость | 119,6 tok/s | 113,00 tok/s |
| Метод | LoRA, batch 1, seq 512 | LoRA, batch 1, seq 512 |
| Точность | bit-exact | bit-exact |
Сотня FLOP-кратное превосходство H100 над RTX 3050 не отражается в скорости токенов — значит, узкое место не в вычислениях, а в пропускной способности памяти при стриминге слоёв.
stream_layers: true). Если модель уже влезает в VRAM — лучше оставить стриминг выключенным: он медленнее обычного режима.Быстрый старт: три команды
Soup устанавливается через pip и работает полностью локально — без регистрации, кредитной карты и привязки к вендору.
# 1. Установка с поддержкой обучения
pip install "soup-cli[train]"
# 2. Создать конфиг (интерактивный мастер)
soup init --template chat
# 3. Запустить обучение
soup train
Пример минимального soup.yaml с включённым layer streaming:
# soup.yaml — затем просто `soup train --config soup.yaml`
training:
stream_layers: true # база стримится из VRAM; обучается только адаптер
quantization: 4bit # NF4 — ~4x меньше, 8B влезает в 4 ГБ карту
batch_size: 4 # большие батчи амортизируют чтение весов
stream_source: auto # RAM если влезает, NVMe если нет
seed: 1234
Доступны готовые шаблоны для chat, code, tool-calling, medical, reasoning, vision, RLHF и ещё десятка сценариев. Экспорт в GGUF, запуск в Ollama, публикация на HuggingFace — всё поддерживается.
Что нового в v0.73.2
Последний релиз сосредоточен на исправлении команды soup ship — встроенного «гейта выпуска» модели. В v0.73.2 гейт перестал ошибаться в обоих направлениях: soup ship отвечает на один вопрос — модель стала лучше или я её сломал? Два набора тестов ранжировали результаты по неправильному критерию, и целое направление отказов не имело детектора вообще.
Также добавлены:
soup ship --noise-floor N— повторяет базовую модель N раз и отказывается считать значимым любой дельта-результат меньше измеренного разбросаsoup data split --stratify-semantic— семантическая стратификация при разбивке датасетаsoup mcp serve --allow-execute— MCP-сервер с разрешением на выполнение
Поддержка DPO и preference-обучения
Для DPO референсная модель переиспользует тот же стримируемый базовый вес с отключёнными адаптерами, добавляя 0 дополнительной памяти под веса (измерено на уровне 0,914× пика SFT; принудительный второй экземпляр стоил бы +730 МБ). GRPO и PPO намеренно исключены, поскольку генерация перечитывает каждый слой на каждый токен — это нельзя амортизировать при стриминге.
stream_layers: true на версии v0.72.0, адаптер неактивен: тензоры сохранены под ключами с лишним сегментом .inner.. Обновитесь до v0.72.1+ и переобучите или пересохраните модель.Почему это важно для отрасли
Обучение LLM по-прежнему остаётся болезненным процессом: даже опытные команды тратят 30–50% времени на борьбу с инфраструктурой вместо улучшения моделей. Soup — бесплатный инструмент под лицензией Apache-2.0, разработанный MePlay, Inc., который сворачивает весь стек пост-обучения LLM в один YAML-конфиг и одну команду soup train. Он ориентирован на практиков, желающих файнтюнить большие языковые модели локально — без облачной инфраструктуры и экспертизы в конфигурации.
Проект разрабатывается и поддерживается на одном 4 ГБ ноутбуке — именно это, по словам автора, является причиной, по которой каждый показатель производительности измерен, а не просто заявлен. Исходный код и все измерения, включая неудачные эксперименты, опубликованы на GitHub.