Проблема в том, что многие сначала думают о модели, а потом уже о режиме её работы. Правильнее наоборот. Сначала надо понять, когда и кому нужен ответ. Только после этого становится ясно, строим ли мы batch-пайплайн, online API или гибридную схему. Именно поэтому выбор между batch inference и real-time inference — это не вторичная MLOps-деталь, а часть постановки самой задачи.
Продакшен в ML лучше изучать как связанную цепочку, а не как набор изолированных терминов. Поэтому выбор между batch и real-time inference полезно рассматривать не отдельно, а как часть общей логики того, как модель вообще попадает в продукт и начинает жить внутри рабочей системы.
В 2026 году это особенно заметно. Всё больше систем работают одновременно в нескольких ритмах: ночные пересчёты рейтингов, near-real-time refresh признаков, онлайн-скоринг в API, стриминговые триггеры и периодические feature backfills. В таком мире зрелая команда должна не просто “уметь деплоить модель”, а уметь выбирать правильный режим её эксплуатации.
Главная интуиция: не каждая модель должна отвечать мгновенно
Очень частая ошибка новичков — романтизировать real-time inference. Кажется, что онлайн-ответ — это всегда более продвинутый путь. Но на деле во многих задачах он просто не нужен. Если модель один раз в день считает риск churn для миллиона пользователей, а маркетинг потом использует этот скор в дневной кампании, мгновенный API здесь не приносит пользы. Он только усложняет систему.
И наоборот, если антифрод-модель должна остановить подозрительную транзакцию до её подтверждения, batch-режим бессмысленен. Ответ через два часа уже не решает задачу. Поэтому правильный вопрос звучит так: когда решение должно стать доступным, чтобы оно имело смысл для продукта или процесса?
Именно в этот момент становится полезным и более общий материал о том, как довести модель до продакшена: там хорошо видно, что способ доставки предсказания в продукт нельзя отделить от самой архитектуры решения.
Что такое batch inference по сути
Batch inference — это пакетный расчёт предсказаний сразу для набора объектов. Обычно он запускается по расписанию: раз в день, раз в час, после прихода батча данных или по завершении ETL-пайплайна. Модель получает таблицу объектов, считает предсказания и складывает результат в витрину, feature store, таблицу скоринга или downstream-систему.
Интуитивно batch inference хорош там, где ответ не требуется мгновенно и где выгоднее считать всё пакетами. Это часто проще, дешевле и устойчивее в эксплуатации. Особенно в аналитике, CRM, churn scoring, lead scoring, продуктовых сегментах, рекомендательных precompute-слоях и любых задачах, где решения принимаются не в момент пользовательского действия, а чуть позже.

Что такое real-time inference по сути
Real-time inference — это режим, в котором модель отвечает на запрос почти сразу после поступления признаков. Обычно это API или сервисный вызов, встроенный в пользовательский или системный поток. Здесь важны latency, доступность и стабильность ответа. Решение должно прийти вовремя, иначе оно теряет ценность.
Такая схема нужна в fraud detection, dynamic pricing, ranking, поиске, персонализации интерфейса, instant recommendations, moderation, онлайновом кредитном скоринге и других сценариях, где система должна реагировать до того, как окно принятия решения закроется.
Если хочется глубже почувствовать именно цену этой скорости, рядом полезно посмотреть и разбор latency в ML API: там видно, почему real-time inference упирается не в абстрактную «быстроту», а в очень конкретные ограничения по задержке.
Выбор режима — это выбор между задержкой и объёмом
Самая удобная интуиция здесь такая: batch inference оптимизирует throughput, а real-time inference оптимизирует latency. В пакетном режиме нас волнует, сколько объектов мы можем обработать за большой интервал. В онлайновом — сколько времени занимает ответ для одного запроса или маленького микробатча.
(Latency = t_{response}-t_{request})
Раздел математики: теория измерений и прикладной анализ систем.
Что означает каждый символ:
(Latency) — время ответа системы на один запрос.
(t_{request}) — момент поступления запроса.
(t_{response}) — момент получения ответа.
Формула нужна для того, чтобы видеть real-time режим не как абстрактную “быстроту”, а как конкретную измеряемую задержку между входом и ответом модели.
Численный пример: если запрос пришёл в (12{:}00{:}00.100), а ответ вернулся в (12{:}00{:}00.165), latency равна 65 миллисекундам. Для части онлайновых задач это приемлемо, для других — уже слишком медленно.
Для batch-режима важнее другая перспектива: сколько всего записей система способна обработать за интервал времени. Там мы смотрим не на миллисекунды одного ответа, а на пропускную способность всего пайплайна.
(Throughput = frac{N}{T})
Раздел математики: прикладная арифметика и анализ производительности.
Что означает каждый символ:
(Throughput) — пропускная способность вычислительного контура.
(N) — количество объектов, обработанных моделью.
(T) — время, за которое эти объекты были обработаны.
Формула помогает увидеть, почему batch inference часто выгоден: если мы считаем много объектов сразу, то система может лучше утилизировать ресурсы и давать высокий throughput.
Численный пример: если nightly pipeline обработал 12 миллионов пользователей за 20 минут, то throughput составляет 600 тысяч объектов в минуту. Для CRM-скоринга это может быть намного ценнее, чем мгновенный ответ по одному пользователю.

