Machine Learning System Design (Рубрика ML)
Пока я отдыхал на плато Путорана без интернета, то читал книгу "ML System Design" от Валерия Бабушкина и Арсения Кравченко. Она была интересна для меня по двум причинам: мне близка тема классического system design и я интересуюсь machine learning:) Мне близка идея авторов о том, что проектирование систем (ML систем в том числе) - это многоэтапный процесс, где пригодятся навыки из различных областей, которые стоит использовать в рамках системного подхода. Причем для ML этот многоэтапный процесс содержит гораздо больше шагов, чем просто выбор правильной модели/алгоритма.
Если сравнивать обычный и ML дизайн, то есть такие моменты, что их отличают друг от друга 1. Детерминизм vs вероятность Обычные системы мы стараемся проектировать с определенной долей детерменизма, причем для проверки предсказуемости покрываем их тестами. ML системы носят by design вероятностный характер. В обычных системах у нас обычно есть четкий алгоритм, превращающий входные данные в выходные, а всю недетерминированная часть обычно находится на стороне эксплуатации (работа под нагрузкой, надежность и работа с отказами). В ML системах сама модель исполнения недетерминирована, что добавляет сложности оценке качестве ее работы 2. Одно и двух-фазная архитектуры В ML системах обычно есть две сильно отличные фазы работы: training и inference. В обычных приложениях у нас нет фазы тренировки - оно руками инженеров уже обучено выполнять нужную работу (ака работать в режиме inference). 3. Зависимость от данных В традиционной разработке у нас обычно есть структурированные данные, с которыми работают приложения - при дизайне мы проектируем модели данных и моделируем их взаимосвязи, часто это OLTP системы. В ML системах у нас степень контроля над данными сильно меньше - нам приходится городить пайплайны и зачастую при обучении работать с OLAP конструкциями, одновременно на inference работать в формате более близком к традиционным системам, чтобы успевать делать Inference с приемлемым временем отклика
В своей книге авторы уделяют много времени и места обсуждению архитектурных соображений - Конвейеры данных Построение надежных data pipeline становится фундаментальным компонентом архитектуры, поддерживающим поглощение данных, обработку в реальном времени и масштабируемые решения для хранения. - Модульный дизайн Необходимость отделения ML-компонентов от основной логики приложения, что позволяет независимо обновлять модели без нарушения работы основной системы. - Мониторинг и наблюдаемость Традиционные системы логирования должны эволюционировать для включения специфических метрик ML, таких как drift данных и производительность модели.
Отдельно отмечу интересный формат историй у костра (campfire stories), где авторы делятся своими историями из прошлого, рассказывая о решении реальных задач из своего опыта. Это выглядит интересно и похоже на то, когда мы рассказываем байки у костра за кружечкой горячего напитка. В общем, мне книга показалась интересной и полезной - ее полезно почитать как ML инженерам, так и классическим software engineers, которым все больше приходится проектировать Gen AI приложения.
P.S. У авторов есть свои tg каналы, где они пишут про ml и не только
- У Валеры - @cryptovalerii
- У Арсения - @partially_unsupervised
#ML #AI #Engineering