Курс по ML System Design


Осенью 2022 года прочитал курс по дизайну систем машинного обучения (ML System Design).

Курс читался двум потокам:

  • очно 4-му курса бакалавриата НГУ
  • открытый видео-курс на площадке ods.ai

Очные лекции не записывались, но по содержанию были максимально близки к лекциям открытого курса.

Требования к предварительной подготовке:

  1. Основы статистики https://stepik.org/course/76/info или любой курс по статистике ВУЗа.
  2. Python - основы и применение https://stepik.org/course/512/promo или любой курс по программированию ВУЗа, включающий python.
  3. Введение в машинное обучение - серия статей на Habr https://habr.com/ru/company/ods/blog/322626/ или любой курс ВУЗа по машинному обучению.
  4. The Missing Semester of Your CS Education https://missing.csail.mit.edu/ или практический опыт промышленной разработки программного обеспечения на python под Linux.

В лекции открытого курса вошли две лекции Ирины Голощаповой про интеграцию систем машинного обучения в бизнес-процессы большой компании и составление ML System Design документа. В открытый доступ на GitHub был выложен шаблон дизайн документа по проектированию ML-систем.

В рамках курса студенты строили системы машинного обучения. Проекты студентов курировал Артем Карасюк.

Съемку и обработку видео делал Михаил Симков. Коммуникация с университетом легла на плечи Евгении Сотниковой. Татьяна Архипова и Любовь Бабушкина размещали курс на площадке ods.ai. Слайды вычитывали всем миром, но большую часть правок по слайдам и текстовой расшифровке сделала Екатерина Колодезева. Все это стало возможным благодаря поддержке Алексея Окунева (НГУ) и Алексея Натекина (ODS.AI).

О курсе мы рассказывали в телеграм-канале #Reliable ML.

У меня ушло чуть больше 200 часов на создание этого курса. Учитывая количество участников проекта, общие трудозатраты на курс можно оценить снизу как 400 часов. Мы выложили все, что можно, в открытый доступ.

Материалы курса устарели сразу как только мы их опубликовали - такая у нас отрасль. Мы планируем переработать материалы в серию статей на habr, все анонсы будут в канале #Reliable ML

В сентябре 2023 года будет новый запуск курса, с переработанным материалом.

Лекции:

1. Машинное обучение на практике.

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

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

2. Основы проектирования ML-систем.

Дизайн - это работа с ограничениями, и во второй лекции мы разбираем источники этих ограничений, постановку задачи, метрики и бейзлайны.

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

3. Обучающие данные.

Машинное обучение основано на данных, и в этой лекции мы обсудим проблемы разметки и подготовки данных, проблему дисбаланса классов и сэмплирование.

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

4. Подготовка и отбор признаков.

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

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

5. Выбор и обучение ML-модели.

Сердце ML-системы - модель (или несколько моделей) машинного обучения. Нужно начинать с простого, проверять предположения модели и аккуратно сравнивать разные подходы. Обсуждаем ансамбли, распределенное обучение, гадаем по графикам лосс-функции и калибруем вероятности.

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

6. Оценка качества модели.

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

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

7. Развертывание.

Архитектура развертывания модели определяет, где будет работать модель, когда будет производится инференс, как модель получит запрос пользователя и как пользователь получит ответ модели. Предсказания можно делать на лету, по запросу, а можно сделать заранее и отдавать готовые по мере необходимости. Что-то лучше считать все в облаке, а что-то прямо на устройстве клиента. Можно ускорить инференс нейронной сети с помощью ONNX или ENOT.AI, раскидать нейронку на несколько GPU с помощью Accelerate и использовать оптимизированные CUDA-ядра DeepSpeed. Главное - не запутаться.

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

8. Диагностика ошибок и отказов.

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

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

9. Потоковые данные.

Шаблоны обмена данными, асинхронные взаимодействия, издатели, подписчики, Kafra, RabbitMQ, Pub/Sub - вот краткий список того, о чем невозможно рассказать в одной лекции. Но мы попробовали.

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

10. Жизненный цикл модели.

Есть разные модели жизненного цикла ML-систем, но все они сходятся в одном - модель, скорее всего, придется неоднократно переделывать. Новые версии модели нужно будет сравнить со старыми, и решить - какие лучше. Разберем тестирование моделей на живых пользователях, data-centric подход и непрерывное переобучение моделей.

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

11. Эксперименты и версионирование.

Краткое введение в версионирование данных, реестры моделей и обзор типичных проблем воспроизводимости.

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

12. Временные ряды и графы.

Технологии работы с временными рядами: особенности работы с значениями времени, технологии и проблемы хранения данных, шаблоны построения пайплайнов, временной ряд как текст. Работа с графовыми данными - сбор, хранение, анализ, process mining.

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

13. Непредвзятость. Безопасность. Карточки моделей.

Карточки моделей как товарная этикетка для ML-моделей. Безопасность ML-систем, угрозы, атаки, анализ и управление рисками. Обеспечение безопасности как непрерывный процесс на протяжении всего жизненного цикла системы. Введение в этику машинного обучения, псевдозакономерности и неприятные ошибки на подвыборках.

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

14. ML инфраструктура и платформы.

Что такое инфраструктура и сколько ее нужно. Чем процессоры отличаются друг от друга, сколько vCPU в одном ядре и почему одно ядро с гипертредингом считают за два. Сколько стартапы тратят на облака. Чем планировщик отличается от оркестратора, где хранить признаки и нужны ли нам большие сервера для больших данных.

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

15. Интеграция в бизнес-процессы.

Бизнес-процессы и системы, в которых они выполняются. Сложности интеграции, управление изменениями, смежные и обеспечивающие системы, контролируемая деградация и контрольные списки.

Youtube

Слайды, Текстовая расшифровка

Дополнительные материалы:

16. Reliable ML - Интеграция в бизнес-процессы

Что стоит предусмотреть на этапе дизайна ML системы для того, чтобы последующая интеграция разработанного решения в бизнес-процессы произошла наиболее гладко - и главное, в итоге принесла положительную финансовую прибыль компании. Дополнение к лекции 15.

Youtube

Слайды

17. Reliable ML - Интеграция в бизнес-процессы

Курс почти прошли - теперь знаем как дизайнить ML системы. А как физически уместить в голове все этапы и нюансы дизайна конкретной системы и при этом еще и синхронизировать их и с технической командой, и с бизнес-заказчиком?

В голове не уместить - но можно записать в отдельном документе ML System Design Doc. В лекции рассказываем о том, как, когда и зачем работать с таким документом.

Youtube

Слайды, Репозиторий ML System Design Doc