Вопросы на собеседовании: MLOps-инженер
100 реальных вопросов с образцовыми ответами и пояснениями для уровня Senior.
Смотреть пример резюме: MLOps-инженер →Тренировка флешкарточками
Интервальное повторение · Hunter Pass
Вопросы
Я бы присоединял каждую метку к значениям признаков, доступным в момент исходного прогноза, а не в момент запуска обучения.
- Feast historical retrieval должен сопоставлять ключи сущностей и время событий, а окно метки начинаться через 14 дней после прогноза, чтобы будущие транзакции не попали в строку.
- Я бы хранил время события и время загрузки, принимал данные до watermark в 48 часов и версионировал исправления уже опубликованных разделов.
- Тест воспроизводит 10 000 пар сущность-время в BigQuery и падает, если время любого выбранного признака позже времени прогноза.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат предотвращать временную утечку при задержанных метках и опоздавших данных.
Я бы требовал версионированный контракт FeatureView, в котором можно проверить смысл, владельца, свежесть и совместимость.
- Определение должно содержать ключ сущности, тип, единицу измерения, правило для null, значение по умолчанию, владельца, источник и цель свежести, например 15 минут.
- Изменение типа или смысла создаёт новую версию с 30-дневным dual-read окном; совместимые добавления метаданных могут остаться в текущей версии.
- CI сравнивает 10 000 типичных строк из хранилища и Redis, затем блокирует публикацию при несовпадении схемы или выходе значений за заданный допуск.
Зачем это спрашивают: Сильный ответ рассматривает определение признака как исполняемый интерфейс, а не как необязательные метаданные каталога.
Я бы хранил историю в аналитическом хранилище, а в распределённый online store материализовал только текущие значения.
- BigQuery или Snowflake хранит 50 ТБ истории и выполняет point-in-time join, не заставляя оперативный слой держать старые версии.
- Kafka и Flink материализуют обновления в Redis Cluster, рассчитанный на 130 000 чтений в секунду с запасом 30% над пиком.
- Feast связывает оба пути одним определением, а проверки свежести каждые пять минут и сверка контрольных сумм по 1 млн ключей выявляют неполную материализацию.
Зачем это спрашивают: Интервьюер оценивает разделение исторического и низколатентного доступа при сохранении единого контракта признака.
Я бы измерял свежесть при чтении по времени исходного события и явно задал поведение для устаревшего значения.
- Flink записывает время события вместе со значением в Redis, а клиент отдельно измеряет задержку источника, обработки и возраст при выдаче.
- Prometheus считает долю чтений старше 60 секунд в скользящих окнах по 10 минут и вызывает дежурного только после двух нарушений подряд.
- После 120 секунд модель использует версионированное резервное значение или отказывается от прогноза; незаметно выдавать устаревшее значение нельзя.
Зачем это спрашивают: Вопрос проверяет, стала ли свежесть измеримым контрактом потребителя с заданным поведением при нарушении.
Я бы изолировал исторический расчёт от онлайн-публикации и после проверки продвигал только последнее допустимое значение.
- Spark пишет месячные offline-разделы в теневые таблицы с зафиксированными снимками источников и возобновляемыми идентификаторами разделов.
- Пересчёт использует отдельную очередь, а запись в Redis ограничена 5 000 операциями в секунду при измеренном свободном бюджете 20 000.
- При переключении выбирается самое новое событие для сущности и применяются проверки времени, поэтому старая строка не перезапишет более новое потоковое значение.
Зачем это спрашивают: Сильный ответ защищает мощность online serving и не позволяет историческим записям откатывать состояние.
Я бы опубликовал новую версию признака и переносил каждую модель отдельно, не меняя старое значение на месте.
- Feast публикует average_order_value_v2, а v1 остаётся доступной минимум 30 дней с отдельными lineage и владельцем.
- Обе версии материализуются в Redis, а Evidently семь дней сравнивает покрытие, долю null и PSI с порогом проверки 0,10.
- Три модели переходят отдельными релизами Argo CD; v1 удаляется, только когда registry lineage показывает ноль потребителей в обучении и serving.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат развивать общие признаки без скрытого изменения поведения.
Я бы сократил сетевые вызовы и заранее сформировал группы для запроса вместо 40 отдельных чтений.
- Feast feature service задаёт точный вектор из 40 признаков, а Redis хранит совместно читаемые значения под двумя или тремя ключами сущности вместо 12 удалённых вызовов.
- Бюджет выделяет 3 мс клиенту и сети, 8 мс Redis и 4 мс хвостового запаса при жёстком клиентском deadline 12 мс.
- Нагрузочный тест на 60 000 RPS измеряет задержку команд Redis, размер ответа, ожидание пула соединений и долю горячих ключей до принятия схемы.
Зачем это спрашивают: Вопрос проверяет практическое управление fan-out, формой данных и числовым бюджетом задержки признаков.
Я бы использовал одобренные моделью резервные значения с явным возрастом и признаком пропуска, а не превращал каждую ошибку чтения в ноль.
- Клиент держит ограниченный локальный кеш для низкокардинальных признаков и принимает значения не старше 10 минут только там, где это разрешает контракт.
- Пропуски online-значений заменяются версионированными defaults из обучающего датасета и выставляют индикаторы, которые модель видела при оценке.
- Deadline 20 мс и circuit breaker останавливают шторм повторов; доля деградированных прогнозов измеряется отдельно и должна быть ниже 0,5% за месяц.
Зачем это спрашивают: Сильный ответ сохраняет смысловую согласованность, ограничивает задержку и делает деградированные прогнозы видимыми.
Я бы развернул 116 реплик: измеренный пик покрывают 89, а запас мощности 30% повышает число до 116.
- Сквозной бюджет выделяет 8 мс маршрутизации, 32 мс инференсу и 10 мс очереди и хвостовым колебаниям.
- Реплики распределены по трём зонам с topology constraints, и каждая зона может потерять 10 реплик без превышения безопасной конкурентности.
- Admission control отклоняет работу после достижения возраста очереди 8 мс, потому что неограниченная очередь сохранит throughput, но нарушит p99.
Зачем это спрашивают: Интервьюер ожидает расчёт мощности, связанный с запасом на отказ, бюджетом задержки и поведением при перегрузке.
Я бы перебрал размеры батча и задержки очереди на трафике production-формы и выбрал самый быстрый вариант внутри p99 35 мс.
- Triton Model Analyzer тестирует батчи 4, 8, 16 и 32 с задержкой очереди от 0,5 до 4 мс, записывая время ожидания, выполнения и фактическое распределение батчей.
- Входы группируются по форме, потому что padding смешанного батча до крупнейшего изображения может съесть выигрыш throughput и поднять расход памяти.
- Я сохраняю 20% запаса throughput и отклоняю настройку, если очередь превышает 8 мс при 7 200 прогнозах в секунду, даже при хорошей средней задержке.
Зачем это спрашивают: Сильный ответ связывает настройки Triton с измеренным batching, совместимостью форм и хвостовой задержкой.
Я бы настраивал планирование токенов и tensor parallelism по реальным распределениям prompt и output, а не по фиксированному числу запросов в батче.
- Нужно сравнить схемы tensor parallel на 4 и 8 H100 с production p50 и p95 длины prompt, измеряя TTFT, время output token, занятость KV-cache и tokens per second.
- max_num_batched_tokens ограничивается так, чтобы prefill не блокировал decode, а интерактивные и batch-запросы получают разные очереди и лимиты конкурентности.
- На пике KV-cache остаётся ниже 90%, а низкоприоритетная работа сбрасывается при возрасте очереди 1,2 секунды, оставляя 600 мс на prefill и сетевой хвост.
Зачем это спрашивают: Интервьюер проверяет понимание continuous batching, давления на KV-cache и специфичных для LLM метрик задержки.
Я бы изолировал конкурентность, очереди и масштабирование по моделям, сохранив общий контракт маршрутизации.
- Популярные модели получают выделенные прогретые instance groups Triton; редкие делят пул, только если их суммарные нагрузка и память укладываются в проверенный лимит.
- Маршрутизатор применяет deadline, лимит конкурентности и ограниченную очередь для каждой модели, затем выбирает неизменяемую версию, а не изменяемый тег latest.
- Дашборды разделяют RPS, p99, возраст очереди, память GPU и долю отказов по моделям, а шумная модель сначала исчерпывает только собственную мощность.
Зачем это спрашивают: Вопрос проверяет баланс эффективности multi-model serving с изоляцией ресурсов и задержки.
Я бы масштабировал по спросу в очереди и заранее держал прогретую мощность на четырёхминутный запуск.
- Две прогретые GPU покрывают 300 RPS, а новая реплика добавляется на каждые измеренные 150 RPS, если возраст очереди выше 20 мс две минуты.
- Прогноз повышает минимум за 10 минут до ежедневного пика; уменьшение ждёт 15 минут, чтобы не выгружать модель перед быстрым возвратом трафика.
- Парк ограничен 20 GPU, а низкоприоритетный трафик сбрасывается выше 2 700 RPS; p99 и стоимость миллиона запросов сравниваются с постоянной мощностью.
Зачем это спрашивают: Сильный ответ учитывает время запуска, опережающие сигналы нагрузки, прогретый запас и явную перегрузку.
Я бы развернул полный serving-стек в каждом регионе и оставил чтение модели и признаков внутри выбранного региона.
- Обычно каждый регион обслуживает около 13 300 RPS, но рассчитан на 24 000, чтобы оставшиеся два приняли весь трафик после отключения одного.
- Бюджет 60 мс выделяет 15 мс глобальной маршрутизации и сети, 15 мс признакам, 20 мс инференсу и 10 мс сериализации и хвостовому запасу.
- Глобальный балансировщик удаляет нездоровый регион за 10 секунд, а квартальные тесты подтверждают 40 000 RPS без синхронных межрегиональных вызовов.
Зачем это спрашивают: Интервьюер проверяет расчёт региональной мощности, локальность, время failover и бюджет задержки.
Я бы использовал детерминированные когорты и повышал трафик только после прохождения сервисных и модельных метрик за фиксированное окно.
- Трафик идёт через 1%, 5%, 20% и 50% по 30 минут, а пользователи закрепляются по account ID, чтобы сравнение не смешивало версии.
- Откат срабатывает, если p99 вырос более чем на 10 мс, ошибки превысили baseline на 0,2 процентного пункта или главная ranking-метрика упала более чем на 1%.
- Argo Rollouts двигает неизменяемые digest модели и образа, а MLflow хранит baseline, candidate, пороги и решение как доказательства релиза.
Зачем это спрашивают: Сильный ответ задаёт трафик, окна выборки, измеримые гейты и детерминированный откат.
Я бы асинхронно зеркалировал допустимые запросы и изолировал shadow-мощность от пути production-ответа.
- После production-ответа gateway публикует ссылки на выбранные запросы в Kafka, а отдельный consumer вызывает candidate с отключёнными побочными эффектами.
- Correlation ID связывает baseline и candidate для 3 000 RPS парного анализа, а чувствительные поля удаляются до mirror topic.
- Shadow-воркеры имеют отдельную GPU-квоту и сбрасывают работу при отставании больше пяти минут, потому что полнота replay менее важна, чем production p99.
Зачем это спрашивают: Интервьюер проверяет, остаётся ли shadow-оценка сопоставимой, безопасной для данных и изолированной от serving latency.
Я бы размещал неизменяемые веса рядом с GPU-узлами и не включал readiness до реального прогрева runtime.
- DaemonSet или image pre-puller кеширует digest модели на локальном NVMe, заменяя 90-секундную сетевую передачу измеренной загрузкой с локального диска.
- Triton явно загружает модель и выполняет 20 типичных прогревочных запросов до допуска трафика readiness probe.
- В каждой зоне остаётся минимум один прогретый резервный узел; это стоит простаивающей мощности, но cold download не выполнит цель 25 секунд.
Зачем это спрашивают: Сильный ответ разделяет скачивание, инициализацию runtime, прогрев и стоимость строгой цели готовности.
Для endpoint с 70 мс я бы выбрал RawDeployment, если измеренные очередь Knative и cold start не помещаются в бюджет.
- RawDeployment даёт прямое управление pod, сигналами HPA, disruption budget и прогретыми репликами, что подходит стабильному GPU-трафику.
- Serverless полезен редким CPU-моделям со scale-to-zero, но cold start модели в 20 секунд несовместим с синхронным запросом на 70 мс.
- Оба режима тестируются на одном профиле 1 000 RPS со сравнением proxy overhead, p99, времени масштабирования и стоимости.
Зачем это спрашивают: Вопрос проверяет выбор serving-абстракции по измеренной задержке и форме трафика.
Я бы объявил оба варианта проверенными целями и маршрутизировал по запасу очереди, а не использовал CPU как непроверенный аварийный путь.
- GPU обслуживает стабильный пик, где batching снижает цену; CPU принимает малый трафик, если полный путь сохраняет p99 ниже 100 мс.
- Маршрутизатор отправляет работу только в пулы с возрастом очереди ниже 15 мс и оставляет 20 мс на признаки и сеть.
- До выбора порога сравнивается стоимость миллиона успешных прогнозов при 100, 1 000 и 10 000 RPS с учётом простоя GPU.
Зачем это спрашивают: Интервьюер проверяет, определяют ли маршрутизацию совместимость по задержке и удельная стоимость.
Она верна, только если $18 000 включает всю относимую работу, а знаменатель определён как успешные production-прогнозы.
- В числитель входят GPU, CPU, gateway, storage, сеть, лицензии и телеметрия, а простой и нераспределённые расходы показываются отдельно.
- Неуспешные, повторные, shadow и прогревочные вызовы остаются в числителе, но не в знаменателе успешных прогнозов, и имеют отдельные показатели.
- При разных размерах запросов также нужна стоимость токена или элемента, иначе дешёвое среднее скроет когорту, потребляющую большинство GPU-времени.
Зачем это спрашивают: Сильный ответ делает числитель, знаменатель и влияние размера нагрузки проверяемыми.
Закрытые вопросы
- 21
Нужно обучить transformer 13B с AdamW на 64 GPU A100 80 ГБ. Вы выберете DDP или FSDP?
nlp - 22
Задаче FSDP 70B на 64 spot GPU нужны checkpoint быстрее пяти минут и восстановление на 32 или 64 GPU. Как это реализовать?
- 23
Двадцать задач запрашивают от 8 до 64 GPU в четырёх Kubernetes-кластерах. Как избежать частичных выделений и голодания?
kubernetes - 24
Задача обучения на 64 GPU показывает загрузку 45%. Что измерить до добавления оборудования?
gpu - 25
Как подать данные на 128 H100, которым требуется суммарно 80 ГБ в секунду?
aggregation - 26
Задача на восьми узлах ускоряется только в 4,5 раза относительно одного. Как понять, ограничивает ли её топология NCCL?
- 27
Spot GPU дешевле на 60%, но каждый GPU прерывается с вероятностью 10% в час. Когда они выгодны для обучения?
gpu - 28
Стоит ли использовать elastic training для задачи, где число GPU меняется с 16 до 64 во время запуска?
gpu - 29
Нужно выполнить 2 000 hyperparameter trials, имея только 64 GPU. Как распределить бюджет?
hyperparameters - 30
Три команды делят 128 GPU: одна отправляет много задач на 1 GPU, другой нужен еженедельный запуск на 64 GPU. Как задать квоты?
gpu - 31
Что должна содержать запись запуска, чтобы воспроизвести обучение через шесть месяцев в другом кластере?
- 32
Что именно идентифицирует версию модели в registry, если одни веса запускаются в нескольких serving-образах?
model-servingregistries - 33
Команда хочет продвинуть model version 42 в production. Какие автоматические доказательства потребовать в MLflow?
experiment-tracking - 34
Как проследить production-прогноз до обучающих входов, не храня каждый сырой запрос вечно?
tracing - 35
Зарегистрированная PyTorch-модель работает в CI, но падает на CUDA runtime в production. Какой compatibility contract предотвратил бы это?
- 36
Как гарантировать rollback с model version 43 на 42 менее чем за пять минут?
deployment-strategiesrollback - 37
В registry есть 10 000 версий и 80 ТБ артефактов. Как удалять данные без потери rollback и audit lineage?
rollbackartifactsregistries - 38
Два release pipeline одновременно пытаются переместить alias production. Как предотвратить потерянное обновление?
pipelinesci-cd - 39
Числовой признак получает миллион значений в день. Как обнаруживать значимый drift без тревоги на каждое статистическое отличие?
alertingiacdrift - 40
Как отслеживать категориальный признак с 500 значениями и длинным хвостом редких категорий?
monitoring - 41
Часовой раздел должен пройти проверки качества данных перед попаданием в feature store. Какие тесты и пороги выбрать?
mlopspartitioningtesting - 42
Как обнаруживать train-serve skew для признаков, рассчитываемых через Feast offline и online?
train-serve-skewfeature-store - 43
Метки приходят через 21 день. Как понять, деградирует ли live-модель до и после созревания меток?
- 44
Глобальное распределение прогнозов стабильно, но маленькая страна может дрейфовать. Как поймать это без шумных alert?
alertingiacdistributions - 45
Retraining workflow ждёт данные в warehouse, обучает в Kubernetes и публикует в MLflow. Где использовать Airflow, а где Kubeflow Pipelines?
kubernetesairflowci-cd - 46
Kubeflow pipeline повторяется после перезапуска controller. Как предотвратить двойное обучение и регистрацию модели?
ci-cdkubeflowpipelines - 47
Нужно пересчитать 365 дневных разделов pipeline, пока обычные ежедневные запуски продолжаются. Как это планировать и проверять?
pipelinespartitioningvalidation - 48
Какие CI-гейты должна пройти модель до получения статуса release candidate?
artifacts - 49
Как реализовать model CD от одобренной версии registry до 100% production-трафика?
registries - 50
Новой модели нужно одно дополнительное входное поле. Как проверить совместимость и сохранить rollback быстрее пяти минут?
deployment-strategiesrollback - 51
AUC антифрод-модели падает с 0,84 до 0,76 после созревания меток за 21 день, но serving SLO в норме. Что вы делаете?
slomodel-servingevaluation - 52
Конверсия checkout падает на 8% после релиза ranking-модели, а offline NDCG и latency не изменились. Как решить, нужен ли rollback?
latencyrollback - 53
PSI для дохода достигает 0,35 в одной стране, но глобальная метрика модели стабильна. Как реагировать?
monitoring - 54
Ежедневная проверка train-serve skew показывает 4,2% несовпадений после релиза preprocessing при лимите 0,2%. Как найти границу?
train-serve-skew - 55
Upstream producer меняет суммы транзакций с долларов на центы без смены схемы, и scores модели сдвигаются за 20 минут. Что делать?
transactionsschema - 56
Positive rate бинарного классификатора растёт с 12% до 61% за час, а метки придут только через 30 дней. Что делать?
- 57
ROC AUC кредитной модели прежний, но expected calibration error растёт с 0,02 до 0,09. Как вы поступите?
evaluation - 58
Общий recall не изменился, но recall для когорты из 6% пользователей падает с 72% до 54% после retraining. Какое решение принять?
retrainingcohorts - 59
При 15 000 RPS inference p99 растёт с 70 до 240 мс после platform release, а error rate остаётся низким. Опишите действия.
- 60
Median latency остаётся 32 мс, но p99 растёт с 95 до 310 мс для 2% запросов. Что проверить первым?
latency - 61
Изменение Triton config повышает throughput на 25%, но p99 растёт с 38 до 82 мс при SLO 60 мс. Оставите его?
configserving-toolsthroughput - 62
В vLLM time to first token растёт с 900 мс до 3,4 секунды после concurrency 80, но token throughput остаётся высоким. Как отлаживать?
tokensthroughputconcurrency - 63
Dependency замедляется, клиенты делают три retry, и serving traffic растёт с 20 000 до 55 000 RPS за две минуты. Как стабилизировать систему?
resiliencemodel-servingdependencies - 64
Одна новая модель потребляет 70% общей GPU и выводит четыре другие модели за latency SLO. Что делать?
latencygpudeployment - 65
Scale-up занимает 110 секунд и вызывает 6% timeout во время предсказуемого утреннего пика. Как снизить ущерб на этой неделе?
resilience - 66
Feature lookup p99 растёт с 8 до 90 мс и съедает большую часть бюджета endpoint 120 мс. Как реагировать?
endpoints - 67
Один serving region падает при 40 000 global RPS, а оставшиеся два достигают 92% мощности. Что делать в первые десять минут?
capacitymodel-serving - 68
GPU memory растёт на 400 МБ в час после runtime upgrade, и pod падают по OOM через 18 часов. Как расследовать?
memorygpu - 69
Canary проходит latency и errors, но online quality proxy падает на 4% на этапе 20% трафика. Что делать?
proxydeployment-strategieslatency - 70
Alias production указывает на version 46, но половина pod продолжает обслуживать version 45. Как восстановиться без downtime?
- 71
Ежедневный training pipeline вырос с шести до пятнадцати часов за неделю при том же model code. Как диагностировать?
pipelinesci-cd - 72
Training начинает падать по OOM после роста средней sequence length с 1 200 до 3 800 tokens. Что менять первым?
tokens - 73
Задача на 64 GPU зависает на шаге 18 400 без исключения, а все GPU заняты. Как отлаживать?
gpuerror-handling - 74
GPU utilization падает с 82% до 41% после dataset refresh, а model compute time не меняется. Что проверить?
gpu - 75
Distributed checkpoint теперь занимает 25 минут при цели пять минут. Как сузить причину?
distributed - 76
Spot training job перезапустился шесть раз и теперь на 30% дороже on-demand. Какое решение принять?
- 77
Airflow повторяет submission и создаёт две training jobs по 32 GPU для одного run. Как ограничить и исправить?
airflowgpu - 78
Kubeflow run завершает training, но остаётся Running два часа и не регистрирует модель. Как отлаживать?
kubeflow - 79
Backfill за 365 дней занимает все Spark slots и задерживает daily training SLA на четыре часа. Что делать?
backfill - 80
Pipeline cache возвращает модель на вчерашних данных после исправления сегодняшнего source partition. Как предотвратить повтор?
pipelinescachingpartitioning - 81
Replay запуска шестимесячной давности меняет accuracy с 91,4% до 89,8%. Как найти причину?
- 82
Команда публикует checkpoint по 800 ГБ каждые 30 минут и заполняет общее storage. Как реагировать?
- 83
Месячные GPU-расходы растут со $120 000 до $260 000 без product launch. Как расследовать и ограничить?
gpu - 84
Training fleet в среднем использует GPU на 38%, пока jobs ждут мощность шесть часов. Что тестировать первым?
capacitygpu - 85
Hyperparameter sweep запускает 1 500 trials за ночь и сжигает 9 000 GPU-hours без лучшей модели. Что изменить?
hyperparametersgpu - 86
Одна команда делит работу на сотни мелких jobs, чтобы доминировать в first-come GPU queue. Как исправить policy?
gpudata-structures - 87
Нужно сократить serving cost per million predictions на 30% за шесть недель без ухудшения SLO p99 90 мс. Что пробовать?
slomodel-serving - 88
Cloud bill показывает 420 GPU endpoints, а registry только 310 active deployments. Как безопасно очистить лишнее?
deploymentregistriesendpoints - 89
В 02:00 после certificate rotation 75% model endpoints начинают возвращать 503. Вы on call. Что делать первым?
endpoints - 90
Model registry недоступен 40 минут, но существующие endpoints здоровы. Что on call должен сохранить и отключить?
registriesmodel-registryendpoints - 91
Online feature store полностью недоступен в peak traffic 12 минут. Как вести incident?
mlopsincidentsfeature-store - 92
После regional failover Европа обслуживает model 31, США model 32, а outputs расходятся на 7%. Что делать?
- 93
Retry storm вызывает outage платформы на 47 минут и 18 млн неуспешных прогнозов. Что должен дать postmortem?
incidentsresilience - 94
Коллега предлагает повторять каждый failed inference раз в секунду пять минут. Как вы проведёте review?
resilience - 95
Middle-инженер говорит: «Нужно больше GPU», когда p99 растёт с 80 до 160 мс. Как вы направите расследование?
- 96
Три команды по-разному реализуют одинаковый text preprocessing, вызывая 2% train-serve mismatch. Как установить стандарт?
- 97
Высокодоходная команда просит обойти model CI ради launch через 48 часов. Что вы разрешите?
- 98
Коллега хочет обновить CUDA для 70 production-моделей в одно maintenance window. Как изменить план?
- 99
Managed training vendor недоступен шесть часов перед deadline, а перенос одного run займёт два часа. Делать failover?
procurementestimation - 100
Product owner хочет продвинуть модель сегодня, но reviewer находит падение recall на 6% в критичном срезе. Как решить конфликт?