Batch Size
batch size — сколько примеров обрабатывается за один проход
Batch Size — количество изображений (или текстовых примеров), которые модель обрабатывает за один проход. В Stable Diffusion определяет, сколько картинок генерируется одновременно. В тренировке — сколько примеров идёт через сеть до одного обновления весов. Главный регулятор скорости и потребления VRAM: выше batch — быстрее, но больше памяти. Связан с batch count: первый — за раз, второй — повторяет batch'и подряд.
Коротко
Коротко. Batch Size — это размер «пачки» данных, которая идёт через модель за один шаг. Batch=4 в Stable Diffusion означает: четыре картинки за раз. Batch Count — сколько таких пачек подряд. Главный компромисс: больший batch использует GPU эффективнее (быстрее на одну картинку), но требует больше VRAM. На SDXL batch=4 на RTX 4090 — стандарт; на RTX 4060 8 ГБ — обычно batch=1.
Что это такое
Дизайнер запускает Stable Diffusion для подбора композиции. Промпт — tropical sunset, palm trees, watercolor style. Хочет 8 вариантов, чтобы выбрать лучший.
Два пути:
Вариант 1: batch=1, count=8. Восемь последовательных генераций по одной картинке. Каждая занимает 7 секунд → суммарно 56 секунд.
Вариант 2: batch=4, count=2. Две пачки по 4 картинки. Каждая пачка занимает 11 секунд (картинки внутри пачки идут параллельно) → суммарно 22 секунды.
Разница в 2,5 раза. Не магия — GPU эффективнее «уплотняет» работу: 4 картинки делят между собой kernel-вызовы и подгрузку модели. Каждое изображение в пачке считается чуть медленнее, чем одна сольно, но суммарно — быстрее.
В этом и суть batch'а. Параллелизм за счёт VRAM: GPU обрабатывает несколько одинаковых задач быстрее, чем одну за раз — но за это надо платить памятью.
Как это работает
В Stable Diffusion есть два связанных параметра:
- Batch Size — сколько изображений обрабатывается одновременно (параллельно).
- Batch Count — сколько раз повторить такую пачку (последовательно).
Их произведение даёт общее число картинок. batch=4, count=3 = 12 изображений.
Что происходит под капотом:
- Текст промпта токенизируется, проходит через CLIP — получается
batch_size × Nэмбеддингов. - Генерируется начальный шум — тензор размером
batch_size × 4 × 128 × 128(для SDXL). - Sampler на каждом шаге считает denoise сразу для всех
batch_sizeизображений параллельно. - После последнего шага VAE декодирует все картинки одним вызовом.
VRAM при этом растёт примерно линейно:
- batch=1 на SDXL — 6,5 ГБ.
- batch=2 — около 8 ГБ.
- batch=4 — около 12 ГБ.
- batch=8 — около 20 ГБ.
Пример на практике
Иллюстратор подбирает обложку для книги в ComfyUI. У него RTX 4060 Ti с 16 ГБ VRAM.
Сценарий 1: тестирование промпта. Нужно быстро увидеть 12 вариантов одной идеи. Ставит batch=4, count=3. На SDXL это занимает 28 секунд против 60 секунд при batch=1, count=12. Выбирает понравившиеся, удаляет остальные.
Сценарий 2: финальный апскейл. Нашёл идеальный вариант, теперь делает Hires.fix с разрешением 2048×2048. На таком разрешении в VRAM помещается только batch=1. Это нормально — апскейл лучше делать по одной, точечно.
Сценарий 3: тренировка LoRA. Тренирует LoRA на 30 фотографиях актёра. На SDXL kohya_ss принимает train_batch_size: 1 и gradient_accumulation_steps: 4. Эффективный batch=4 (для математики градиентов), но VRAM как у batch=1 (для железа). Тренировка идёт 50 минут.
В ComfyUI batch управляется в ноде EmptyLatentImage (поле batch_size). В AUTOMATIC1111 — в основном интерфейсе два поля рядом: «Batch count» и «Batch size».
С чем часто путают
- Batch Size и Batch Count — Batch Size это параллелизм (за раз), Count это последовательность (повторение). Произведение даёт общее число.
- Batch Size при генерации и при тренировке — при генерации это просто скорость. При тренировке — влияет на качество градиентов и стабильность обучения.
- Batch Size и Steps — Steps это число шагов внутри одной генерации (denoise-итерации), batch — число параллельных изображений. Разные оси.
- Batch и Mini-batch — в академических текстах используют «mini-batch» для подчёркивания, что весь датасет за раз не подаётся. В практике обычно говорят просто «batch».
- Эффективный Batch Size — при
gradient_accumulation_steps > 1эффективный batch =train_batch_size × accumulation_steps. Для математики важен именно он.
Частые ошибки и заблуждения
- «Чем больше batch, тем быстрее всегда». Не всегда. После определённого размера упирается в VRAM или в пропускную способность памяти. На SDXL пик эффективности обычно batch=4–8.
- «Batch=8 даёт ровно в 8 раз быстрее». Нет. Внутри пачки картинки идут параллельно, но общая работа всё равно растёт. Реальное ускорение — 3–5× на 8 картинок.
- «Batch size влияет на качество одной картинки». Не влияет. Каждое изображение в batch генерируется независимо со своим seed'ом. Качество одинаковое.
- «Большой batch на тренировке всегда лучше». Не всегда. Некоторые модели лучше учатся на меньшем batch (особенно с ограниченным датасетом). Это полу-эмпирический параметр.
- «Batch=1 это медленно». Для тренировки часто это нормальный выбор: меньше памяти + grad-accumulation эмулирует большой batch. Скорость не главное в тренировке.
Связанные термины
- VRAM — главный лимит batch'а; больший batch требует больше памяти.
- Gradient Accumulation — техника, эмулирующая большой batch без VRAM-нагрузки.
- Steps — связанный параметр, но другая ось (внутри одной генерации).
- Sampler — обрабатывает batch параллельно, ему всё равно сколько изображений в пачке.
- KSampler — нода ComfyUI, через которую идёт batch.
- Training — в тренировке batch'у уделяют отдельное внимание.
Частые вопросы
Какой batch выбрать для SDXL на RTX 4060 8 ГБ? Обычно batch=1, иногда batch=2 на разрешении 768×768. На 1024×1024 чаще всего только 1.
Почему 4 картинки за раз быстрее, чем 4 подряд? GPU оптимизирован под параллельные вычисления. Внутри пачки модель один раз загружается, один раз запускаются kernel'ы, переключений контекста меньше. Это снижает overhead.
Влияет ли batch на seed?
Только косвенно. Каждое изображение в batch имеет собственный seed (обычно seed, seed+1, seed+2, …). При том же базовом seed'е тот же batch даёт одинаковые картинки.
Что такое gradient accumulation? Накопление градиентов в течение N шагов перед одним обновлением весов. Это позволяет «эмулировать» большой batch на маленькой видеокарте: VRAM как у batch=1, математика как у batch=N.
Может ли batch уменьшить качество? В инференсе — нет. В тренировке — иногда: слишком большой batch на маленьком датасете ухудшает обобщение. Это не свойство batch'а, а нюанс оптимизации.
Зачем тогда нужен Batch Count, если есть Batch Size? Не всегда возможно поднять batch (упёрлись в VRAM). Тогда Count позволяет генерировать пачки последовательно. Полезно для генерации галерей по 100+ картинок.
Главное
Batch Size — это размер «пачки», которую модель обрабатывает за один проход. В Stable Diffusion определяет, сколько картинок одновременно. Главный компромисс: больший batch = быстрее, но больше VRAM. Под каждую видеокарту есть свой оптимум, обычно его подбирают опытным путём — наращивая batch до первого out of memory. Для тренировки картина обратная: меньший batch + gradient accumulation работают надёжнее и аккуратнее обновляют веса. И самое важное: batch не влияет на качество одной картинки — только на скорость и количество.