ПОЛНЫЙ СТЕК 7-ШАГОВ MLOPS FRAMEWORK

Руководство по построению эффективных каналов обучения для достижения максимальных результатов

Урок 2: Тренировочные пайплайны. Платформы машинного обучения. Настройка гиперпараметров.

Этот учебник представляет собой урок 2 из курса из 7 уроков, который шаг за шагом проведет вас через проектирование, реализацию и развертывание системы машинного обучения с помощью >Передовой опыт MLOps. В ходе курса вы создадите готовую к производству модель для прогнозирования уровней энергопотребления на следующие 24 часа для различных типов потребителей из Дании.

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

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

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

Оглавление:

  • Введение в курс
  • Уроки курса
  • Источник данных
  • Урок 2: Тренировочные пайплайны. Платформы машинного обучения. Настройка гиперпараметров.
  • Урок 2: Код
  • Заключение
  • Рекомендации

Введение в курс

По окончании этого курса из 7 уроков вы будете знать, как:

  • разработать архитектуру пакетного обслуживания
  • использовать Hopsworks в качестве хранилища функций
  • разработать конвейер разработки функций, который считывает данные из API
  • построить обучающий конвейер с настройкой гиперпараметров
  • используйте W&B в качестве платформы машинного обучения для отслеживания ваших экспериментов, моделей и метаданных
  • реализовать конвейер пакетного предсказания
  • используйте Poetry для создания собственных пакетов Python
  • разверните свой собственный частный сервер PyPi
  • организуйте все с помощью Airflow
  • использовать прогнозы для кодирования веб-приложения с использованием FastAPI и Streamlit
  • используйте Docker для контейнеризации вашего кода
  • использовать Большие надежды для обеспечения проверки и целостности данных
  • следить за эффективностью прогнозов с течением времени
  • развернуть все в GCP
  • построить конвейер CI/CD с помощью GitHub Actions

Если это звучит много, не волнуйтесь, после того, как вы пройдете этот курс, вы поймете все, что я сказал раньше. Самое главное, вы будете знать, ПОЧЕМУ я использовал все эти инструменты и как они работают вместе как система.

Если вы хотите получить максимальную отдачу от этого курса, я предлагаю вам получить доступ к репозиторию GitHub, содержащему весь код уроков. Этот курс предназначен для быстрого чтения и воспроизведения кода в статьях.

К концу курса вы будете знать, как реализовать приведенную ниже схему. Не волнуйтесь, если что-то не имеет для вас смысла. Я объясню все подробно.

К концу урока 2 вы будете знать, как внедрить и интегрировать конвейер обучения и платформу машинного обучения.

Примечание. Это самый расширенный урок, так как я не мог логически отделить процесс обучения от платформы машинного обучения. Наслаждаться!

Уроки курса:

  1. Пакетное обслуживание. Магазины функций. Особенности проектирования трубопроводов.
  2. Конвейеры обучения. Платформы машинного обучения. Настройка гиперпараметров.
  3. Конвейер пакетного прогнозирования. Упакуйте модули Python с поэзией.
  4. Частный сервер PyPi. Организуйте все с помощью Airflow.
  5. Создайте собственное приложение с помощью FastAPI и Streamlit.
  6. Проверка данных и целостность с использованием GE. Мониторинг производительности модели.
  7. Разверните все в GCP. Создайте конвейер CI/CD с помощью GitHub Actions.

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



Источник данных

Мы использовали бесплатный и открытый API, который предоставляет значения почасового потребления энергии для всех типов потребителей энергии в Дании [1].

Они предоставляют интуитивно понятный интерфейс, в котором вы можете легко запрашивать и визуализировать данные. Вы можете получить доступ к данным здесь [1].

Данные имеют 4 основных атрибута:

  • Час UTC: дата и время в формате UTC, когда наблюдалась точка данных.
  • Ценовая зона. Дания разделена на две ценовые зоны: DK1 и DK2, разделенные Большим поясом. DK1 находится к западу от Большого пояса, а DK2 — к востоку от Большого пояса.
  • Тип потребителя. Тип потребителя — промышленный код DE35, принадлежащий и поддерживаемый Danish Energy.
  • Общее потребление: общее потребление электроэнергии в кВтч.

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

Точки данных имеют почасовое разрешение. Например: «2023–04–15 21:00 по Гринвичу», «2023–04–15 20:00 по Гринвичу», «2023–04–15 19:00 по Гринвичу» и т. д.

Мы будем моделировать данные как несколько временных рядов. Каждый уникальный кортеж ценовой области и типа потребителя представляет свой уникальный временной ряд.

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

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

