Обзор существующих рамок зрелости для систем машинного обучения

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

Тем не менее, по моему опыту, в индустрии машинного обучения преобладают некачественные системы. Почему? На мой взгляд, отсутствие структурированного руководства является наиболее существенным фактором. Без такого руководства мероприятия по улучшению обычно бывают скудными и несистематическими. Командам машинного обучения часто приходится жертвовать ими ради более осязаемых бизнес-целей. Или они перегружены требованиями полностью зрелой среды, не зная дополнительных шагов для ее достижения.

В этой статье я попытаюсь решить эту проблему и предоставлю обзор трех существующих платформ, которые могут направить вашу команду машинного обучения в направлении создания зрелых и готовых к эксплуатации систем машинного обучения:

  • Уровни зрелости MLOps Google Cloud и Модель зрелости MLOps Azure — общие рамки, ориентированные на внедрение методов MLOps, таких как CI/CD и непрерывное обучение.
  • Оценка теста ML — платформа Google, предназначенная для тестирования и мониторинга. Он предоставляет единую метрику для количественной оценки зрелости системы машинного обучения и невыполненных конкретных действий по ее улучшению.

Зрелость машинного обучения

Когда мы говорим о реальных приложениях машинного обучения, нам нужно думать о системах машинного обучения. Не только модели машинного обучения. В одной из моих предыдущих статей я обозначил разницу между этими понятиями и привел несколько примеров. Первый содержит второй и определяет, как мы его тренируем и используем. Мне нравится определять термин система машинного обучения как все действия вместе с их артефактами, которые приносят пользу клиенту с использованием подхода машинного обучения.

Почему полезно говорить о системах машинного обучения вместо того, чтобы просто сосредоточиться на улучшении качества нашей модели? Потому что создание надежных систем машинного обучения производственного уровня обнажает множество новых проблем, которых нет в небольших игрушечных примерах или исследовательских экспериментах. Системы машинного обучения сложно создавать и поддерживать.

  • Системы машинного обучения хрупки. Мы делаем много неявных предположений, когда строим их. Небольшое изменение в распределении данных или контракте может привести к неправильному поведению всей системы. В отличие от традиционных программных систем, эти ошибки трудно обнаружить.
  • Они накапливают технический долг. Системы машинного обучения имеют много дополнительных источников долга по сравнению с традиционным программным обеспечением. Технический долг трудно подсчитать и расставить приоритеты в работе над ним. Со временем это потребляет все больше и больше эксплуатационных расходов и замедляет любые улучшения.
  • Они требуют сотрудничества разрозненных команд с несогласованными стимулами. Специалисты по данным, инженеры по машинному обучению и инженеры по данным в настройках по умолчанию имеют противоречащие друг другу цели и ключевые показатели эффективности, что создает внутренний конфликт в системе.

Чтобы система машинного обучения была готова к работе, она должна решать эти проблемы. Вот что мы подразумеваем под зрелостью. Зрелость машинного обучения — это свойство системы машинного обучения, а не модели машинного обучения. Это отражает:

  • Насколько быстро ваша команда Data Science способна улучшать модели.
  • Количество ошибок, которые случаются в производстве.
  • Насколько быстро мы можем выявить эти ошибки и исправить их.

Зрелость машинного обучения — это свойство системы машинного обучения, а не модели машинного обучения.

Давайте углубимся в существующие рамки зрелости машинного обучения.

Уровни зрелости Google Cloud MLOps

Эта структура определена в этом документе Центра облачной архитектуры Google. Он делает упор на MLOps.

MLOps — это движение, которое адаптирует практики и культуру DevOps к системам машинного обучения. Он направлен на объединение инженеров данных, инженеров машинного обучения, инженеров-программистов и специалистов по данным путем согласования их стимулов и устранения разрозненности. DevOps добился больших успехов в разработке программного обеспечения. Это помогло разрешить давние конфликты между разными командами — разработчиками, операционным отделом, бизнесом и службой безопасности. Он также показал, что маневренность и надежность не являются врагами, и можно достичь и того, и другого, не жертвуя ни одним из них. С помощью MLOps мы пытаемся воспроизвести основные идеи DevOps в области машинного обучения.

Практики повышения надежности систем машинного обучения

В этой структуре выделяются три основных метода повышения надежности систем машинного обучения:

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

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

Непрерывная интеграция

Непрерывная интеграция (CI) — это практика DevOps, которая выступает за то, чтобы результаты работы каждого члена команды часто объединялись в единый источник достоверности, называемый магистралью в системе контроля версий (VCS). Последним обычно является Git. Часто означает ежедневно. Магистраль всегда должна быть готова к развертыванию в среде разработки, промежуточной или производственной среде. Это означает, что мы должны гарантировать стабильность ствола, поощряя при этом частые замены. Звучит противоречиво. Решением этого конфликта является автоматизация тестирования. Непрерывная интеграция — это внедрение всех видов автоматических тестов и их интеграция в ваш конвейер, что снижает вероятность поломки магистрали.

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

