Перейти к содержимому
Учи.Онлайн Выбрать школу
Статья

Инженер машинного обучения: что делает специалист и как войти в профессию

Инженер машинного обучения превращает обученную модель в работающую часть продукта. Он строит обработку данных, настраивает развёртывание и мониторинг, следит за версиями модели, качеством прогнозов, задержкой ответа и стоимостью вычислений. Если данные или поведение пользователей меняются, модель может терять точность, поэтому нужны повторная проверка и возможность отката. В отличие от исследовательской роли Data Scientist, здесь особенно важны надёжность сервисов и интеграция решения в существующую систему.

Автор: Александра СыщенкоАвтор об IT и профессиональном обучении · О редакции
Содержание

Обученная модель — это файл с весами и тетрадка с экспериментами. Польза появляется, когда модель отвечает на запросы за доли секунды, получает те же признаки, на которых училась, переобучается по расписанию, а её ошибки замечают раньше клиентов. За всё это отвечает инженер машинного обучения. Кроме алгоритмов, ему нужны навыки работы с данными, кодом, инфраструктурой и наблюдения за моделью после запуска.

Иллюстрация к статье «Инженер машинного обучения: что делает специалист и как войти в профессию»

Масштаб работы виден по статье Google «Hidden Technical Debt in Machine Learning Systems»: зрелая ML-система состоит максимум из 5 % собственно ML-кода и минимум из 95 % связующего (NeurIPS, 2015). Эти 95 % и есть предметная область ML-инженера.

Учебный пример: модель, которая тихо перестала работать

Ситуация вымышленная.

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

Инженер начинает с признаков, а не с модели. Он сравнивает распределения входных данных за последнюю неделю с обучающими и находит расхождение в поле «способ оплаты»: месяц назад платёжный провайдер добавил новый метод, и в трети заказов туда попадает значение, которого в обучающей выборке не было. Препроцессор молча кодирует незнакомую категорию нулём — той же величиной, что и самый частый способ оплаты. Ошибки не возникает, предсказания возвращаются, просто они больше не несут информации.

Дальше инженер добавляет в пайплайн инференса проверку схемы, при которой неизвестная категория вызывает явную ошибку; настраивает сравнение распределений признаков с эталонной выборкой и оповещение; переобучает модель и выкатывает новую версию на 10 % трафика, сравнивая её с прежней. Результат — не «модель стала точнее», а то, что следующая такая поломка обнаружится за сутки, а не за месяц, и появится способ вернуться к предыдущей версии одной командой.

Чем эта работа отличается от соседних

Границы размыты, и в вакансиях роли называют одинаково. Разница — в том, за какой результат человек отвечает. Data Scientist отвечает за то, чтобы модель решала задачу: формулирует её в терминах данных, строит признаки, выбирает алгоритм, проверяет качество на отложенной выборке. Дата-инженер — за то, чтобы данные приезжали: хранилища, потоки, регламентные загрузки, качество таблиц. Бэкенд-разработчик — за сервис: API, нагрузку, отказоустойчивость. Он выкатит контейнер под трафиком, но не обязан знать, почему точность модели зависит от порядка расчёта агрегатов за последние 30 дней.

ML-инженер отвечает за стык. Он превращает модель в воспроизводимый процесс: код обучения, дающий при повторном запуске тот же результат; сервис инференса с понятным контрактом; хранилище версий; мониторинг; процедуру отката. В небольшой компании все четыре роли совмещает один человек, при нескольких десятках моделей разделение обычно уже есть. В руководстве Google о непрерывной поставке в машинном обучении это описано как уровни зрелости: на нулевом всё делается вручную в тетрадках и модель обновляется пару раз в год, на первом появляется автоматический пайплайн переобучения с валидацией данных и моделей, на втором — CI/CD для самих пайплайнов (Google Cloud). ML-инженера нанимают, когда пора переходить с нулевого уровня на первый.

Два пайплайна и расхождение между ними

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

Признаки в них считаются по-разному: в обучении — пакетно, по большой таблице; в инференсе — поштучно, под ограничение по времени ответа. Отсюда расхождение между обучением и продом (training-serving skew): модель получает не совсем то, на чём училась, и качество падает без единой ошибки в коде. В «Правилах машинного обучения» Google этому посвящено несколько пунктов подряд: правило 32 требует переиспользовать код между обучающим и рабочим конвейерами, правило 29 — сохранять набор признаков в момент ответа модели и обучаться именно на сохранённом, правило 37 — измерять само расхождение (Rules of ML). Отсюда и хранилище признаков (feature store): общий слой, из которого обучение и онлайн-инференс берут одинаково посчитанные величины. Запускают конвейеры оркестраторами вроде Airflow или Kubeflow Pipelines, где каждый шаг графа идёт в своём контейнере.