Почему batch inference часто недооценивают
Batch-режим выглядит менее эффектно, но во многих продуктах он оказывается архитектурно самым разумным. Он проще в эксплуатации, лучше переносит временные пики, легче масштабируется по расписанию, дешевле в обслуживании и намного проще для feature engineering. Мы можем спокойно собрать признаки, проверить схему, прогнать pipeline целиком и сохранить результат туда, где его заберёт downstream-система.
Для многих задач это и есть зрелое решение. Не “временно, пока не сделали real-time”, а именно правильный эксплуатационный режим. Особенно если бизнес-процесс сам живёт пакетами, а не моментальными решениями.
Почему real-time inference тоже не стоит романтизировать
Онлайн-инференс требует больше дисциплины. Нужно быстро собрать признаки, обеспечить low-latency доступ к данным, поддерживать API, контролировать timeouts, думать о деградации при пиках нагрузки, строить fallback-логику и следить, чтобы training-serving skew не рос между офлайном и онлайном. Это сильно усложняет систему.
Именно поэтому real-time inference следует выбирать только там, где есть реальная ценность мгновенного ответа. Если такой ценности нет, то онлайн-режим часто становится дорогой архитектурной игрушкой.
Batch и real-time как задача оптимизации
Выбор режима удобно понимать как задачу оптимизации при ограничениях. Мы хотим максимизировать полезность решения, но обязаны учитывать задержку, стоимость, сложность инфраструктуры и доступность признаков на момент инференса.
(Mode^{*}=argmax_{m in {batch, realtime}} U(m) quad text{subject to} quad L(m)le tau, C(m)le kappa)
Раздел математики: теория оптимизации.
Что означает каждый символ:
(Mode^{*}) — оптимальный режим работы модели.
(m) — кандидат на выбор: batch или real-time.
(U(m)) — полезность режима для продукта.
(L(m)) — задержка ответа или бизнес-лаг принятия решения.
(tau) — максимально допустимая задержка.
(C(m)) — стоимость эксплуатации выбранного режима.
(kappa) — допустимый бюджет на вычисления и инфраструктуру.
Формула отражает очень практическую идею: лучший режим — не тот, который “технологичнее”, а тот, который даёт максимальную пользу в рамках реальных ограничений продукта.
Численный пример: если рекомендация должна перестраиваться один раз в сутки, то batch-режим может давать высокую полезность при малой стоимости. Если же антифрод-решение нужно до подтверждения платежа, batch уже не проходит по ограничению на задержку, даже если он дешевле.
Где обычно живёт batch inference
В nightly scoring, hourly scoring, пересчёте сегментов, ранжировании каталога, offline recommendations, lead scoring, churn campaigns, прогнозировании спроса на следующий день, batch-обновлении цен, подготовке risk bands и любых сценариях, где между расчётом и действием есть естественный буфер по времени.
Преимущество в том, что здесь можно использовать более тяжёлые модели, более широкие признаки и более стабильные данные. Система живёт в удобном ритме, а не в стрессовом режиме постоянного ответа на каждую миллисекунду.
Где обычно живёт real-time inference
В ранжировании выдачи, detection-сценариях, проверке транзакций, выборе следующего баннера, персонализации страницы, модерации контента, динамической маршрутизации заявок, выборе лимита на лету и в целом там, где окно принятия решения открыто очень коротко.
Именно здесь real-time inference имеет смысл. Но цена этого смысла — более сложная операционная среда. Поэтому решать “давайте сделаем онлайн” нужно не по эстетике, а по реальной необходимости.