CI часто может быть сложным в проектах ML из-за отсутствия инженерных навыков у некоторых членов команды и одноразового экспериментирования большого фрагмента базы кода Data Science.

Непрерывная доставка

Continuous Delivery — следующий логический шаг после CI. В то время как CI гарантирует, что кодовая база содержит все последние изменения в одной версии, которая работает правильно, непрерывная доставка гарантирует, что ее можно развернуть. Развертываемость означает, что он готов к быстрому развертыванию без ручной работы. В идеале это должно быть всего одно нажатие кнопки. Непрерывная доставка снова делает это возможным за счет автоматизации всех этапов рабочего процесса развертывания — создания пакетов и образов, запуска интеграционных и приемочных тестов, тестов безопасности и развертывания в различных средах.

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

CI/CD позволяет нам экспериментировать и развертывать новые модели машинного обучения быстрее и с меньшими затратами. Это означает, что мы можем выполнять итерации быстрее и получать лучшие результаты за ограниченное время.

Непрерывное обучение

Непрерывное обучение (CT) — это новое свойство, уникальное для систем машинного обучения. Это связано с автоматическим переобучением и обслуживанием моделей. Модели машинного обучения могут регулярно устаревать в реальных производственных сценариях. Примеры ситуаций, когда желательна процедура переобучения модели:

  • производительность модели ухудшилась (и мы можем отследить это в продакшене)
  • пробы вне дистрибутивов накапливаются
  • Дрейф данных/концепций
  • доступны новые обучающие данные, которые могут улучшить нашу текущую производительность модели.

В таких ситуациях командам инженеров DS и ML необходимо обучить модель на обновленном наборе обучающих данных, проверить ее производительность и развернуть новую версию. Это может быть проблематично, если эти действия являются дорогостоящими или привязаны к конкретным членам команды. Непрерывное обучение автоматизирует этот процесс.

Непрерывное обучение — это способность системы машинного обучения обнаруживать необходимость переобучения, переобучать модель, проверять ее и иногда автоматически развертывать с минимальным вмешательством человека или без него.

Это делает систему машинного обучения более адаптивной и, как следствие, более надежной.

CT обычно требует реализации как минимум этих компонентов:

  • Автоматизированный сбор данных: ETL новых производственных данных для обновления наборов данных для обучения и проверки.
  • Автоматизированный конвейер обучения: сквозная процедура обучения модели, которая берет обучающие данные и создает параметры обученной модели.
  • Автоматическая проверка модели: это позволяет системе машинного обучения автоматически определять, подходит ли модель для развертывания.
  • Магазин моделей: хранилище для обученных параметров модели и метаданных для отслеживания их происхождения и производительности. Обеспечивает уникальную идентификацию модели и запрос.
  • Retrain Trigger: триггерный сигнал для запуска процедуры переобучения. Это может быть предупреждение о смещении данных, задание cron или доступность новых данных.

Платформа Google Cloud MLOps Maturity поддерживает реализацию этих трех возможностей в системах машинного обучения: непрерывная интеграция, непрерывная доставка и непрерывное обучение. Уровень их автоматизации отражает зрелость системы машинного обучения.

Структура различает три уровня зрелости:

  • Уровень 0: создание и развертывание моделей машинного обучения не требует автоматизации. Это базовый уровень, на котором создание и развертывание моделей машинного обучения выполняется полностью вручную.
  • Уровень 1: непрерывное обучение. Это следующий уровень зрелости, на котором мы внедряем автоматизированное непрерывное обучение. Это повышает надежность и адаптивность нашей системы машинного обучения и позволяет нам часто переобучать производственные модели на основе новых данных.
  • Уровень 2: непрерывная интеграция, непрерывная доставка и непрерывное обучение. Самый продвинутый уровень зрелости. Для этого мы автоматизируем доставку конвейеров машинного обучения через CI/CD. Это позволяет нам гораздо быстрее экспериментировать с новыми реализациями моделей. Команды по науке о данных и разработке программного обеспечения согласованы. Система машинного обучения очень адаптивна и надежна.

Эти уровни обеспечивают направление и основные вехи для улучшения ваших систем машинного обучения. Но чтобы использовать эту модель, вам нужно обращаться с ней как с общим шаблоном. Его необходимо заполнить и настроить под вашу организацию и систему ML. Вам нужно будет развить систематическую практику из этого. Некоторые инструменты DevOps могут помочь вам в этом. Среди них «Непрерывное совершенствование», «Тойота Ката» и «Карта потока создания ценности».

Давайте рассмотрим следующую модель зрелости, которая очень похожа на уровни зрелости Google Cloud MLOps.

Модель зрелости Azure MLOps

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

Он качественно оценивает людей, процессы и технологии и подчеркивает два аспекта вашей системы машинного обучения:

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

