Batch Size

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

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

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

Коротко

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

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

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

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

Batch size и batch count

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

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

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

Скорость обработки и время ожидания

Задержка (latency) — время до выбранного события: например, первого фрагмента или полного ответа. Эти два времени лучше измерять отдельно. Пропускная способность (throughput) — число обработанных результатов за единицу времени.

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

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

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

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

Это оценка, а не точная формула: память расходуют временные буферы, механизм внимания, VAE, ControlNet и другие этапы. Значение имеют и точность вычислений, и способ выделения памяти. Предел находят измерением пика для своей схемы.

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

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

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

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

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

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

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

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

Gradient accumulation

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

effective_batch = micro_batch
                × accumulation_steps
                × число параллельных копий модели с разными данными

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

Для текстов разной длины есть ещё одна тонкость: усреднение потерь по пачкам может отличаться от усреднения по всем токенам. Если цель обучения рассчитана на токен, при накоплении учитывают общее число токенов без заполнителей. Этот случай разобран в документации Accelerate.

Динамическое объединение запросов на сервере

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

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

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

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

Batch в ComfyUI

В графе batch может возникнуть в ноде создания латентов, при загрузке нескольких изображений или внутри стороннего узла. Ноды могут обрабатывать пачку по-разному: одна передаст дальше все элементы вместе, другая обработает их по очереди, третья возьмёт только первый. Для знакомства с такой схемой подойдут материалы по ComfyUI на TimeSaver VFX, а роль латента и сэмплера показана в разборе KSampler.

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

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

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

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

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

Для первого теста удобно взять 1. Затем можно увеличивать пачку и сравнивать скорость с пиковым расходом памяти, оставляя запас до её исчерпания. Подходящий размер зависит от устройства и всей схемы.

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

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

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

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

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

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

Главное

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