Гибридный режим: самое частое зрелое решение
Во многих системах лучший вариант — не выбирать между batch и real-time как между несовместимыми лагерями, а комбинировать их. Например, тяжёлые признаки и базовый скор считаются пакетно, а небольшой онлайн-слой делает финальную корректировку в момент запроса. Или nightly pipeline строит candidate set, а online-модель ранжирует его по текущему контексту.
Это зрелый подход, потому что он позволяет вынести дорогую часть вычислений в пакетный режим, а real-time оставить только там, где он действительно нужен. В рекомендательных системах, fraud и продуктовой персонализации это встречается очень часто.
На практике такой гибрид почти всегда тянет за собой и инфраструктурные решения: где будет жить API-слой, как изолировать окружение и чем собирать сервис в воспроизводимом виде. Поэтому здесь органично переходить к материалам про FastAPI для ML API и Docker для Machine Learning, а не рассматривать inference-режим отдельно от среды, в которой он запускается.
Геометрический смысл выбора режима
Если смотреть геометрически, batch и real-time — это два разных пути через пространство вычислений. Batch двигается большими шагами и обрабатывает широкие области данных за один проход. Real-time двигается короткими локальными шагами, но должен попадать в очень узкие временные рамки. Первый режим минимизирует суммарную стоимость на большом объёме. Второй — стоимость ожидания для одного события.
Такой взгляд полезен тем, что он снимает ложный спор о том, какой режим “лучше”. Они оптимизируют разные геометрии задачи. Значит, и выбирать их надо по разным ограничениям.
Какие ошибки делают чаще всего
Первая ошибка — строить real-time систему там, где бизнес спокойно живёт на batch. Вторая — пытаться nightly scoring использовать в задаче, где окно решения исчисляется секундами. Третья — забывать, что real-time требует real-time features, а не только real-time модели. Четвёртая — не считать стоимость и SLA, а выбирать режим из технологического энтузиазма. Пятая — не различать latency модели и latency всей системы, включая feature lookup и сеть.
Есть и более тонкая ошибка: считать, что режим инференса можно выбрать уже после разработки модели. На самом деле этот выбор должен влиять на feature engineering, инфраструктуру, release pipeline и даже на допустимый класс алгоритмов.
Поэтому в зрелой команде этот выбор почти всегда связан и с тем, как устроен выпуск изменений. Если хочется продолжить тему уже со стороны эксплуатационной дисциплины, полезно отдельно посмотреть, как устроен CI/CD для ML-сервисов.
Python: простой пример batch и online вызова модели
import pandas as pd # Подключаем pandas для работы с batch-таблицей.
from sklearn.ensemble import RandomForestClassifier # Берем модель как пример.
model = RandomForestClassifier() # Создаем объект модели.
# Batch inference
batch_data = pd.read_csv("batch_users.csv") # Загружаем пакет объектов для массового скоринга.
batch_scores = model.predict_proba(batch_data)[:, 1] # Считаем вероятности для всей таблицы сразу.
print("Batch predictions:", batch_scores[:5]) # Показываем первые batch-результаты.
# Real-time inference
online_object = [[12, 3, 0.78, 5]] # Собираем один объект, пришедший в момент запроса.
online_score = model.predict_proba(online_object)[0, 1] # Получаем вероятность для одного запроса.
print("Online prediction:", online_score) # Печатаем результат онлайн-инференса.Код здесь предельно простой, но он хорошо показывает различие режимов. В batch inference модель обрабатывает много объектов одним вычислительным актом. В real-time inference она отвечает на конкретный одиночный запрос. Алгоритм может быть один и тот же, а эксплуатационный режим — принципиально разный.
Что важно вынести из темы
Batch inference и real-time inference — это два разных способа встроить модель в жизнь продукта. Первый хорош там, где ответ можно считать пакетами и заранее. Второй нужен там, где решение должно прийти немедленно. Правильный выбор между ними зависит не от моды и не от “уровня технологичности”, а от окна принятия решения, стоимости, доступности признаков и эксплуатационных ограничений системы.
Если сформулировать совсем коротко, режим работы модели должен подчиняться ритму бизнеса. Именно этот ритм и определяет, будет ли модель считать ночью для миллионов объектов, отвечать за миллисекунды на один запрос или жить в гибридном режиме между этими двумя крайностями.
Kaggle notebook по теме:
https://www.kaggle.com/code/svendaj/running-pipeline-of-notebooks-with-kaggle-api/code