Современные технологии разработки сервисов анализа данных осень 2026
Общие сведения
- Семестр: 1 (шестой курс)
- Форма контроля: дифференцированный зачет
- Дни и время занятий: понедельник, 9:00-12:00 (две пары подряд)
- Первое занятие: 7 сентября 2026 года
Преподаватель
- Ахтямов Павел
Приглашённые практики
- Недели 9-11 ведёт приглашённый архитектор промышленных систем: ландшафт из сотен систем, работа под пиковой нагрузкой и разбор инцидентов, архитектурные компромиссы
Важная информация
- Ссылка на чат: t.me || +T7rNR2iJblY1NjAy
- Задания сдаются на платформе https://akhcheck.ru, там же ведомость. Оценки не публикуются в вики по закону о персональных данных
- Дедлайны мягкие: за каждые три дня просрочки снимается 20% от баллов задания
О курсе
Модель, которая хорошо работает в ноутбуке, и модель, которая держит нагрузку в продукте, различаются не качеством, а всем остальным: способом упаковки, воспроизводимостью данных, порядком выкатки, поведением под нагрузкой и тем, что происходит в момент отказа. Курс посвящён этому остальному.
Мы берём одну модель и доводим её от кода на машине разработчика до сервиса, который переживает перезапуск, обновление и наплыв запросов. По дороге разбираем инструменты, которыми это делается в промышленности, и на каждом шаге отвечаем на вопрос, что именно ломается без этого инструмента.
Курс посвящён эксплуатации моделей, а не их обучению. Мы не занимаемся распределённым обучением, не разбираем алгоритмы синхронизации градиентов и не соревнуемся в качестве моделей. Курс начинается с уже обученной модели и заканчивается сервисом, которым пользуются люди.
Такое сужение сделано намеренно. Обучению моделей посвящены другие курсы программы, а вот доведению до работающего сервиса не посвящён почти никакой, хотя именно на этом участке теряется большинство проектов.
Формат
Занятия идут парами по понедельникам утром: первая пара разбирает тему, вторая отводится под работу руками.
NewsPulse мы собираем вместе в аудитории, шаг за шагом: он служит образцом, на котором видно целевое состояние каждого слоя.
Собственный проект каждый ведёт сам, и брать его желательно из своей выпускной работы. Курс занимается ровно тем, чего у выпускных работ по машинному обучению обычно нет: модель обучена и показывает метрики, но запустить её у себя не может никто, кроме автора. Пройдя курс на своей теме, мы получаем не учебное задание в стол, а работающую часть выпускной работы, которую можно показать на защите.
Тем, у кого подходящей темы нет, мы предлагаем готовую: CEREBRO, сервис анализа звучащей речи. Модель в нём та же, что и в аудиторном проекте, поэтому внимание уходит на инженерию, а не на возню с предметной областью.
Кому подойдёт
Курс рассчитан на тех, кто уже уверенно пишет на Python с asyncio и Pydantic, работает с Git и SQL и запускал контейнеры. Вводных занятий по этим темам нет, мы начинаем сразу с нагруженного сервиса.
Остальные темы разбираются с нуля в связке с изученными инструментами. Основное время уходит на связку, вокруг которой построен курс: MLOps, Kubernetes и serving моделей.
Требуется готовность каждую неделю приносить растущий проект и разбираться с тем, что сломалось. Курс инженерный, и большая часть понимания приходит в момент, когда сервис не поднялся.
План курса
Курс идёт пятнадцать недель. Каждая неделя состоит из лекции на 80 минут и семинара на 80 минут, семинар всегда про работу руками.
Три недели в середине семестра ведёт приглашённый архитектор промышленных систем. Блок стоит после Triton намеренно: к нему мы уже собрали сервис, развернули его в кластере и увидели разницу между задержкой и пропускной способностью, поэтому разговор про ландшафт и инциденты ложится на собственный опыт, а не на воображение.
Недели 1-5. Фундамент, взаимодействие и MLOps
| № | Лекция | Семинар |
|---|---|---|
| 1 | Высоконагруженные ML-системы: продакшн как 80 процентов работы, задержка против пропускной способности, физические ограничения сети, три паттерна инференса, блокировка цикла событий, контракты, структурное логирование | Проект на poetry, сервис с намеренной ошибкой, первый нагрузочный тест и починка |
| 2 | Продвинутая контейнеризация и конвейер сборки: multi-stage, distroless, образы с CUDA, тестирование внутри конвейера | Уменьшение образа, конвейер в GitLab CI, тесты сервиса |
| 3 | Асинхронные паттерны и высокая нагрузка: очереди сообщений, семантика доставки, отложенный инференс, обратное давление | Сервис, который читает задачи из очереди и пишет результат в другую |
| 4 | Данные и модели: DVC, удалённые хранилища, реестр моделей, рассинхрон признаков между обучением и выводом | Связка DVC с MinIO и MLflow |
| 5 | Оркестрация: Airflow 3, идемпотентность шага, изоляция ML-задач, непрерывное переобучение | DAG регулярного переобучения |
Очереди стоят третьей неделей не случайно. На первом занятии задана рамка из трёх паттернов инференса, и потоковая обработка в ней только названа. Очереди её раскрывают, а без них дальше не собирается ни оркестрация, ни разговор про реальный ландшафт систем.
Недели 6-8. Инфраструктура и инференс
| № | Лекция | Семинар |
|---|---|---|
| 6 | Инференс на сервере: Triton, репозиторий моделей, динамическое батчирование, бэкенды | Запуск Triton, конфигурация модели, сравнение с обычным сервисом |
| 7 | Kubernetes: управляющий слой, поды, контроллеры, сервисы и внешний доступ, конфигурация и секреты | Развёртывание сервиса в локальном кластере, написание манифестов |
| 8 | Kubernetes для ML: запросы и лимиты ресурсов, классы обслуживания, планирование GPU, выделение узлов, Helm | Упаковка сервиса в чарт, разбор падения по памяти |
Kubernetes занимает две недели: одну на устройство самого кластера, вторую на то, что в нём меняется для ML-нагрузки. Связка Kubernetes с serving и MLOps и есть стержень курса.
Недели 9-11. Блок приглашённого архитектора
| № | Лекция | Семинар |
|---|---|---|
| 9 | Анатомия ландшафта из сотен систем, интеграционные шаблоны, работа с унаследованным кодом | Студенты размещают свой сервис в схеме ландшафта и находят зависимости |
| 10 | Пиковая нагрузка, SLA и SLO, плавная деградация, стратегии выкатки | Разбор настоящего инцидента в группах по его фактуре |
| 11 | Компромиссы и нефункциональные требования, как архитектурные решения принимаются вместе с заказчиком | Проектирование архитектуры своего проекта в формате разбора решения |
Недели 12-15. Производительность, языковые модели и финал
| № | Лекция | Семинар |
|---|---|---|
| 12 | Оптимизация инференса: ONNX и TensorRT, квантование, профилирование | Конвертация модели и подключение к Triton, замер роста пропускной способности |
| 13 | Serving больших языковых моделей и поиск с дополнением генерации: KV-кэш, непрерывное батчирование | Развёртывание модели через vLLM, сравнение скорости |
| 14 | Наблюдаемость: метрики системы против метрик модели, дрейф данных, трассировка и OpenTelemetry | Панель с задержкой и утилизацией GPU, сквозной трейс запроса |
| 15 | Итоги курса и тренды | Защита проектов |
Облачная инфраструктура с Terraform в программу не входит. Отказ осознанный: растягивать курс ещё на одну тему в ущерб связке Kubernetes и serving мы не стали.
Формат сдачи курса
Оценка складывается из баллов за домашние задания и за выпускной проект. Задания сдаются запросом на слияние в репозиторий курса, проверка автоматическая на https://akhcheck.ru, разбор ошибок ручной.
Минимальные требования
Для получения зачёта необходимо, чтобы проект удовлетворял всем условиям ниже. Предметная область значения не имеет: требования одинаковы и для темы выпускной работы, и для предложенной нами.
- Сервис поднимается одной командой на чистой машине по написанной инструкции.
- Сборка образа и прогон проверок выполняются автоматическим конвейером, а не руками.
- Данные и веса модели версионированы, состояние эксперимента восстанавливается.
- Сервис переживает перезапуск без потери принятых, но не обработанных запросов.
- Есть набор проверок, который краснеет при поломке, и он запускается конвейером.
Проверка на защите
Защита проходит на живом сервисе. Мы запускаем его по инструкции автора, подаём нагрузку, смотрим на метрики и обсуждаем, где он сломается раньше всего. Отдельно проверяется откат: автор выкатывает заведомо испорченную версию и возвращает рабочую.
Бонусы
Дополнительные баллы даются за то, что выходит за рамки минимальных требований: замеры ускорения вывода с воспроизводимой методикой, автоматическое масштабирование под реальную нагрузку, оповещения, которые срабатывают до того, как отказ заметит пользователь.
Вехи по ходу семестра
Вехи привязаны к темам занятий: каждая проверяется тем, что разбиралось на предыдущей неделе.
| Веха | Неделя | Что показываем | Чем проверяется |
|---|---|---|---|
| Сервис держит нагрузку | 2 | Сервис отвечает под нагрузочным тестом | Прогон нагрузки и замер задержки |
| Сборка автоматическая | 3 | Образ собирается конвейером, тесты проходят | Зелёный pipeline в GitLab CI |
| Обработка вынесена в очередь | 4 | Тяжёлая задача уходит из обработчика запроса | Наплыв запросов без отказов |
| Данные версионированы | 6 | Восстановление состояния эксперимента | Откат к предыдущей версии данных и весов |
| Инференс через Triton | 7 | Модель отдаётся сервером инференса | Сравнение задержки с обычным сервисом |
| Развёрнуто в кластере | 9 | Сервис работает в Kubernetes, упакован в чарт | Обновление без простоя и откат |
| Оптимизация замерена | 13 | Модель конвертирована, прирост измерен | Замер до и после с воспроизводимой методикой |
| Наблюдаемость собрана | 15 | Панель с метриками и оповещения | Разбор отказа по журналам и метрикам |