Урок 2: Обучение конвейеров. Платформы машинного обучения. Настройка гиперпараметров.

Цель урока 2

Этот урок научит вас создавать конвейер обучения и использовать платформу машинного обучения, как показано на схеме ниже 👇

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

Кроме того, мы покажем вам, как построить модель прогнозирования с использованием LightGBM и Sktime, которая будет прогнозировать уровни энергопотребления на следующие 24 часа между несколькими типами потребителей в Дании.

Еще один важный шаг, который мы рассмотрим, — это использование W&B в качестве платформы машинного обучения, которая будет отслеживать ваши эксперименты, регистрировать ваши модели и конфигурации как артефакты и выполнять настройку гиперпараметров, чтобы найти наилучшую конфигурацию для вашей модели.

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

ПРИМЕЧАНИЕ. Этот курс не посвящен прогнозированию временных рядов или настройке гиперпараметров. Это инженерный курс машинного обучения, в котором я хочу показать вам, как несколько частей объединяются в единую систему. Таким образом, я буду говорить прямо о части кода DS, не вдаваясь в подробности.

Теоретические концепции и инструменты

Sktime:Sktime — это пакет Python, предоставляющий множество функций для временных рядов. Он следует тому же интерфейсу, что и Sklearn, отсюда и его название. Используя Sktime, мы можем быстро обернуть LightGBM и выполнить прогнозирование на 24 часа в будущем, перекрестную проверку и многое другое. Официальная документация Sktime [3]

LightGBM.LightGBM – это повышающая древовидная модель. Он построен на основе Gradient Boosting и XGBoost, предлагая улучшения производительности и скорости. Обычной практикой является запуск с XGBoost или LightGBM. Официальная документация LightGBM [4]

Если вы хотите узнать больше о LightGBM, ознакомьтесь с моей статьей, где я за 15 минут объясню все, что вам нужно знать, от деревьев решений до LightGBM.

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

Веса и предвзятости. W&B – популярная бессерверная платформа машинного обучения. Мы выбираем их в качестве нашей платформы машинного обучения по 3 основным причинам:

  1. их инструмент фантастический и очень интуитивно понятный в использовании
  2. они предоставляют щедрую бесплатную версию для личных исследований и проектов
  3. он бессерверен — нет проблем с развертыванием и обслуживанием ваших инструментов

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

Урок 2: Код

Вы можете получить доступ к репозиторию GitHub здесь.

Примечание. Все инструкции по установке находятся в файлах README репозитория. Здесь мы сразу перейдем к коду.

Весь код урока 2 находится в папке training-pipeline.

Файлы в папке training-pipeline имеют следующую структуру:

Весь код находится в папке training_pipeline (обратите внимание на _ вместо -).

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

.env.default является примером всех переменных, которые необходимо настроить. Также полезно хранить значения по умолчанию для атрибутов, которые не являются конфиденциальными (например, имя проекта).

Подготовить учетные данные

Прежде всего, нам нужно создать файл .env, куда мы добавим все наши учетные данные. Я уже показывал вам в Уроке 1, как настроить файл .env. Кроме того, в Уроке 1 я объяснил, как переменные из файла .env загружаются из вашего каталога ML_PIPELINE_ROOT_DIR в словарь SETTINGSPython для использоваться во всем коде.

Таким образом, если вы хотите повторить то, что я сделал, я настоятельно рекомендую ознакомиться с Уроком 1.

Если вам нужно только легкое чтение, вы можете полностью пропустить шаг «Подготовить учетные данные».

В Уроке 2 мы будем использовать два сервиса:

  1. Хопворк
  2. Веса и уклоны

Hopsworks (бесплатно)

Мы уже показывали вам в Уроке 1, как настроить учетные данные для Hopsworks. Пожалуйста, посетите раздел Подготовка учетных данных из Урока 1, где мы подробно показали вам, как настроить КЛЮЧ API для Hopsworks.

Веса и уклоны (бесплатно)

Чтобы уроки были компактными, мы предполагаем, что вы уже прочитали и применили шаги по подготовке учетных данных для Hopsworks из Урока 1.

Хорошей новостью является то, что 90 % шагов аналогичны шагам по настройке Hopsworks, за исключением того, как вы можете получить свой ключ API от W&B.

Сначала создайте учетную запись на W&B, команду/организацию под названием teaching-mlops и проект под названием energy_consumption.

Затем посмотрите на изображение ниже, чтобы узнать, как получить собственный КЛЮЧ W&B API 👇

Получив ключ API W&B, перейдите в файл .env и замените WANDB_API_KEY своим значением.

