Batch Size

batch size — число примеров, обрабатываемых вместе

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

Batch Size — количество примеров в одном вычислительном пакете. При генерации он влияет на память, задержку и пропускную способность; при обучении — ещё и на оценку градиента. Batch count лишь повторяет пакеты и не требует держать их в памяти одновременно.

Коротко

Коротко. Batch size отвечает на вопрос «сколько примеров модель обрабатывает одновременно». Большая пачка может лучше загрузить ускоритель, но требует больше памяти. Она не уменьшает общий объём вычислений пропорционально и не всегда ускоряет получение первого результата.

Batch при генерации

Если batch_size = 4, pipeline создаёт четыре latent и проводит их через модель вместе. Видеопамять хранит промежуточные активации для всей пачки, поэтому пик обычно растёт вместе с batch.

Ускоритель умеет выполнять многие операции параллельно. За счёт этого четыре изображения вместе могут закончиться быстрее, чем четыре полностью отдельных запуска. Реальный выигрыш зависит от модели, размера, backend и того, насколько устройство уже было загружено при batch 1.

Batch size и batch count

Эти параметры легко перепутать.

  • batch_size = 4, batch_count = 1 — четыре изображения одновременно.
  • batch_size = 1, batch_count = 4 — четыре последовательных запуска.
  • batch_size = 2, batch_count = 2 — две пачки по два изображения.

Итоговое число результатов одинаково, но пик памяти и время первого изображения различаются.

Throughput и latency

Latency — сколько ждёт один запрос или первый результат. Throughput — сколько результатов система выдаёт за единицу времени.

Большой batch чаще оптимизирует throughput. Для интерактивного интерфейса важнее latency, поэтому batch 1 может быть разумнее. Для ночной обработки каталога допустима очередь, которая собирает несколько похожих задач в пачку.

Почему память растёт

Веса модели обычно загружаются один раз, а тензоры каждого примера добавляются отдельно. Упрощённо:

память ≈ веса + batch × активации одного примера + служебный запас

Формула не точная: влияют attention, allocator, VAE, ControlNet, precision и оптимизации. Поэтому предел находят измерением пикового расхода конкретного workflow.

Наглядный пример

Дизайнер проверяет одну композицию на нескольких seed.

Сначала запускает batch 1, чтобы быстро убедиться, что workflow работает. Затем повышает пачку на один шаг и смотрит:

  • не возник ли out-of-memory;
  • сколько занял первый и весь batch;
  • насколько вырос пик памяти;
  • сохранилась ли стабильность.

Для финального upscale он возвращается к batch 1, потому что увеличенный кадр и дополнительные модели занимают больше памяти.

Batch при обучении

В обучении batch определяет, по скольким примерам оценивается градиент перед обновлением весов. Малый batch даёт более шумную оценку, большой — более гладкую, но требует памяти и иногда другой настройки learning rate.

Больший batch не гарантирует лучшего качества. Он меняет динамику оптимизации, поэтому сравнивать нужно кривые обучения и качество на валидации.

Gradient accumulation

Если нужная пачка не помещается в память, несколько micro-batches обрабатываются последовательно, а градиенты накапливаются до шага оптимизатора.

effective_batch = micro_batch
                × accumulation_steps
                × число обучающих процессов

Так можно приблизить размер градиентной пачки без одновременного хранения всех примеров. Но вычисления остаются последовательными, а BatchNorm и некоторые другие механизмы могут вести себя иначе.

Dynamic batching на сервере

Сервис может ненадолго собирать запросы разных пользователей в общий batch. Это повышает загрузку ускорителя, но добавляет ожидание в очереди.

Политика учитывает:

  • максимальное время ожидания;
  • совместимость размеров и параметров;
  • предел памяти;
  • приоритеты;
  • потоковую выдачу;
  • изоляцию пользовательских данных.

Пачка не должна смешивать контекст или результаты разных клиентов на уровне приложения.

Batch в ComfyUI

В графе batch может возникнуть в Empty Latent, при загрузке нескольких изображений или внутри custom node. Не каждая нода одинаково поддерживает пакет: одна сохранит размерность batch, другая обработает элементы по очереди, третья возьмёт только первый.

После изменения batch полезно проверить число файлов, имена, метаданные и соответствие управляющих масок каждому изображению.

Частые ошибки

  • Ожидать ускорение в N раз от batch N. Параллелизм ограничен памятью и загрузкой устройства.
  • Путать batch count с batch size. Первый повторяет работу, второй меняет одновременную пачку.
  • Считать свободную память линейно. Временные буферы и фрагментация тоже занимают место.
  • Менять batch при обучении без проверки learning rate. Динамика градиента изменится.
  • Сравнивать только общее время. Для интерактивного продукта важна задержка первого результата.
  • Предполагать поддержку всеми нодами. Размерность может потеряться внутри workflow.

Частые вопросы

Какой batch поставить для генерации?

Начать с 1 и повышать до точки, где throughput перестаёт заметно расти или память становится нестабильной. Точное число принадлежит workflow и устройству.

Batch делает изображения похожими?

Сам по себе нет. Разнообразие определяется seed и условиями. Ошибка в построении шума или повтор seed может дать дубликаты.

Gradient accumulation полностью равен большому batch?

Для суммы градиентов часто близок, если масштабирование реализовано правильно. Но некоторые слои, порядок операций и распределённое обучение создают отличия.

Почему batch 2 почти не быстрее batch 1?

Устройство могло быть уже загружено, bottleneck находится в памяти или отдельная нода обрабатывает элементы последовательно. Нужен профиль всего pipeline.

Главное

Batch size управляет одновременностью. В генерации он балансирует пик памяти, задержку и throughput; в обучении ещё влияет на градиент. Универсальное значение быстро превращается в плохой совет, а надёжный выбор даёт короткий benchmark точного workflow.