Вопросы на собеседовании: ML-инженер
100 реальных вопросов с образцовыми ответами и пояснениями для уровня Senior.
Смотреть пример резюме: ML-инженер →Тренировка флешкарточками
Интервальное повторение · Hunter Pass
Вопросы
Я бы начал с LightGBM, потому что это табличные данные средней ширины, а latency budget поощряет сильный и дешёвый baseline.
- Используется time-based split, native handling пропусков и categorical encodings, обученные только на training folds; отчёт включает PR-AUC и recall при мощности retention-команды.
- Модель из 1 000 деревьев часто выдаёт score за 1-3 мс на CPU, оставляя место для feature lookup внутри 10 мс.
- Neural model стоит тестировать, только если error analysis показывает обучаемые high-order interactions или embeddings дают прирост PR-AUC, оправдывающий latency и tuning cost.
Зачем это спрашивают: Интервьюер проверяет, сопоставляет ли кандидат класс модели с формой данных, целью оценки и конкретным serving constraint.
Я бы использовал два этапа: дешёво получил несколько сотен candidates, затем rerank с богатым контекстом пользователя и товара.
- Item embeddings вычисляются заранее, а ANN index вроде ScaNN или FAISS получает около 500 candidates за 20 мс.
- Компактная ranking model оценивает эти 500 менее чем за 45 мс, 20 мс остаётся features и 35 мс сети и tail variance.
- Оцениваются retrieval recall@500, ranking NDCG@20, catalog coverage и online click или conversion lift, потому что хороший reranker не вернёт потерянные candidates.
Зачем это спрашивают: Сильный ответ раскладывает качество и задержку рекомендаций на измеримые retrieval и ranking stages.
Я бы начал с MobileNetV3 или EfficientNet-Lite и оптимизировал её на целевом телефоне, а не вслепую уменьшал server model.
- Training идёт на минимальном resolution, сохраняющем нужные классы, а export содержит только operators, поддерживаемые Core ML или TensorFlow Lite.
- INT8 quantization проверяется на representative calibration set с измерением model size, top-1 accuracy, p95 latency, memory и battery use на слабых устройствах.
- Если INT8 теряет больше 1 пункта, применяется quantization-aware training или distillation от крупного teacher до увеличения архитектуры.
Зачем это спрашивают: Интервьюер оценивает, выбираются ли архитектура и compression по реальным ограничениям устройства, качества и размера.
Я бы сравнил TF-IDF linear model и небольшой distilled transformer до выбора полного BERT.
- Linear baseline даёт понятные per-label errors и обрабатывает больше 1 млн tickets в день внутри 15 мс на CPU.
- DistilBERT или MiniLM оправдан, только если macro-F1 редких intent labels растёт заметно, например с 0,71 минимум до 0,76.
- Full BERT плох как default, если требует GPU serving ради неприменимого прироста; я сравню cost per million tickets вместе с F1.
Зачем это спрашивают: Сильный ответ не выбирает transformer по умолчанию и задаёт прирост качества, необходимый для его стоимости.
Я бы использовал global model, потому что общие сезонные и товарные сигналы дают sparse series больше статистической силы.
- Backtest делается rolling origins за последние 12 недель с weighted quantile loss по объёму и cold-start cohort.
- Product ID embeddings, price, promotion, calendar и stock status позволяют одному LightGBM, DeepAR или Temporal Fusion Transformer делить patterns между рядами.
- Seasonal-naive forecasts остаются fallback, а global model отклоняется, если не превосходит их на low-history products и aggregate inventory cost.
Зачем это спрашивают: Интервьюер проверяет, определяют ли масштаб sparse series и business-weighted backtesting выбор global или local models.
Я бы дал быстрой модели отвечать на уверенных примерах, а медленную вызывал только для uncertain cases.
- Fast model калибруется, а два confidence thresholds выбираются на validation data так, чтобы escalated traffic составлял около 20%.
- Ожидаемое model time равно 2 мс плюс 0,20 умножить на 45 мс, то есть 11 мс без routing overhead.
- Оцениваются end-to-end accuracy, escalation по cohorts, p99 latency и cost; distillation может быть проще, если slow path создаёт нестабильные хвосты.
Зачем это спрашивают: Сильный ответ превращает cascade в явный расчёт качества, route rate и latency.
Я бы выпустил ensemble, только если дополнительные 4 пункта recall покрывают стоимость, а модели действительно ошибаются по-разному.
- Измеряются pairwise error correlation и recall при одинаковой мощности false-positive review, а не три headline AUC.
- Parallel и sequential execution проверяются против p99 budget, а также считается стоимость каждого дополнительного предотвращённого fraud case.
- Если ensemble полезен, но дорог, его soft outputs distill в одного student с требованием recall в пределах 1 пункта от 82%.
Зачем это спрашивают: Интервьюер оценивает, оправдывают ли ensemble diversity и marginal business value системную стоимость.
Я бы протестировал shared encoder с task-specific heads, потому что малые tasks могут выиграть от задачи с 10 млн labels.
- Tasks сэмплируются явно, чтобы крупнейший dataset не доминировал каждый update, а loss weights настраиваются по gradient scale и validation behavior.
- Каждая task сравнивается со single-task baseline, особенно на negative transfer для labels с конфликтующим смыслом.
- Отдельные модели сохраняются, если две tasks теряют больше согласованного guardrail 1 F1 point или требуют несовместимых serving cadences.
Зачем это спрашивают: Сильный ответ рассматривает multi-task learning как измеримый transfer с рисками sampling и negative transfer.
Я бы использовал supervised learning там, где labels покрывают нужные failure modes, а anomaly detection для новых или неразмеченных отклонений.
- Time-based test set содержит все подтверждённые failures и representative normal operation, а отчёт показывает recall при фиксированном daily alert budget вместо accuracy.
- Gradient-boosted trees изучают известные failure modes с cost-sensitive loss, а autoencoder или isolation forest предлагает незнакомые cases для review.
- Hybrid route направляет на inspection высокий supervised risk или anomaly score, но thresholds калибруются под capacity команды, например 200 alerts в день.
Зачем это спрашивают: Интервьюер проверяет, определяют ли label coverage и review capacity стратегию моделирования редких failures.
Я бы ранжировал по incremental treatment effect, потому что высокая purchase probability не доказывает, что покупку вызвала скидка.
- На eligible holdout выполняется randomization, а uplift model обучается на treatment, outcome и pre-treatment features без post-offer leakage.
- Оцениваются uplift или Qini curves и incremental profit в top 5% с учётом discount cost, а не ROC-AUC.
- При слабом overlap или малом experiment используется сама randomized policy вместо нестабильной observational estimate, выдаваемой за causal.
Зачем это спрашивают: Сильный ответ отделяет prediction от intervention и связывает оценку с incremental profit.
Effective batch равен 4 096 примерам, поэтому я проверю optimization на таком batch до принятия throughput gain.
- Расчёт: 32 GPU умножить на 64 примера и на 2 accumulated microbatches на optimizer step.
- DDP усредняет gradients между ranks, а loss normalization, clipping и learning-rate schedule двигаются по optimizer step, не microbatch.
- Я протестирую linear learning-rate scaling с warm-up, затем сравню time to target validation score, потому что 32x hardware редко даёт 32x полезную convergence.
Зачем это спрашивают: Интервьюер проверяет конкретную batch arithmetic и её влияние на optimization semantics.
Plain DDP недостаточно, потому что каждый rank держал бы около 208 ГБ mixed-precision parameters, gradients и AdamW state ещё до activations.
- DDP повторяет это состояние на каждой GPU, поэтому один activation checkpointing не поместит его в 80 ГБ.
- PyTorch FSDP FULL_SHARD или ZeRO-3 распределяет parameters, gradients и optimizer state по 64 ranks.
- Я оберну transformer blocks, использую BF16 и сравню all-gather overhead и tokens per GPU-second, а не выберу maximum sharding без измерений.
Зачем это спрашивают: Сильный ответ выводит выбор parallelism из памяти model state и называет добавленную communication cost.
Я бы оставил communication-heavy tensor parallelism внутри каждого NVLink-узла из восьми GPU, а data или pipeline parallelism использовал между узлами.
- 8-way tensor-parallel group не отправляет collectives каждого layer через более медленный inter-node fabric.
- Pipeline stages добавляются, только если один узел не вмещает свою группу layers, с достаточными microbatches для pipeline bubble ниже 10%.
- Candidate layouts сравниваются по peak memory, tokens per second, exposed collective time и validation parity при одинаковом global batch.
Зачем это спрашивают: Интервьюер оценивает, определяют ли hardware topology и частота communication схему parallelism.
Я бы накопил восемь microbatches, потому что 32 умножить на 8 и на 8 равно нужному global batch 2 048.
- Loss каждого microbatch делится на восемь перед backward или accumulated gradients усредняются ровно один раз.
- Gradient clipping, optimizer step, EMA и learning-rate schedule выполняются после восьмого microbatch, а DDP synchronization пропускается для первых семи.
- Я проверю BatchNorm и stochastic-layer behavior, потому что accumulation совпадает по размеру gradient, но не по всем операциям physical batch 2 048.
Зачем это спрашивают: Сильный ответ правильно считает accumulation и сохраняет optimizer и synchronization semantics.
Я бы считал linear scaling стартовой гипотезой и перенастроил warm-up и число optimizer steps по validation quality.
- Рост batch в 16 раз допускает trial learning rate до 16x для SGD, но Adam часто требует меньшего роста и явного stability sweep.
- Epoch-based schedules теперь содержат в 16 раз меньше optimizer steps, поэтому warm-up, decay, EMA и checkpoint intervals задаются в updates или tokens.
- Сравниваются time и GPU-hours до одинаковой validation target, потому что быстрые epochs бесполезны при потере generalization или дополнительных data passes.
Зачем это спрашивают: Интервьюер проверяет, учитывает ли batch scaling поведение optimizer и изменившееся число updates.
Я бы выбрал BF16, потому что exponent range уровня FP32 устраняет большинство loss-scaling failures при сохранении tensor-core throughput.
- Optimizer statistics, отдельные reductions и численно чувствительная normalization остаются в FP32.
- Step time, peak memory, non-finite gradients и validation loss сравниваются минимум за полный schedule, а не на speed sample 100 steps.
- FP16 остаётся разумным, только если dynamic loss scaling устраняет 0,4% failures без skipped updates или quality loss.
Зачем это спрашивают: Сильный ответ связывает numeric format с наблюдаемой stability, hardware support и выборочными FP32 operations.
Я бы уменьшил exposed communication и улучшил overlap до добавления GPU.
- Профилируются gradient bucket readiness и NCCL link throughput, чтобы отличить poor overlap, tiny collectives, topology placement и slow rank.
- Тестируются larger microbatches, gradient accumulation, BF16 collectives и bucket sizes с overlap reduction и backward.
- Изменение принимается только при росте tokens per GPU-second и улучшении time to target quality, с целью collective time ниже 20% step.
Зачем это спрашивают: Интервьюер оценивает, управляется ли all-reduce tuning timeline evidence и полезной scaling efficiency.
Я бы изменил форму и кеширование input path, чтобы storage устойчиво давал минимум 50 ГБ/с с запасом до дальнейшего scale compute.
- Примеры упаковываются в immutable sequential shards по 1-4 ГБ вместо миллионов small files, с достаточным числом shards для независимого sampling ranks.
- Shards заранее читаются на node-local NVMe с parallel decoding, pinned memory и asynchronous host-to-device copy.
- Измеряются remote throughput, cache hit rate, decode time и dataloader wait, который должен быть ниже 10% step time на финальном dataset.
Зачем это спрашивают: Сильный ответ сопоставляет file layout, cache и preprocessing capacity числовой потребности GPU во входе.
Я бы писал sharded checkpoint асинхронно и публиковал его только после надёжной записи всех обязательных shards.
- Model, optimizer, scheduler, scaler, RNG, sampler position и completed global step сохраняются с checksums под одним generation.
- Каждый rank пишет на local NVMe и загружает multipart objects в S3, пока training продолжается из immutable state snapshot.
- Manifest становится видимым после завершения всех shards, а restore тестируется на supported world sizes с проверкой subsequent loss и sample order.
Зачем это спрашивают: Интервьюер проверяет, охватывает ли distributed checkpoint полное состояние, atomic publication, pause budget и tested restore.
Я бы использовал early-stopping search с жёстким GPU-hour budget вместо полного training фиксированного числа trials.
- Начинаются 40-80 random или Bayesian trials по conditional ranges с оценкой на сопоставимых token или step milestones.
- Ray Tune ASHA останавливает слабые trials и продвигает лучшие, а concurrency остаётся ниже насыщения storage и dataloader.
- Около 20% budget резервируется на repeated seeds и final retraining, затем выбор один раз проверяется на untouched test set.
Зачем это спрашивают: Сильный ответ превращает ограниченный compute в надёжный model selection, а не максимальное число trials.
Закрытые вопросы
- 21
Recommender обучается на 2 млрд interactions и 50 млн items. Как сэмплировать negatives без смещения evaluation?
- 22
У recommender embedding table 200 ГБ и 8 GPU по 80 ГБ. Как её разместить и обновлять?
nlp - 23
FP32 vision model занимает 380 МБ, работает 42 мс и даёт top-1 87,6%. Цель меньше 120 МБ и 25 мс при потере до 0,5 пункта. Что пробовать первым?
- 24
INT8 post-training quantization снижает latency с 28 до 16 мс, но F1 редких классов падает с 0,91 до 0,86. Что дальше?
latencymodel-compression - 25
Teacher на 1,2 млрд parameters даёт accuracy 89%, но serving требует модель меньше 150 млн parameters и 20 мс. Как distill?
model-serving - 26
Unstructured pruning удаляет 70% weights, но latency меняется с 24 до 23 мс. Почему и что делать вместо этого?
latencymodel-compression - 27
Одна PyTorch-модель должна обслуживаться на x86 CPU, NVIDIA GPU и иногда ARM. Стандартизировать ONNX Runtime или TensorRT?
serving-runtimeshardwarepytorch - 28
У transformer 24 layers, но latency нужно снизить на 35% с потерей не больше 1 F1 point. Удалять layers или уменьшать hidden width?
nlplatency - 29
Torch compilation улучшает fixed-shape throughput на 30%, но inputs имеют от 32 до 2 048 tokens. Как сохранить gain?
tokensthroughput - 30
Нужна модель в 4 раза меньше и с latency в 2 раза ниже при потере accuracy до 1 пункта. Как сочетать compression methods?
latency - 31
Edge speech model должна использовать меньше 40 МБ RAM, обрабатывать frame 20 мс в real time и работать offline. Как оптимизировать?
optimizationconcurrency - 32
Спроектируйте synchronous inference на 50 000 RPS с p99 60 мс, если feature lookup занимает 12 мс, а model execution 18 мс p99.
designinferencelatency - 33
GPU-модель должна выдерживать 8 000 predictions per second при p99 ниже 40 мс. Как настроить dynamic batching?
latencyhardwarebatch - 34
Embedding endpoint получает 100 000 RPS, а 65% normalized texts повторяются в течение часа. Как его кешировать?
nlpendpointsnormalization - 35
Search system имеет p99 80 мс для retrieval и rerank результатов из 200 млн документов. Как разделить budget?
system-designlatency - 36
Classifier работает 7 мс на CPU replica за $0,20/час и 2 мс на GPU replica за $1,80/час. Traffic 300 RPS. Что выбрать?
replicationhardware - 37
Conversational model может переиспользовать 2 ГБ session state на active user и должна поддерживать 1 000 concurrent sessions. Оставить stateful?
sessionsconcurrency - 38
Нужно обслуживать 200 малых моделей по 500 МБ на 8 GPU с 40 ГБ memory. Как управлять model residency?
memory - 39
Десяти миллионам пользователей нужны daily risk scores, но 2% требуют request-time context менее 100 мс. Использовать один serving mode?
model-serving - 40
Нужны rolling purchase features за 30 дней для 500 млн пользователей по 20 млрд events. Как их считать?
- 41
У categorical feature 30 млн значений, большинство встречается меньше пяти раз. Как кодировать?
- 42
Ranking model нужны click counts за 5 минут, 1 час и 7 дней при 60 000 RPS. Как построить features?
- 43
Нужно переиндексировать embeddings 200 млн документов новой моделью размерности 768, пока search остаётся live. Как version change?
- 44
Fraud feature использует chargebacks, приходящие через 45 дней после transaction. Как предотвратить target leakage?
feature-engineeringtransactionsleakage - 45
Fraud prevalence 0,1%, reviewers могут проверять 2 000 cases в день, а пропущенный fraud стоит в 10 раз дороже false alert. Какие metrics и threshold выбрать?
monitoringalertingthresholding - 46
Новый recommender повышает offline NDCG@20 на 4%, но catalog coverage падает с 38% до 21%. Как его оценить?
decision-makingcoverage - 47
Вы прогнозируете спрос следующей недели по двум годам данных с сильной годовой сезонностью. Как разделить train, validation и test?
validationtest-data - 48
У двух classifiers одинаковый AUROC 0,91, но Brier score 0,08 и 0,16. Какой выбрать для pricing risk?
pricing - 49
A/B test нацелен на рост conversion 2% от baseline 10%. Как спроектировать model experiment?
ab-testingexperimentsdesign - 50
Model A имеет F1 0,84, latency 8 мс и стоит $3 за миллион predictions; Model B имеет F1 0,87, 42 мс и $24. SLO 30 мс. Что выпускать?
slolatency - 51
Recall fraud-модели при 2 000 ежедневных проверках падает с 78% до 61% за три недели. Serving metrics здоровы. Что делать?
model-servingmonitoring - 52
Vision model сохраняет общую accuracy 89%, но на Android 14 accuracy падает с 87% до 63% после app release. Как реагировать?
- 53
Positive prediction rate классификатора растёт с 14% до 58% за два часа, но labels приходят через 30 дней. Как реагировать?
- 54
Parity job находит 3,8% train-serving feature mismatches после preprocessing release при лимите 0,1%. Как отлаживать?
model-serving - 55
Label pipeline меняет определение churn с 30 до 60 неактивных дней, а retrained model получает +5 AUC points. Продвигать её?
evaluationci-cdchurn - 56
У credit model AUROC остаётся 0,90, но expected calibration error растёт с 0,025 до 0,11. Что делать?
calibration - 57
Feature PSI достигает 0,32, но семидневный labeled F1 остаётся в пределах 0,3 пункта baseline. Переобучать?
retraining - 58
Fraud threshold отправляет 3 400 cases команде с capacity 2 000 в день. Ranking quality модели не изменилось. Что менять?
thresholding - 59
Training loss transformer становится NaN на шаге 18 700 после scale с 8 до 64 GPU. Как сузить причину?
nlpscaling - 60
Loss нормально падает 40 000 steps, затем взрывается в 12 раз сразу после learning-rate scheduler transition. Что проверить?
- 61
FP16 run пропускает 0,8% optimizer steps из-за overflow, а BF16 на 3% медленнее. Какой путь выбрать?
optimizationprecision - 62
В DDP run на 32 GPU rank 17 показывает gradient norms в 4 раза выше других до деградации validation. Что проверить?
validationhardware - 63
Training job начинает OOM после роста p95 sequence length с 900 до 3 600 tokens. Что менять первым?
tokens - 64
Модель 7B помещается на forward и backward, но OOM на первом AdamW step. Почему и как исправить?
- 65
GPU memory растёт на 300 МБ после каждого validation pass, и run OOM после шести epochs. Как отлаживать?
memoryhardwarevalidation - 66
Run на 64 GPU зависает на шаге 9 240 без exception, а все GPU заняты. Какова последовательность debugging?
hardwareerror-handling - 67
После перехода на 64 data-loader workers epoch содержит 0,6% duplicate examples и пропускает 0,6%. Как исправить?
- 68
После restore checkpoint loss прыгает с 1,8 до 4,9 и не восстанавливается. Какое state могло потеряться?
- 69
Replay эксперимента прошлого квартала меняет accuracy с 92,1% до 90,4%. Как найти отсутствующий источник reproducibility?
experiments - 70
Hyperparameter search сообщает validation gain 3 points, но выбранная модель теряет 2 points на untouched test set. Какой вывод?
hyperparametersvalidation - 71
При 12 000 RPS inference p99 растёт с 75 до 280 мс после release, а errors остаются ниже 0,1%. Что делать?
inferencelatency - 72
Median inference остаётся 24 мс, но p99 растёт с 90 до 410 мс для 1,5% requests. Что проверить?
inferencelatency - 73
Dynamic batching повышает throughput на 35%, но p99 растёт с 44 до 96 мс при SLO 70 мс. Оставить?
batchslothroughput - 74
После release embedding model cache hit rate остаётся 72%, но search relevance падает на 8%. Что проверить?
nlpcaching - 75
GPU endpoint уходит на CPU, и output probabilities расходятся до 0,07, меняя 6% decisions. Это допустимо?
hardwareendpoints - 76
Модель 14 ГБ загружается 95 секунд и вызывает 5% timeouts в предсказуемый peak. Что изменить на этой неделе?
resilience - 77
Cascade должен отправлять 20% requests большой модели, но production route rate растёт до 47%, а cost удваивается. Что проверить?
- 78
ANN recall@100 падает с 94% до 81% после rebuild vector index, а query latency улучшается на 20%. Что делать?
indexesquerieslatency - 79
Feature lookup p99 растёт с 9 до 85 мс и съедает большую часть endpoint budget 110 мс. Как защитить predictions?
latencyendpoints - 80
Slow dependency вызывает три client retries, и traffic растёт с 18 000 до 46 000 RPS за 90 секунд. Как остановить cascade?
dependencies - 81
A/B test показывает статистически значимый отрицательный revenue lift 3%, хотя offline F1 вырос с 0,81 до 0,85. Что делать?
ab-testingsignificance - 82
Model experiment сообщает lift 7%, но treatment получает 52,8% traffic вместо 50%. Как проверить result?
experimentsvalidation - 83
Recommender повышает clicks первой недели на 9%, но снижает 30-day retention на 2%. Продвигать?
retention - 84
Marketplace A/B test рандомизирует users, но sellers влияют на prices обеих variants, а conversion lift нестабилен. Как redesign?
ab-testing - 85
Default labels созревают через 90 дней, но product хочет weekly model releases. Какие promotion rules задать?
- 86
Deployed model теряет 4 F1 points, retrained candidate возвращает только 2 и стоит в 3 раза дороже serving. Retrain, rollback или оставить?
deploymentrollbackretraining - 87
Training set растёт с 10 до 12 млн rows каждый месяц, но последние три retrain улучшили AUC меньше чем на 0,001 и стоили по $4 000. Переобучать снова?
train-testevaluationzero-to-one - 88
Upstream service меняет distance с километров на метры, но clipping оставляет model inputs в range. Как обнаружить и ограничить?
- 89
Новая модель повышает monthly GPU cost с $40 000 до $95 000 ради quality gain 0,6 пункта. Что рекомендовать?
hardware - 90
INT8 снижает latency с 35 до 18 мс, но recall когорты из 7% падает с 74% до 59%. Выпускать?
cohortslatency - 91
Canary проходит latency и errors, но business-quality proxy падает на 5% на этапе 20% traffic. Что делать?
proxydeployment-strategieslatency - 92
Нужно rollback model 28, но model 27 ожидает два features, удалённые неделю назад. Как избежать downtime?
rollback - 93
В 03:00 pricing model начинает возвращать maximum price для 68% requests, но endpoint health зелёный. Вы on call. Что делать?
pricingendpoints - 94
Модель приняла 12 000 неверных eligibility decisions до rollback. Что должен дать postmortem?
incidentsrollback - 95
Middle-инженер видит NaN loss и предлагает сразу снизить learning rate в 10 раз. Как направить diagnosis?
optimizationmentoring - 96
Коллега сообщает 98% validation accuracy после random split rows повторяющихся users между train и validation. Как поступить?
soft-skillsvalidation - 97
На code review инженер выбирает accuracy для fraud prevalence 0,2% и заявляет performance 99,8%. Какой feedback дать?
feedbackcode-reviewperformance - 98
Product lead хочет launch через 48 часов, но модель не выполняет recall guardrail на 6 пунктов. Что разрешить?
guardrails - 99
Два senior-инженера спорят между neural model с F1 0,86 и 38 мс и boosted tree с F1 0,84 и 6 мс при SLO 20 мс. Как решить?
conflictslo - 100
Три команды сообщают несовместимые metrics одной модели из-за разных splits и label maturity. Какой standard ввести?
monitoring