Если вы назвали свою сущность и проект так, как мы вам предложили, то все готово. В противном случае вам также необходимо соответствующим образом изменить значения WANDB_ENTITY и WANDB_PROJECT.

Загрузка данных из хранилища функций

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

Фрагмент кода ниже содержит функцию ввода-вывода load_dataset_from_feature_store() в файле training_pipeline/data.py. Вы будете использовать эту функцию для загрузки данных для данной feature_view_version и training_dataset_version.

ПРИМЕЧАНИЕ. Указав конкретную версию данных, вы всегда будете знать, на каких данных вы обучали и оценивали модель. Таким образом, вы можете постоянно воспроизводить свои результаты.

Используя функцию ниже, мы выполняем следующие шаги:

  1. Мы получаем доступ к магазину функций Hopsworks.
  2. Получаем ссылку на заданную версию представления функций.
  3. Получаем ссылку на заданную версию обучающих данных.
  4. Мы регистрируем в W&B все метаданные, относящиеся к используемому набору данных.
  5. Теперь, когда мы загрузили набор данных, мы запускаем его с помощью функции prepare_data(). Детализируем чуть позже. А пока обратите внимание, что мы разделили данные между поездом и тестом.
  6. Мы регистрируем в W&B все метаданные, связанные с разделением набора данных, а также некоторые основные статистические данные для каждого разделения, такие как размер разделения и функции.

Важное замечание. Используя W&B, вы регистрируете все метаданные, которые описывают, как вы извлекали и готовили данные. Таким образом, вы можете легко понять происхождение данных каждого эксперимента.

С помощью run.use_artifact('‹artifact_name›') вы можете связать между собой различные артефакты. В нашем примере, вызвав run.use_artifact("energy_consumption_denmark_feature_view:latest"), мы связали этот прогон W&B с артефактом, созданным в другом прогоне W&B.

Посмотрите видео ниже, чтобы увидеть, как работает W&B и как выглядят артефакты в интерфейсе W&B 👇

Теперь давайте углубимся в функцию prepare_data().

Я хочу подчеркнуть, что в функции prepare_data() мы не будем выполнять никаких действий по проектированию функций.

Как вы можете видеть ниже, в этой функции вы реструктурируете данные, чтобы они были совместимы с интерфейсом sktime, выбираете цель и разделяете данные.

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

Sktime для иерархических временных рядов предполагает, что данные будут смоделированы с использованием мультииндексов, где индекс даты и времени является последним. Чтобы узнать больше об иерархическом прогнозировании, ознакомьтесь с Официальным руководством Sktime [7].

Кроме того, мы можем безопасно разделить данные, используя функцию temporal_train_test_split() sktime. Тестовое разделение имеет длину заданного fh (=горизонт прогноза).

Одно ключевое наблюдение заключается в том, что выборка теста не случайна, а основана на последнем наблюдении. Например, если у вас есть данные с 1 мая 2023 г. по 7 мая 2023 г. с периодичностью 1 час, то тестовый сплит продолжительностью 24 часа будет содержать все значения за последний день данных, которые 7 мая 2023 года.

Построение модели прогнозирования

Базовая модель

Во-первых, вы создадите наивную базовую модель для использования в качестве эталона. Эта модель предсказывает последнее значение на основе заданной сезонной периодичности.

Например, если seasonal_periodicity = 24 часа, будет возвращено значение из "настоящее - 24 часа".

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

Причудливая модель машинного обучения

Мы построим модель, используя Sktime и LightGBM.

Ознакомьтесь с документацией Sktime [3] и документацией LightGBM [4] здесь.

Если вы увлекаетесь временными рядами, ознакомьтесь с этим Учебным пособием по прогнозированию с помощью Sktime [6]. Если вы хотите понять общую картину системы, вы можете продолжить.

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

С помощью класса WindowSummarizer из Sktime можно быстро вычислить задержки, среднее значение и стандартное отклонение для различных окон.

Например, для задержки мы предоставляем значение по умолчанию list(range(1, 72 + 1)), что переводится как «вычислить задержку за последние 72 часа».

Кроме того, в качестве примера средней задержки у нас есть значение по умолчанию [[1, 24], [1, 48], [1, 72]]. Например, [1, 24] преобразуется в задержку 1 и размер окна 24, что означает, что будет вычислено среднее значение за последние 24 дня. Таким образом, в итоге для [[1, 24], [1, 48], [1, 72]], вы получите среднее значение за последние 24, 46 и 72 дня.

Тот же принцип применяется к значениям стандартного отклонения. Ознакомьтесь с этим документом, чтобы узнать больше [2].

