Docker — это платформа виртуализации, предназначенная для создания, запуска и развертывания приложений с помощью контейнеров. Вы будете использовать Docker для развертывания простого приложения машинного обучения, созданного с помощью Streamlit.
В этом руководстве вы сначала создадите простую модель машинного обучения в Google Colab. Затем вы сохраните модель в файл рассола и создадите ее интерфейс с помощью Streamlit. После создания приложения Streamlit вы будете использовать Docker для его развертывания.
Предпосылки
- Хорошее понимание Python.
- Хорошее знание моделей машинного обучения.
Создание простой модели машинного обучения
Начнем с создания простой модели прогнозирования с помощью машинного обучения. Вы создадите модель машинного обучения, чтобы предсказывать пол человека на основе ввода пользователя.
Набор данных
Вы будете использовать набор имен, обычно используемых людьми. Формат используемых данных следующий:
Установка необходимых пакетов
Вам понадобятся следующие пакеты:
Следующая команда используется для установки вышеуказанных пакетов:
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
Особенности и этикетки
После определения функций и меток, которые будут использоваться при обучении модели, мы можем разделить наш набор данных на два:
- Учебный набор: это будет 75% данных.
- Тестовый набор: это будет 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
- Создайте новый файл Python с именем
app.py
. - Добавьте нашу промаринованную модель в созданную папку с именем «модель».
Структура папок должна выглядеть так.
├── 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
Пользовательский интерфейс показан ниже.
- Предсказание, в котором на выходе мужчина.
2. Предсказание, где выход женский
Докеризация приложения Streamlit
Шаг 1. Создадим файл Docker.
- В рабочем корневом каталоге создадим файл с именем «Dockerfile» без каких-либо расширений.
- Структура вашего проекта должна быть такой, как показано на рисунке:
├── Dockerfile ├── male.png ├── female.png ├── model ├── nainvemodel.pkl
Шаг 2. Добавьте слои Docker
- Чтобы добавить слои Docker в созданный Dockerfile:
- Во-первых, вы определяете базовый образ для создания нашего образа 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-адресам:
- URL-адрес сети: http://172.17.0.2.8501
- Внешний URL: https://193.106.63.249:8501
При этом приложение машинного обучения Streamlit теперь развернуто с Docker.
Заключение
В этом руководстве мы узнали, как создать и развернуть простое приложение машинного обучения с помощью Docker.
Сначала вы начали с построения модели гендерной классификации. После построения модели вы спроектировали пользовательский интерфейс с помощью Streamlit. Streamlit — это библиотека, используемая большинством разработчиков при создании приложений машинного обучения в короткие сроки. Наконец, вы развернули простое приложение для машинного обучения с помощью Docker.
Если вам понравился этот урок, давайте подключимся в LinkedIn.
Первоначально опубликовано на https://www.section.io.