← На главную

Soup v0.72.4: layer streaming уместил 8B модель в 4 ГБ GPU

04.08.2026 11:17 · hackernews

Soup — это CLI для fine-tuning и пост-обучения LLM, который обещает убрать боль с инфраструктурой: ноль SSH, один YAML-конфиг, одна команда. Установка — pip install "soup-cli[train]", причём кавычки должны быть двойными: одинарные работают в bash, zsh и PowerShell, но ломаются в Windows cmd.exe. Обучение идёт локально на своей GPU через QLoRA, батч-сайз и квантование Soup определяет сам.

Главное в свежем релизе v0.72.4 — layer streaming для DPO, ORPO, SimPO и KTO. Раньше так гоняли только SFT, теперь работают все четверо. Замороженная база не лежит в VRAM: она подаётся в GPU по одному decoder-слою. Для DPO reference-модель бесплатна — это та же стриминговая база с выключенными адаптерами. На RTX 3050 4 GB пиковое потребление у streamed DPO составило 0.914× от пика SFT, а отдельная вторая модель стоила бы +730 MB. KTO тоже не reference-free и обрабатывается так же; ORPO и SimPO обходятся без reference. Результат бит-экзактен относительно обычного не-стримингового запуска: разница 0.0. Но память бесплатна, а время нет — DPO читает слои в 1.52× чаще на шаг. GRPO и PPO намеренно не поддержаны: генерация перечитывает слои на каждый токен, и стриминг тут не амортизирует.

В v0.72.1 починили баг: адаптеры, обученные на v0.72.0 с stream_layers: true, сохраняли тензоры под ключами с лишним .inner., поэтому лоадеры возвращали исходную базу без тюнинга. Проверяется через safetensors.torch.load_file.

Прошлые релизы тоже подвезли кое-что. В v0.71.40 появился soup reward synth: он генерирует детерминированный верификатор из JSONL референсов и отказывается выдавать функцию, которая не отличает хорошие ответы от плохих. В v0.71.39 soup ship получил эмитируемый и привязанный к конфигу вердикт, а в v0.71.38 — регрессионный гейт с семью офлайн-наборами, от MCQ до safety/refusal. В v0.71.33 добавлен soup draft measure для speculative decoding: замеряет acceptance rate и tok/s. На примере дистилляция не сдвинула acceptance (69.3% → 69.3%), а assisted-декодирование оказалось медленнее обычного.

Soup работает с любой текстовой моделью с HuggingFace, если она грузится через AutoModelForCausalLM: Llama 3.x/4, Qwen 2.5/3, Gemma 3, Mistral, DeepSeek и другие. Обычно на 8 GB GPU — QLoRA до ~7B, на 24 GB — до ~34B, на 48 GB — до ~70B; с layer streaming 8B влезает на 4 GB. Требования — Python 3.10+, GPU с CUDA (или Apple Silicon MPS); CPU только для тестов. Есть Docker-образ на GHCR, лицензия Apache-2.0. Проект живёт на GitHub и разрабатывается на одном 4 GB ноутбуке; препринт Алпамыса Макажана Exact Layer Streaming: LoRA Fine-Tuning of an 8B Model on a 4 GB Laptop GPU описывает технологию и подтверждает бит-экзактность (DOI 10.5281/zenodo.21771064).

Читать оригинал →