Рубрики
Без рубрики

Mlops: Развертывание моделей машинного обучения с Docker и Google Cloud Platform (часть 1)

Введение MLOPS Введение Фаза Дизайн Фазы Требования Инженерный Инженер МЛ ИСПОЛЬЗОВАНИЕ И … Tagged с DevOps, Docker, Python, Flask.

  • Введение
    • MLOPS ВВЕДЕНИЕ
    • Фаза дизайна
      • Требования Инжиниринг
      • ML варианты использования и приоритет
      • Проверка доступности данных
    • Фаза разработки модели
      • Data Engineering
      • ML Model Engineering
      • Модель тестирования и валидация
    • Фаза операций
      • ML Модель развертывания
      • CI/CD Pipeline
      • Мониторинг и запуск
    • Статьи фокусируются
    • Постановка задачи
    • Сбор данных/разработка данных
    • Построение модели
    • Оценка модели
    • Вывод

Введение

Машинное обучение – это процесс учебных машин, чтобы стать интеллектуальными и решать задачи с минимальным надзором. Вы можете быть поражены тем, как YouTube разумно рекомендует вам видео или как Spotify волшебным образом предлагает вам новые песни. Что способствует интеллектуальной рекомендации или волшебным образом предложенным песням, это просто машинное обучение. Люди научились ходить, наблюдая, как другие ходили, и пытались воспроизвести процесс. Точно так же машины учатся выполнять задачи, итеративно следуя за шаблонами в данном наборе данных, а затем формируя математическую функцию. Ученые по данным могут использовать математическую функцию для прогнозирования новых наборов данных. Как показано на изображении ниже, обучающие наборы данных подаются в модель машинного обучения. Модель изучает шаблоны и разрабатывает математическую функцию (H). Затем математическая функция применяется к новому набору данных для прогнозирования. Вы можете прочитать это Статья Чтобы лучше понять машинное обучение.

### MLOPS ВВЕДЕНИЕ Модель рекомендаций YouTube была построена, а затем развернута на YouTube для пользователей. Представьте, что Google создал модель рекомендаций, не развернув ее на YouTube? Это было бы неловко, и сегодня мы не сможем насладиться рекомендациями на YouTube. К сожалению, большинству ученых данных удобно создавать модели, не развертывая их для производства для пользователей. Операции машинного обучения (MLOPS) – это просто процесс доставки моделей вашего машинного обучения в производство (это просто базовое определение). Согласно Википедии Млопс

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

Как показано на изображении ниже, MLOPS – это итеративный метод, который включает в себя:

  • Фаза дизайна
  • Фаза разработки модели
  • Фаза операций

Рис.2 Фазы MLOPS источник

Фаза дизайна

Под фазом дизайна у нас есть другие субфазы, которые:

  1. Требование Инжиниринг
  2. ML-образные сведения и приоритизация
  3. Проверка доступности данных
Требования Инжиниринг

Согласно Javatpoint

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

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

Рис.3 Процесс разработки требований источник

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

ML варианты использования и приоритет

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

Проверка доступности данных

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

Фаза разработки модели

Фаза разработки модели охватывает эти субфазы;

  • Data Engineering
  • ML Model Engineering
  • Модель тестирования и валидация
Data Engineering

Фаза разработки данных посвящена сбору соответствующих наборов данных, которые будут использоваться для обучения модели. Проверка данных также проводится здесь; Это гарантирует, что данные являются действительными и чистыми. Если вы передаете плохие данные в сложную модель, вы получите плохой результат. Вы можете прочитать это Статья Чтобы узнать больше о разработке данных

ML Model Engineering

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

Модель тестирования и валидация

После того, как вы обучили свою модель, необходимо проверить и оценить производительность модели. Вы не захотите развернуть модель, которая ужасно работает на невидимых данных. Фаза тестирования модели и валидации посвящена тестированию и оценке модели на невидимых данных. В то время как модель может лучше работать в учебном наборе данных, вы хотите убедиться, что модель также хорошо работает в невидимом наборе данных (тест). Различные показатели могут быть использованы для оценки вашей модели; Если вы работаете над задачей регрессии, вы можете использовать среднюю квадратную ошибку, среднюю абсолютную ошибку, e.t.c, работая над задачами классификации, вы можете использовать точность, оценку F1, отзыв, точность E.T.C.

Фаза операций

Развертывание модели ML, конвейеры CI/CD и мониторинг и запуск на этапе работы у нас есть эти субфазы;

  • ML Модель развертывания
  • CI/CD трубопроводы
  • Мониторинг и запуск
ML Модель развертывания

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

CI/CD Pipeline

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

Мониторинг и запуск

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

Если производительность модели падает ниже определенного порога, то модель необходимо переобраться и перераспределить; Модель переподготовки выполняется путем запуска трубопровода CI/CD.

Статьи фокусируются

В центре внимания статей этой серии – создание модели машинного обучения и развертывание модели с Docker и Google Cloud Platform.

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

Постановка задачи

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

N.B Moowale – это слово йоруба, означающее, что я ищу дом [покупать].

Сбор данных/разработка данных

Теперь, когда у вас есть четко определенное заявление о проблеме, следующий этап-собрать данные, используемые для обучения модели. Вы можете получить наборы данных из публичных хранилищ наборов данных или поговорить с инженером данных, чтобы доставить вам необходимый набор данных. Существующий набор данных может использоваться для обучения модели; Набор данных прогнозирования цен на дом на Kaggle будет использоваться для обучения модели. Вы можете получить доступ к набору данных с этим Ссылка ; Набор данных Train.csv будет использоваться для обучения модели.