Если модели вы уже пишете и не хватает инженерной части, смотрите программы, где она и есть основное содержание. Например, курс «ML-инженер с опытом» Яндекс Практикума рассчитан на четыре месяца и построен вокруг вывода моделей в эксплуатацию: Airflow и DVC, эксперименты в MLflow, сервис на FastAPI в Docker, мониторинг через Prometheus и Grafana, шесть проектов. Вход предполагает, что Python, pandas, SQL и классическое машинное обучение уже освоены.

Версионирование: не только модель

Чтобы вернуться к работавшей версии, файла с весами мало: нужны зафиксированные код, данные, параметры и окружение. С кодом помогает git, с данными — DVC: в репозиторий кладут не датасет, а небольшие метафайлы с описанием того, что отслеживается, а сами данные и модели лежат в хранилище вроде S3 (документация DVC).

Эксперименты и артефакты обычно ведут в MLflow. Его реестр хранит версии, происхождение, теги и алиасы; алиас описан в документации как «изменяемая именованная ссылка на конкретную версию зарегистрированной модели», и запись models:/MyModel@champion указывает на актуальную версию даже после переназначения (MLflow Model Registry). Этот механизм и превращает откат из операции с файлами в переназначение ссылки.

В той же статье Google сформулирован принцип CACE — «изменив что угодно, изменишь всё»: сдвиг распределения одного признака меняет важность и веса остальных, поэтому признак нельзя проверить изолированно.

Мониторинг: деградация и дрейф

Обычный сервис падает громко, модель деградирует тихо. Правило 10 из «Правил машинного обучения» так и называется: остерегайтесь молчаливых отказов. Таблица перестала обновляться, источник поменял единицы измерения — сервис отвечает, метрики доступности в порядке, а предсказания теряют смысл. Правило 8 требует заранее определить, с какой скоростью устаревает модель: за день, за неделю, за квартал — от этого зависит частота переобучения.

Следят за двумя вещами. Дрейф данных — изменение распределения входных признаков относительно эталонного периода. Дрейф концепции — изменение самой зависимости между признаками и целевой величиной; он виден лишь тогда, когда пришла разметка.

Здесь скрыта деталь, которая многих удивляет. В Evidently — открытой библиотеке мониторинга — тест на дрейф по умолчанию выбирается не только по типу столбца, но и по размеру эталонной выборки. Если наблюдений не больше тысячи, для числового признака применяется двухвыборочный критерий Колмогорова — Смирнова и дрейфом считается p-value не выше 0,05. Если наблюдений больше тысячи, тот же признак проверяется расстоянием Вассерштейна с порогом 0,1, а категориальный — дивергенцией Дженсена — Шеннона с тем же порогом (документация Evidently). Следствие неприятное: на одних и тех же данных ответ «есть дрейф» или «нет дрейфа» зависит от длины взятого окна. Тот, кто настраивает мониторинг, обязан понимать, какой критерий и с каким порогом сработал, иначе оповещения будут приходить каждый день или не приходить вовсе. Рядом с дрейфом держат и прямые метрики качества: распределение может сдвинуться, а качество остаться прежним.

Нагрузка, стоимость и откаты

После первой выкатки начинается вторая часть работы: сделать так, чтобы модель отвечала быстро и не съедала бюджет. Тяжёлую модель редко отдают в прод такой, какой она обучалась: её экспортируют в формат для исполнения, например в ONNX, у которого есть измеримая граница совместимости — ONNX Runtime поддерживает наборы операторов (opset) начиная с седьмой версии, и модели из более старых инструментов не загрузятся (ONNX Runtime).

Дальше нужен сервер инференса. В NVIDIA Triton на стоимость влияют динамическая пакетная обработка, объединяющая одиночные запросы в пакет, и группы экземпляров — сколько копий модели поднять и на чём. И есть настройка, о которой узнают в неудачный момент, — политика версий: по умолчанию действует Latest с n=1, то есть сервер держит загруженной только самую свежую версию (Triton). Быстрый откат — не поведение по умолчанию, а результат осознанной настройки.

Ещё один урок — про инструменты. TorchServe, несколько лет бывший стандартным ответом на вопрос «как отдать PyTorch-модель», в августе 2025 года переведён в режим ограниченного сопровождения: «проект больше активно не поддерживается», обновления и патчи безопасности не планируются (репозиторий pytorch/serve). Учиться стоит принципам — контракт сервиса, версии, метрики, откат, — а инструменты за пару лет меняются.