Он различает пять уровней зрелости:

  • Уровень 0: нет MLOps. Команды специалистов по обработке и анализу данных, машинного обучения и разработки программного обеспечения разрознены. Рабочие процессы включают много передач и почти не автоматизируются.
  • Уровень 1: DevOps, без MLOps. Программные компоненты приложения поставляются с автоматизированными конвейерами CI/CD. Модели машинного обучения и конвейеры по-прежнему доставляются вручную с передачей. Уровень сотрудничества между командами низкий.
  • Уровень 2: автоматизированное обучение. Специалисты по данным работают вместе с инженерами машинного обучения, чтобы преобразовать сценарии экспериментов в многоразовые и воспроизводимые обучающие процедуры. Результаты эксперимента отслеживаются.
  • Уровень 3: Автоматическое развертывание моделей. Это уровень, на котором развертывание моделей ML автоматизировано с помощью конвейера CI/CD. Команды Data Science, ML Engineering и Software Engineering скоординированы.
  • Уровень 4: полное автоматизированное переобучение MLOps. Уровень непрерывного обучения.

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

Давайте посмотрим на последнюю модель в этой статье.

Оценка теста ML

Команда Google представила эту структуру в своей статье The ML Test Score: A Rubric for ML Production Readiness and Technical Debt Reduction (E.Breck et al., 2017)». Его цель — научить команды тому, как выявлять, расставлять приоритеты и бороться с техническим долгом в системах машинного обучения. Системы могут быть любого размера и уровня зрелости: от исследовательского проекта студенческой диссертации до высокодоступной масштабируемой производственной системы с малой задержкой.

Основное оружие для борьбы с техническим долгом в программных системах (и, в частности, в системах машинного обучения) — это тестирование и мониторинг. Системы машинного обучения требуют гораздо более широкого использования этих двух практик из-за присущей им более высокой сложности. Картинка из бумаги ниже показывает это.

Но отсутствие системного подхода приводит к двум проблемам. Тесты редко имеют достаточный приоритет для реализации, потому что всегда есть «более важные дела». И когда они это делают, неясно, что тестировать, чтобы получить максимальную пользу.

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

  • Действующий: он должен предоставить конкретный набор рецептов для формирования списка невыполненных командных действий. Структура состоит из конкретных действенных тестов, которые можно преобразовать в тикеты или эпики в бэклоге команды.
  • Поддающийся количественной оценке: он должен предоставлять единую оценочную метрику, чтобы позволить командам расставлять приоритеты между этими действиями друг с другом и над другими задачами. Фреймворк предоставляет алгоритм для расчета такой метрики.

Утверждения системы машинного обучения

ML Test Score состоит из 28 действенных тестов, которые разделены на 4 категории:

  • Тесты для функций и данных
  • Тесты для разработки модели
  • Тесты для инфраструктуры машинного обучения
  • Мониторинг тестов для машинного обучения

Каждый тест действует как утверждение, которое нужно проверить. Его нарушение свидетельствует о возможном сбое в системе ML. Надежные системы машинного обучения должны часто проверять эти утверждения. Я рекомендую вам прочитать оригинальную статью для подробного описания каждого теста.

Система подсчета очков ML

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

  • За каждый из вышеперечисленных тестов половина балла присуждается за выполнение теста
    вручную, с документированием и распространением результатов.
  • Полный балл присуждается, если существует система
    для автоматического повторного запуска этого теста.
  • Суммируйте баллы по каждому из 4 разделов в отдельности.
  • Окончательный балл теста ML рассчитывается путем взятия
    минимума баллов, суммированных по каждому из 4 разделов.

Существует 6 уровней зрелости системы машинного обучения в зависимости от значения тестового балла:

Вы можете оценить свой текущий уровень зрелости на основе этой метрики. Затем вы можете установить целевой KPI для вашей команды MLOPs / ML Engineering на следующий промежуточный период. Фреймворк позволяет определить пробел и спланировать необходимые действия для достижения запланированного KPI.

Допустим, вы определили свой текущий уровень зрелости ML ниже 1 на основе этой метрики. И вы поставили цель улучшить его до 2 к концу текущего квартала. Вы поняли, что Мониторинг тестов для машинного обучения — самая слабая область, которая приводит к низкой производительности теста машинного обучения. Таким образом, у вас есть запас возможных контрольных тестов для реализации, которым вы можете расставить приоритеты в зависимости от конкретной специфики вашего проекта.

У вас есть не только конкретный алгоритм повышения вашей зрелости в области машинного обучения, но и конкретный KPI для защиты таких действий, когда дело доходит до установления приоритетов. И у вас есть четкое сообщение руководству о вашем вкладе и результатах.

Заключение

Вышеупомянутые структуры могут помочь вашей команде инженеров машинного обучения внедрить практику систематического непрерывного совершенствования для повышения зрелости ваших систем машинного обучения.

Вы можете использовать их в качестве руководства для:

  • Определите текущие пробелы в зрелости машинного обучения.
  • Оцените объем работы для новых мероприятий, чтобы закрыть эти пробелы.
  • Установите для них реалистичные критерии успеха.
  • Определите результаты, которые вы передадите в результате такой деятельности.

Подписывайтесь на меня

Если вы находите идеи, которыми я с вами делюсь, интересными, пожалуйста, не стесняйтесь связаться здесь, в Medium, Twitter, Instagram или LinkedIn.