Как стать ML-инженером: путь от нуля до первого оффера
Не «стань разработчиком за 3 месяца» — реальный путь входа на основе данных по 208 вакансий.
Можно ли стать ML-инженером с нуля
Да. По данным SkillStat, 6% вакансий ML-инженера — уровня junior или стажёр. Это 12 вакансий прямо сейчас.
«С нуля» здесь почти всегда означает «из соседней роли». ML-инженер доводит модель до использования: обучение по конфигу, артефакт, сервис инференса, выкатка, откат, наблюдение за качеством. Приходят из бэкенда — там не хватает ML-базы; приходят из аналитики и Data Science — там не хватает инженерии. Каждый добирает свою недостающую половину.
Вход трудный из-за грейда, а не из-за конкурса. Доминирует senior: на одну junior-вакансию ML-инженера приходится 6.4 senior-вакансии, уровня junior и стажёра — 12 из 208. Причина простая: ошибка стоит дорого не в момент обучения, а после релиза, когда модель тихо деградирует в проде и неделю этого никто не замечает.
Как стать ML-инженером: короткий план
Пять шагов от честно проверенной модели до управляемого релиза.
Что учить ML-инженеру первым
Не всё сразу. Вот очерёдность по частотности в вакансиях — от самого нужного к менее срочному.
Полный список навыков с частотностью, связками и зарплатной премией — навыки ML-инженера →
Roadmap ML-инженера: от нуля до junior
Порядок опирается на частотность навыков по данным вакансий. Первые 4–5 этапов — минимум для первого оффера.
- 01Python и базовые библиотеки 94.2% вакансий
NumPy, Pandas — обработка данных; Jupyter/VS Code, виртуальные окружения.
Подробнее → - 02Классический ML 13.9% вакансий
Scikit-learn: линейные модели, деревья, градиентный бустинг, оценка качества моделей.
Подробнее → - 03Нейросетевые фреймворки 27.4% вакансий
PyTorch или TensorFlow/Keras — архитектуры, обучение, инференс.
Подробнее → - 04LLM и языковые модели 26.9% вакансий
Трансформеры, API OpenAI/YandexGPT/GigaChat, prompt engineering, few-shot learning.
Подробнее → - 05RAG и векторные базы данных 24.5% вакансий
Retrieval-Augmented Generation: эмбеддинги, Qdrant/Chroma/Weaviate, similarity search.
Подробнее → - 06Агентные фреймворки и оркестрация 10.1% вакансий middle+
LangChain, LlamaIndex — AI-пайплайны, tool calling, многоагентные системы.
Подробнее → - 07Деплой и сервинг моделей 12.5% вакансий middle+
FastAPI/gRPC для инференса, Docker, ONNX — оптимизация latency в production.
Подробнее → - 08MLOps и мониторинг 13% вакансий middle+
MLflow, DVC, Airflow — версионирование экспериментов, воспроизводимость, мониторинг дрейфа.
Подробнее →
Junior-вакансии ML-инженера: что реально требуют работодатели
Срез построен на 208 активных вакансий.
Какие проекты сделать для портфолио
Здесь смотрят не на метрику, а на путь модели. Один проект, доведённый от обучения до выкатки и отката, весит больше, чем пять ноутбуков с хорошим результатом.
Как оформить GitHub и резюме
- Pinned: проект с полным путём модели, а не самый точный ноутбук
- README отвечает на три вопроса: как обучить, как поднять, как откатить
- Dockerfile и пример запроса прямо в README — рецензент должен поднять сервис за пять минут
- Отдельный файл конфига обучения с версией данных: видно, что релиз воспроизводим
- В истории коммитов виден релизный цикл, а не единственный коммит с дампом всего проекта
- Описывай не «обучил модель», а «вывел в контур»: как обучается, где живёт, как обновляется
- Называй режим инференса: онлайн за API или batch по расписанию — это уточняют первым делом
- Пиши про откат и мониторинг: это отличает инженера от исследователя с Docker
- Задержку и нагрузку — числами: «p99 под 150 мс на одном экземпляре сервиса»
- Навыки — Python, SQL; только то, что видно в проекте
«Обучал модели на PyTorch, работал с классическим ML, знаком с Docker и Kubernetes»
«Вывел модель скоринга в рабочий контур: FastAPI и Docker, p99 под 120 мс, обучение по конфигу в Airflow, версии и метрики в MLflow. Выкатка через CI/CD с теневым прогоном, откат — одна команда. Дрейф входов ловится алертом. GitHub: [ссылка]»
Самостоятельно, курсы или вуз — какой путь выбрать
Курсы для ML-инженера
Сопоставили программы с реальным стеком из 208 вакансий — оценка соответствия рассчитана автоматически, это не реклама.
Когда начинать искать первую работу
Есть проект, где модель обучается по конфигу, отдаётся за API или batch-задачей, собирается в образ и выкатывается с описанным откатом, — откликайся. Второй признак: можешь за пять минут рассказать, что сломается, если завтра распределение входных данных сдвинется.
- → hh.ru — ищи по задаче, а не по названию: часть вакансий роли висит как «разработчик» в командах данных
- → Внутренний переход — самый частый вход: возьми задачи вокруг вывода моделей в своей же компании
- → Habr Career — разделы машинного обучения и данных
- → Стажировки в компаниях с моделями в проде: Яндекс, VK, Т-Банк, Ozon, Сбер
- → Telegram-каналы вакансий по машинному обучению и данным
- → Читай стек как маршрут: если рядом с Python стоят Docker, Kubernetes и CI/CD — ждут инженера, а не исследователя
- → «LLM и RAG» в описании — уточни на созвоне, есть ли замеры качества или это прототип без оценки
- → «Опыт вывода моделей в прод» — ключевое требование роли; почти всё остальное обсуждаемо
- → При 6.4 senior-вакансии на одного junior заголовок «middle» часто означает senior-задачи: читай зону ответственности
- → Если про мониторинг и откат в вакансии ни слова — скорее всего, контур придётся строить тебе с нуля
Что спрашивают на собеседовании
Путь модели в прод
- ·Что происходит между обученной моделью и первым ответом пользователю
- ·Онлайн или batch — как выбираешь режим
- ·Что лежит в артефакте, кроме весов
- ·Как откатиться на предыдущую версию
Модель за API: покажи путь от конфига обучения до ответа
Сервисный слой
- ·Валидация входа и что вернуть на кривой запрос
- ·Таймаут, батчинг запросов, холодный старт тяжёлой модели
- ·Как замерял задержку и что показывает p99
- ·Логи инференса: что писать, чтобы потом разобраться
FastAPI-сервис: схема, ошибки, health check
Воспроизводимость
- ·Как повторить обучение полугодовой давности
- ·Зачем нужен реестр моделей, если есть Git
- ·Версия данных: как фиксируешь
- ·Что сравниваешь между двумя версиями перед релизом
Повторяемое обучение: MLflow и конфиг
Дрейф и деградация
- ·Чем дрейф входных данных отличается от падения качества
- ·Что мониторишь, если правильный ответ приходит через месяц
- ·Когда переобучать, а когда откатывать
- ·Модель работала полгода и сломалась — с чего начнёшь
Проект с алертом на дрейф входов
Расхождение обучения и инференса
- ·Откуда берётся train/serving skew
- ·Где живёт подготовка признаков и почему это важно
- ·Как проверить, что признаки считаются одинаково в обучении и в сервисе
- ·Что делать, если признак доступен в обучении и недоступен онлайн
Любой проект: покажи, как переиспользуешь код подготовки признаков
ML-база
- ·Зачем нужен baseline, если модель уже работает
- ·Что такое leakage и как его проверить
- ·Метрика упала в проде, а на тесте была хорошей — почему
- ·Когда достаточно правила вместо модели
Кейс, где ты отказался от модели в пользу правила
Сколько времени нужно, чтобы стать ML-инженером
Быстрее всех входят не новички. У бэкендера половина роли уже есть — сервис, образ, релиз, логи. У Data Scientist другая половина — данные, метрика, валидация. Им нужно 9–12 месяцев на вторую. С нуля обе строятся последовательно, отсюда и разрыв в сроках.
Календарь тянет не теория, а обратная связь: пока модель не деградировала у тебя на глазах, шаг про мониторинг остаётся списком слов. Один долгоживущий проект с настоящими данными учит быстрее трёх учебных.
Senior-доминанта означает, что первый оффер часто приходит не с рынка, а изнутри компании — через задачи вокруг моделей в своей команде.
Ошибки новичков
Кладут ноутбук в прод как есть
Почему мешает: Ячейки не воспроизводятся, порядок важен, окружение неизвестно — релиз нельзя ни повторить, ни откатить
Как исправить: Обучение — скрипт с конфигом, артефакт сохраняется отдельно, окружение фиксируется в образе
Подготовка признаков живёт только в обучении
Почему мешает: Классический train/serving skew: онлайн признаки считаются иначе, и качество падает тихо
Как исправить: Один код подготовки признаков на обучение и на сервис; сверь результат на контрольном наборе
Нет версии данных и артефакта
Почему мешает: Модель обучили, метрику показали, повторить не могут: непонятно, что именно ушло в релиз
Как исправить: Реестр моделей: MLflow — в части вакансий ML-инженера. Фиксируй данные, конфиг, метрики и артефакт вместе
План отката пишут после инцидента
Почему мешает: Пока откат не описан заранее, любая деградация превращается в ночной ручной деплой
Как исправить: Откат описывается до релиза: какая версия предыдущая, где её артефакт, кто и как переключает
Мониторят доступность, а не качество
Почему мешает: Сервис отвечает, задержка в норме, а модель месяц предсказывает мимо: дрейф не виден метриками инфраструктуры
Как исправить: Отдельные сигналы на распределение входов, долю ошибок и качество; алерт на дрейф, а не только на падение сервиса
Учат Kubernetes раньше ML-базы
Почему мешает: Kubernetes — в 12.5% вакансий ML-инженера, но выкатывать нечего, если модель не проверена честно
Как исправить: Сначала baseline, метрика, валидация и leakage; кластер — после первого сервиса в Docker
Считают роль «Data Scientist с Docker»
Почему мешает: Тогда мимо проходят таймауты, батчинг, холодный старт, размер модели, стоимость запроса и контракт API
Как исправить: Сервисный слой разбирается отдельно: FastAPI (12.5%), схема ответа, ошибки, логи, нагрузка
Тащат LLM без замеров
Почему мешает: LLM — в 26.9% вакансий ML-инженера, а спрашивают про качество ответа, задержку, стоимость и поведение при отказе провайдера
Как исправить: Собери набор эталонных запросов, померяй качество и задержку, опиши запасной сценарий
Как SkillStat считает данные
Источник: 208 вакансий в московском сегменте. Навыки и грейды извлекаются автоматически из текста каждой вакансии.
Грейды: определяются по требованиям вакансии — уровню опыта, упоминанию «junior», «intern», «стажёр». Это рыночная оценка объявления.
Сложность входа: рассчитывается по доле junior-вакансий и медиане навыков на junior-уровне. Это индикатор, а не гарантия.
Обновление: данные пересчитываются регулярно. Текущий срез — 12 августа 2026.