Вы оборачиваете модель LightGBM с помощью функции make_reduction() из Sktime. Поступая так, вы можете легко подключить WindowSummarizer, который вы инициализировали ранее. Кроме того, указав strategy = 'recursive', вы можете легко спрогнозировать несколько значений в будущем, используя рекурсивную парадигму. Например, если вы хотите предсказать 3 часа в будущем, модель сначала спрогнозирует значение для T + 1. Затем она будет использовать в качестве входных данных значение, которое было спрогнозировано в T + 1, чтобы спрогнозировать значение в T + 2, и так далее…

Наконец, мы построим ForecastingPipeline, к которому присоединим два преобразователя:

  1. transformers.AttachAreaConsumerType(): пользовательский преобразователь, который берет площадь и тип потребителя из индекса и добавляет их в качестве экзогенной переменной. Мы покажем вам, как мы это определили.
  2. DateTimeFeatures(): преобразователь из Sktime, который вычисляет различные экзогенные функции, связанные с датой и временем. В нашем случае в качестве дополнительных признаков мы использовали только день недели и час дня.

Обратите внимание, что эти преобразователи аналогичны преобразователям из Sklearn, поскольку Sktime сохранили тот же интерфейс и дизайн. Использование трансформаторов является важным шагом в разработке модульных моделей. Чтобы узнать больше о преобразователях и пайплайнах Sklearn, ознакомьтесь с моей статьей Как быстро спроектировать расширенные пайплайны Sklearn.

Наконец, мы инициализировали гиперпараметры конвейера и модели с заданной конфигурацией.

Преобразователь AttachAreaConsumerType довольно прост для понимания. Мы реализовали его в качестве примера, чтобы показать, что возможно.

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

ВАЖНОЕ ЗАМЕЧАНИЕ — ПРОЕКТНОЕ РЕШЕНИЕ

Как видите, все этапы разработки функций встроены в объект конвейера прогнозирования.

Вы можете спросить: Но почему? Поступая таким образом, разве мы не сохраняем логику разработки функций в конвейере обучения?

Ну да… и нет…

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

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

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

Это один из способов сохранить преобразование + необработанные данные в хранилище признаков, как обсуждалось в Уроке 1.

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

Настройка гиперпараметров

Как использовать развертки W&B

Вы будете использовать W&B для настройки гиперпараметров. Они предоставляют все необходимые методы. Начиная с обычного поиска по сетке до байесовского поиска.

W&B использует проверкидля настройки гиперпараметров. Развертка — это красивое слово для одного эксперимента в нескольких экспериментах на основе вашего пространства поиска гиперпараметров.

Мы будем использовать метрику MAPE (средняя абсолютная ошибка в процентах) для сравнения экспериментов и поиска наилучшей конфигурации гиперпараметров. Мы выбрали MAPE, а не MAE или RMSE, потому что значения нормализованы между [0, 1], что упрощает анализ.

Посмотрите видео ниже, чтобы увидеть, как выглядит доска для свипов в W&B 👇

Теперь, когда мы поняли нашу цель, давайте посмотрим на код в файле training_pipeline/hyperparamter_tuning.py.

Как видно из приведенной ниже функции, мы загружаем набор данных из хранилища функций для определенной feature_view_version и training_dataset_version.

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

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

Наконец, мы сохраняем метаданные запуска, которые содержат sweep_id поиска.

Теперь давайте посмотрим на функцию run_hyperparameter_optimization(), которая берет обучающие данные, создает новую развертку и запускает агент W&B.

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

Как видите, конфигурация предоставляется W&B на основе заданного пространства поиска гиперпараметров (мы немного объясним это). Кроме того, мы регистрируем конфиг как артефакт, чтобы получить к нему доступ позже.

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

Как вы можете видеть ниже, мы создали словарь Python под названием sweep_configс методом, метрикой для минимизации и параметрами для поиска.

Ознакомьтесь с официальной документацией W&B, чтобы узнать больше о зачистке [5].

Примечание. С помощью нескольких настроек вы можете быстро запустить несколько агентов W&B параллельно в рамках одной проверки. Таким образом, резко ускоряется настройка гиперпараметров. Проверьте их документы, если хотите узнать больше [5].

Как выполнить перекрестную проверку данных временных рядов

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

Но тогда на каком сплите вы должны рассчитывать свои показатели?

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

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

Таким образом, используя те же принципы, что и при разделении данных между обучением и тестированием, мы отбираем 1/3 от начала набора данных, где горизонт прогнозирования (оранжевый сегмент) используется для вычисления метрика проверки. Следующая складка занимает 2/3, а последняя — 3/3 набора данных.

