Batch Size

batch size — сколько примеров обрабатывается за один проход

Раздел
Параметры
Обновлено
03.07.26

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 изображений.

Что происходит под капотом:

  1. Текст промпта токенизируется, проходит через CLIP — получается batch_size × N эмбеддингов.
  2. Генерируется начальный шум — тензор размером batch_size × 4 × 128 × 128 (для SDXL).
  3. Sampler на каждом шаге считает denoise сразу для всех batch_size изображений параллельно.
  4. После последнего шага 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 не влияет на качество одной картинки — только на скорость и количество.