Что в этой работе бывает тяжело

Ответственность распределена неудобно: модель обучил один человек, данные готовит другой, а когда предсказания портятся, звонят ML-инженеру — он ближе всех к проду. Дежурства реальны для тех, чьи модели участвуют в денежных сценариях: скоринге, антифроде, ценообразовании. Перезапуском такой инцидент не лечится, расследование занимает часы. Работа при этом во многом невидимая: хороший результат выглядит как отсутствие событий.

Чистого машинного обучения в задачах меньше, чем ожидают: много времени уходит на контейнеры, конфигурации, права доступа и логи. Тем, кому нравится исследовательская часть, ближе роль Data Scientist.

Сколько платят

Публичных сопоставимых данных по этой специализации немного. Самый прозрачный по методике источник — калькулятор «Хабр Карьеры»: цифры считаются по анкетам специалистов за скользящее окно в шесть месяцев и учитывают общий доход, то есть зарплату с премией (методика сервиса).

По специализации «ML-разработчик» на сентябрь 2026 года медиана по всем уровням — 227 500 ₽ в месяц (564 анкеты). По грейдам: Junior — около 121 000 ₽ (115 анкет), Middle — около 225 000 ₽ (232 анкеты), Senior — около 386 000 ₽ (110 анкет) (Хабр Карьера). Регионального среза по специализации сервис не даёт: цифры относятся к России в целом и смещены к крупным городам. Для масштаба — медиана по всему IT за первое полугодие 2026 года, по отчёту «Хабр Карьеры» на 45 226 зарплат, составила 191 000 ₽: 235 000 ₽ в Москве и 160 000 ₽ в регионах (Хабр, июль 2026).

Два предупреждения. Это самооценки работающих специалистов, а не суммы из объявлений о вакансиях, где диапазоны шире и обычно до вычета налога. И выборка в сотню анкет на грейд невелика — одна крупная компания способна сдвинуть медиану. Проверяйте цифры сами: фильтруйте вакансии по региону и уровню опыта, смотрите медиану, а не среднее, различайте «до вычета» и «на руки». Никакой онлайн-курс не гарантирует ни трудоустройства, ни конкретной зарплаты.

С чего начинать

База не обсуждается: уверенный Python, SQL, понимание того, как устроена и оценивается модель, — иначе нечего выводить в прод. Дальше добавляется то, чего обычно не хватает выпускнику курса по Data Science: Linux и командная строка, git не на уровне трёх команд, Docker, основы HTTP и REST, сервис на FastAPI, базовое понимание Kubernetes и метрик в Prometheus.

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

Когда базы ещё нет, разумнее брать длинную программу, которая ведёт от программирования к моделям и только потом к внедрению. Так устроен курс Skillbox «Machine Learning Engineer с нуля» на девять месяцев: блок MLOps и развёртывания идёт после Python, SQL, статистики и классических алгоритмов.

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

Как показать, что вы это умеете

Тетрадка с высокой метрикой на Kaggle показывает работу с моделью, а нанимают за работу вокруг модели. Убедительнее один доведённый до конца проект с публичным репозиторием, где видно контракт сервиса, Dockerfile, воспроизводимый пайплайн обучения, зафиксированные версии данных и модели, тесты и описание того, как измерялась задержка и что происходит при откате. Хорошо читается учебный разбор инцидента: вы намеренно сломали данные, показали, как мониторинг это поймал, и описали, что чинили.

Если делать такой проект в одиночку не хочется, смотрите программы с дипломом и обратной связью наставника — например, годовой курс Skillbox «Machine Learning Engineer + ИИ», где итоговых проектов больше десятка.

Куда двигаться дальше

Из бэкенд-разработки приходят, доучив машинное обучение и статистику; из Data Science — добирая инфраструктурную половину; из дата-инженерии путь короче всего. Первая должность редко называется «ML-инженер»: чаще это Data Scientist в команде, где модели доводят до прода, или бэкендер, которому доверили сервис инференса.

Сравнить программы разных школ по составу практики помогает рейтинг онлайн-школ по машинному обучению на Учи.Онлайн: он охватывает направление целиком, поэтому инженерные программы соседствуют там с аналитическими.

Оценить готовность несложно. Если вы можете обучить модель, но не знаете, как отдать её сервисом, не хватает инженерной половины. Если умеете выкатить сервис, но не понимаете, почему его предсказания через месяц стали хуже, — половины про данные. Профессия начинается там, где обе сходятся у одного человека.