И снова Sktime делает нашу жизнь проще. Используя класс ExpandingWindowSplitter и функцию cv_evaluate(), вы можете быстро обучить и оценить модель, используя указанную стратегию перекрестной проверки — официальные документы здесь [8].

В конце мы реструктурировали results DataFrame, который возвращает функция cv_evaluate(), чтобы он соответствовал нашему интерфейсу.

Отлично, теперь вы завершили этап настройки гиперпараметров с помощью разверток W&B.

В конце этого шага у нас есть sweep_id, к которому прикреплено несколько экспериментов, где у каждого эксперимента есть артефакт конфигурации.

Теперь нам нужно проанализировать эту информацию и создать артефакт best_config.

Загрузите лучшую конфигурацию из поиска настройки гиперпараметров

С помощью сценария training_pipeline/best_config.py мы проанализируем все эксперименты для заданного sweep_id и найдем лучший эксперимент с наименьшим показателем проверки MAPE.

К счастью, W&B делает это автоматически, когда мы вызываем функцию best_run(). После этого вы возобновляете best_run и переименовываете его в best_experiment.

Кроме того, вы загружаете конфигурацию, прикрепленную к лучшей конфигурации, в ее артефакт с именем best_config.

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

Теперь у вас есть артефакт best_config, который точно указывает, какие гиперпараметры следует использовать для обучения окончательной модели.

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

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

В функции from_best_config() из файла training_pipeline/train.py мы выполняем следующие шаги:

  1. Загрузите данные из Hopsworks.
  2. Инициализировать прогон W&B.
  3. Загрузите артефакт best_config.
  4. Постройте базовую модель.
  5. Обучите и оцените базовую модель на тестовом разделении.
  6. Создайте модную модель, используя последнюю лучшую конфигурацию.
  7. Обучите и оцените причудливую модель на тестовом сплите.
  8. Визуализируйте результаты, чтобы увидеть, как они работают визуально.
  9. Переобучите модель на всем наборе данных. Это очень важно для моделей временных рядов, поскольку вы должны переобучить их до настоящего момента, чтобы прогнозировать будущее.
  10. Прогноз будущих значений.
  11. Отображение прогнозируемых значений.
  12. Сохраните лучшую модель как Артефакт в W&B
  13. Сохраните лучшую модель в реестре моделей Hopsworks.

Примечание. Вы можете использовать W&B Artifacts в качестве реестра моделей или напрямую использовать функцию реестра моделей Hopsworks. Мы покажем вам, как сделать это в обоих направлениях.

Обратите внимание, как мы использовали wandb.log() для загрузки в W&B всех интересующих переменных.

Посмотрите это видео, чтобы наглядно увидеть, как мы используем W&B в качестве средства отслеживания экспериментов 👇

Обучите и оцените модель.

Для обучения любой модели Sktime мы реализовали эту общую функцию, которая принимает любую модель, данные и горизонт прогнозирования.

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

Оценивая модель на срезах, вы можете быстро исследовать справедливость и предвзятость.

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

Визуализация результатов

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

Как показано в видео выше, мы визуализировали результаты для каждой комбинации (область, тип_потребителя) в трекере экспериментов W&B.

Загрузить модель в реестр моделей

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

Во время эксперимента мы уже загрузили модель как Артефакт W&B. Если вы планируете иметь зависимости от W&B в своих приложениях, вполне нормально использовать его непосредственно оттуда.

Но мы хотели, чтобы конвейер пакетного прогнозирования зависел только от Hopsworks.

Таким образом, мы использовали функцию реестра моделей Hopswork.

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

Наконец, мы загрузили лучшие веса моделей и загрузили их в реестр моделей Hopsworks, используя метод mr.python.create_model().

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

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

Заключение

Поздравляем! Вы прошли второй урок из курса Full Stack 7-Steps MLOps Framework.

Если вы зашли так далеко, вы знаете, как:

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

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

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

Кроме того, вы можете получить доступ к репозиторию GitHub здесь.

💡 Моя цель — помочь инженерам по машинному обучению повысить свой уровень в разработке и производстве систем машинного обучения. Подпишитесь на меня в LinkedIn и GitHub, чтобы узнать больше!



Рекомендации

[1] Потребление энергии в соответствии с отраслевым кодексом DE35 от API Дании, Denmark Energy Data Service

[2] Документация WindowSummarizer, документация Sktime

[3] Документация Sktime

[4] Документация LightGBM

[5] Документация W&B Sweeps, документация W&B

[6] Учебное пособие по прогнозированию Sktime, документация Sktime.

[7] Учебное пособие по иерархическому, глобальному и панельному прогнозированию Sktime, документация Sktime.

[8] Учебное пособие по разделителям окон Sktime, документация Sktime.