Построение модели

Пришло время создать нашу модель, но нам нужно будет изучить набор данных (анализ исследовательских данных). Чтобы следовать, вам потребуется интегрированная среда разработки, такую как Notebook/Lab (которую большинство ученых -ученых используют). Вы можете узнать больше о ноутбуках Jupyter с этим Ссылка Анкет Теперь, когда у вас есть ноутбук Jupyter, вы можете открыть его и следовать. Чтобы исследовать набор данных, мы будем использовать некоторые библиотеки Python, которые мы будем импортировать.

# importing necessary libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

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

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

# reading the dataset with pandas
dataset = pd.read("train.csv")

# Exploring the first five rows
data.head()

Инжир. 4 Изображение первых пяти рядов набора данных (изображение автора)

# printing the number of columns
print(f"There are {len(data.columns)} columns in the dataset")

Инжир. 5 Печать количества столбцов в наборе данных (изображение от автора)

В наборе данных есть 81 столбец (или функции); Не все полезны для построения модели. Вам нужно будет полагаться на выбор необходимых столбцов, которые будут использоваться для обучения модели. Ученый данных либо полагается на знания об области, полученные из опыта или консультации с экспертом по домену в интересующей области по выбору ценных столбцов. Для этой задачи я просто выберу столбцы на основе предположений. Столбцы, которые будут выбраны, 'Mssubclass', "lotfrontage ',' yrsold ',' saletype ',' salecondition ',' saleprice

data_new = data[['MSSubClass','LotFrontage','YrSold','SaleType','SaleCondition','SalePrice']]
# checking for missing values
data_new.info()

Инжир. 5 Информация о наборе данных. (Изображение автором)

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

# Filling with a constant number
data_new['LotFrontage'] = data_new['LotFrontage'].fillna(-9999)

# check for missing values again
data_new.info()

Нет больше недостающих значений, следующие этапы – это модель.

Присмотревшись на data_new.info () Результат, вы заметите, что у нас есть два столбца с типом данных объекта. Модели машинного обучения ожидают, что все столбцы будут в численном формате, следовательно, преобразование столбцов в числовые. Метка -модер широко используется для преобразования категориальных столбцов в числовые столбцы; Вы можете прочитать больше о Labelencoder здесь

# using label encoder to encode the categorical columns
from sklearn.preprocessing import LabelEncoder, StandardScaler

# saletype label encoder
lb_st = LabelEncoder()
# salecondition label encoder
lb_sc = LabelEncoder()

lb_st.fit(data_new['SaleType'])
lb_sc.fit(data_new['SaleCondition'])

data_new['SaleType'] = lb_st.transform(data_new['SaleType'])
data_new["SaleCondition"] = lb_sc.transform(data_new['SaleCondition'])

.fit () Метод кодирует каждую категорию по числу, а .transform () Метод преобразует категорию в число (вам необходимо соответствовать, прежде чем вы сможете преобразовать).

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

# Separating the dataset into features(X) and target(y)
X = data_new.drop("SalePrice",axis=1)
y = data_new['SalePrice']

Особенности называются x, а цель называется Y, потому что машинное обучение в основном является математическими функциями, применяемыми к данным. Вспомните из математики, что цель (y) вычисляется путем применения математической функции на ваших функциях (x) (это то, что происходит в машинном обучении или во время обучения модели).

# splitting the dataset into train and test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train,y_test = train_test_split(X,y)

Теперь, когда у нас есть набор данных поезда и тестирования, пришло время создать нашу модель. Существует два важных типа задач машинного обучения, классификация и регрессия. Регрессия касается численных целей, в то время как классификация касается категориальных целей. Целью является SALEPRICE, которая является численной; Следовательно, будет использоваться регрессионная модель. Есть разные регрессионные модели; Линейная регрессия-самая простая для понимания и модели регрессии для начинающих. В этом проекте будет использоваться модель Linearregression, чтобы сделать его простым); Вы можете использовать другие регрессионные модели, такие как randomforestregressor и т. Д.

from sklearn.linear_model import LinearRegression

lr = LinearRegression()

# training the model
lr.fit(X_train,y_train)

Оценка модели

Напомним, что после создания своей модели необходимо оценить производительность модели. Несколько показателей можно использовать для оценки моделей машинного обучения; Для моделей регрессии метрики включают среднюю квадратную ошибку, среднюю абсолютную ошибку, среднюю квадратную ошибку e.t.c. Уровень средней квадратной ошибки будет использоваться для оценки модели.

from sklearn.metrics import mean_squared_error

np.sqrt(mean_squared_error(lr.predict(X_test),y_test))

# this will give approximately 73038

Ошибка средней квадрата корня довольно большая; Инженеры по машинному обучению/ученые, ученые, пытаются уменьшить ошибку, пробуя другие модели и применяя инженерию функций. Я не буду погружаться в это; Целью статьи не является минимизацию ошибки.

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

# joblib is for saving objects for later use
import joblib
joblib.dump(lr,'lr_model')

joblib.dump(lb_sc,'lb_sc')

joblib.dump(lb_st,'lb_st')

joblib.dump () Принимает два параметра по умолчанию: объект, который вы хотите сохранить, и имя, с которым вы хотите сохранить объект.

Теперь, когда мы сохранили нашу модель, мы наконец -то подошли к концу первой статьи в этой серии.

Вывод

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

Оригинал: “https://dev.to/idowuilekura1/mlops-deploying-machine-learning-models-with-docker-and-google-cloud-platform-part-1-37m2”