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

В этом руководстве вы сначала создадите простую модель машинного обучения в Google Colab. Затем вы сохраните модель в файл рассола и создадите ее интерфейс с помощью Streamlit. После создания приложения Streamlit вы будете использовать Docker для его развертывания.

Предпосылки

  1. Хорошее понимание Python.
  2. Хорошее знание моделей машинного обучения.

Создание простой модели машинного обучения

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

Набор данных

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

Установка необходимых пакетов

Вам понадобятся следующие пакеты:

  1. Скит-узнай
  2. Панды
  3. Нумпи

Следующая команда используется для установки вышеуказанных пакетов:

pip install sklearn
pip install pandas
pip install numpy

Импорт Panda и Numpy

import pandas as pd
import numpy as np

Импорт из scitlearn

import CountVectorizer from sklearn.feature_extraction.text
import DictVectorizer from sklearn.feature_extraction
df = pd.read_csv('dataset.csv')
df.size
df.dtypes

Проверка пропущенных значений

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

df.isnull().isnull().sum()

Проверка количества мужчин и женщин

Здесь вы ищете общее количество мужчин и женщин в нашем наборе данных:

df[df.sex == 'F'].size
df[df.sex == 'M'].size
df_names = df

Замена данных F и M на 0 и 1

Это делается для того, чтобы обеспечить двоичный вывод либо 0, либо 1, где 0 представляет женщину, а 1 представляет мужчину:

df_names.sex.replace({'F':0,'M':1},inplace=True)
Xfeatures =df_names['name']

Извлечение признаков

cv = CountVectorizer()
X = cv.fit_transform(Xfeatures)

Обработка модели

import train_test_split from sklearn.model_selection

Особенности и этикетки

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

  1. Учебный набор: это будет 75% данных.
  2. Тестовый набор: это будет 25% данных.

Создание модели наивного байесовского классификатора

Вы импортируете алгоритм наивного байесовского классификатора из пакета scikit-learn. Модель будет использоваться для подбора и обучения модели:

import MultinomialNB from sklearn.naive_bayes
clf = MultinomialNB()
clf.fit(X_train,y_train)
clf.score(X_test,y_test)

Делать прогнозы

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

def predict(a):
    test_name = [a]
    vector = cv.transform(test_name).toarray()
    if clf.predict(vector) == 0:
        print("Female")
    else:
        print("Male")

Сохранение модели в файл pickle

Вы сохраните модель классификации пола, используя Joblib. Вы добьетесь этого, преобразовав нашу модель в поток байтов. Он будет сохранен в файле pickle с именем «naivemodel.pkl»:

import joblib from sklearn.externals
naiveBayesModel = open("model/naivemodel.pkl","wb")
joblib.dump(clf,naiveBayesModel)
naiveBayesModel.close()

Введение в Стримлит

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

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

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

Как установить Стримлит

Используйте следующую команду:

pip install streamlit

Давайте создадим приложение Streamlit

  1. Создайте новый файл Python с именем app.py.
  2. Добавьте нашу промаринованную модель в созданную папку с именем «модель».

Структура папок должна выглядеть так.

├── app.py
├── model
   ├── naivebayesgendermodel.pkl

3. Импортируйте необходимые пакеты.

import streamlit as st

from sklearn.externals import joblib
import time
from PIL import Image

4. Отсоедините модель.

Это поможет загрузить нашу модель, чтобы ее можно было использовать для прогнозирования пола. Здесь поток байтов из файла «naivemodel.pkl» преобразуется в иерархию объектов, чтобы его могло использовать приложение Streamlit.

gender_nv_model = open("models/naivemodel.pkl","rb")
gender_clf = joblib.load(gender_nv_model)

5. Построение логики предсказания.

def predict_gender(data):
  vect = gender_cv.transform(data).toarray()
  result = gender_clf.predict(vect)
  return result

6. Стиль приложения

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

def load_css(file_name):
    with open(file_name) as f:
        st.markdown('<style>{}</style>'.format(f.read()), unsafe_allow_html=True)

def load_icon(icon_name):
    st.markdown('<i class="material-icons">{}</i>'.format(icon_name), unsafe_allow_html=True)

7. Добавление изображения

def load_images(file_name):
  img = Image.open(file_name)
  return st.image(img,width=300)

Ваша файловая структура должна быть такой, как показано на рисунке:

├── male.png
├── female.png
├── model
   ├── nainvemodel.pkl

Проектирование пользовательского интерфейса

Вы будете использовать различные инструменты из Streamlit для создания приятного пользовательского интерфейса:

def main():
  """Gender Classifier App
    With Streamlit

  """

  st.title("Gender Classifier")
  html_temp = """
  <div style="background-color:blue;padding:10px">
  <h2 style="color:grey;text-align:center;">Streamlit App </h2>
  </div>

  """
  st.markdown(html_temp,unsafe_allow_html=True)
  load_css('icon.css')
  load_icon('people')

  name = st.text_input("Enter Name","Pleas Type Here")
  if st.button("Predict"):
    result = predict_gender([name])
    if result[0] == 0:
      prediction = 'Female'
      img = 'female.png'
    else:
      result[0] == 1
      prediction = 'Male'
      img = 'male.png'

    st.success('Name: {} was classified as {}'.format(name.title(),prediction))
    load_images(img)

Код объясняется ниже:

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

Затем вы установите следующие стили в нашем приложении:

Background-color: blue
Text color: grey,
Padding: 10px,
App Title: Gender Classifier App

Затем запустите приложение с помощью этой команды:

streamlit run app.py

Пользовательский интерфейс показан ниже.

  1. Предсказание, в котором на выходе мужчина.

2. Предсказание, где выход женский

Докеризация приложения Streamlit

Шаг 1. Создадим файл Docker.

  • В рабочем корневом каталоге создадим файл с именем «Dockerfile» без каких-либо расширений.
  • Структура вашего проекта должна быть такой, как показано на рисунке:
├── Dockerfile
├── male.png
├── female.png
├── model
   ├── nainvemodel.pkl

Шаг 2. Добавьте слои Docker

  • Чтобы добавить слои Docker в созданный Dockerfile:
  1. Во-первых, вы определяете базовый образ для создания нашего образа Docker, как показано ниже:
FROM python:3.7
  • Здесь вы будете использовать официальный образ Python из Docker.

2. Затем создайте рабочий каталог, как показано.

WORKDIR /app

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

COPY requirements.txt ./requirements.txt
  • Копирование из источника в место назначения.

4. Далее устанавливаем все что есть в файле requirments.txt.

RUN pip install -r requiremts.txt

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

EXPOSE 8501
  • Это тот же порт, на котором работало приложение Streamlit.

6. Далее скопируйте приложение Streamlit из текущего каталога в рабочую область:

COPY ./app

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

ENTRYPOINT ["streamlit", "run"]

CMD ["app.py"]

Окончательный Dockerfile показан ниже:

FROM python:3.7
WORKDIR /app
COPY requirements.txt ./requirements.txt
RUN pip install -r requiremts.txt
EXPOSE 8501
COPY ./app
ENTRYPOINT ["streamlit", "run"]

CMD ["app.py"

Шаг 3. Создание образа Docker

Вы создадите образ Docker, используя следующую команду:

docker build -t streamlitapp:latest .

Вы также можете использовать следующую команду, чтобы указать файл.

docker build -t streamlitapp:latest .f Dockerfile

Вывод будет таким, как показано ниже:

Sending building context to the Docker daemon  34.90kb
Step 1/8 : FROM python:3.8
  --->d6568b1g3y4h
Step 2/8 : WORKDIR /app
  --->Using Cache
  --->25cyf5dfpbfd
Step 3/8 : COPY requirements.txt ./requirements.txt
    --->Using Cache
    --->52jdf5dffbfd
Step 4/8 : RUN pip install -r requiremts.txt
    --->Using Cache
    --->81cdf5dffedf
Step 5/8 : EXPOSE 8501
    --->Using Cache
    --->62d29afd9eb
Step 6/8 : COPY ./app
    --->9rraeb07t4d
Step 6/8 : EXPOSE 8501
    --->4b2ap4h557cc
Step 7/8 : ENTRYPOINT ["streamlit", "run"]
    --->2egaeb07tdte
Removing intermediate container 5ta3824edte
 ---> 65dv092efstfu
step 8/8 : CMD ["app.py"]
Successfully built 65dv092efstfu
Successfully tagged streamlitapp:latest

Используйте следующую команду для просмотра всех ваших изображений:

docker image ls

Вывод такой, как показано:

REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
streamlitapp                 latest             65dv092efstfu        2 minutes ago       1.24GB
testapp                      latest             d660b1f1t3e         1 weeks ago          794MB

Шаг 4. Создание контейнера Docker

Вы будете использовать следующую команду:

docker run -p 8501:8501 streamlitapp:latest

Результат:

gv092e0ff6btdte593a7dad8e50ef01f7t3e89fy41816624gdted7fu1h1bid1o

Он также запускает наше потоковое приложение по следующим URL-адресам:

  1. URL-адрес сети: http://172.17.0.2.8501
  2. Внешний URL: https://193.106.63.249:8501

При этом приложение машинного обучения Streamlit теперь развернуто с Docker.

Заключение

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

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

Если вам понравился этот урок, давайте подключимся в LinkedIn.

Первоначально опубликовано на https://www.section.io.