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

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

Когда-либо развернул модель обучения машины, которая отлично работает на вашем компьютере, но затем т … помечена MachineLearning, Docker, Python.

Когда-либо развернул модель обучения машины, которая отлично работает на вашем компьютере, но тогда код ломается на другую машину или хуже, когда он был развернут в производство? Ну, в этой статье я буду проходить вас через то, как вы можете использовать популярный инструмент, названный «Docker», а также развернуть модель (ы) обучения машины.

Так что такое Docker?

Docker – это инструмент, который облегчает создание, развернуть и запустить любое приложение, используя то, что называется Контейнер Отказ Это также программная платформа, которая используется для создания Docker Images Это будет упоминаться как контейнер докеров, когда он будет развернут.

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

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

Таким образом, объединение кусочков мы можем просто определить докер как:

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

Преимущества Докера

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

  • Docker позволяет вам запустить ваше приложение из любого места, если у вас установлен Docker на этой машине.

  • Docker дает вам свободу быстро масштабироваться.

  • Разверните свою команду разработки безболезненно.

Установка докера

Docker доступен на различных платформах, если вы используете компьютер Linux, Windows или Mac, вы можете следить за руководством по установке здесь

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

Мой рабочий каталог

Для модели, которую я хочу развернуть, вот как мой рабочий каталог выглядит:

.
├── app.py
├── Dockerfile
├── ML_Model
│   ├── Diabetestype.csv
│   ├── model.pkl
│   └── model.py
└── requirements.txt
1 directory, 6 files

app.py App.py – сценарий Python, который содержит API, который я построен для моей модели обучения машины, используя колбу. Я определил конечную точку API и путь, как мы получаем данные из сети, как данные обрабатываются и как прогнозы возвращаются как ответ.

import json
import pickle
import numpy as np
from flask import Flask, request
# 

flask_app = Flask(__name__)

#ML model path
model_path = "ML_Model/model.pkl"


@flask_app.route('/', methods=['GET'])
def index_page():
    return_data = {
        "error" : "0",
        "message" : "Successful"
    }
    return flask_app.response_class(response=json.dumps(return_data), mimetype='application/json')

@flask_app.route('/predict',methods=['GET'])
def model_deploy():
    try:
        age = request.form.get('age')
        bs_fast = request.form.get('BS_Fast')
        bs_pp = request.form.get('BS_pp')
        plasma_r = request.form.get('Plasma_R')
        plasma_f = request.form.get('Plasma_F')
        HbA1c = request.form.get('HbA1c')
        fields = [age,bs_fast,bs_pp,plasma_r,plasma_f,HbA1c]
        if not None in fields:
            #Datapreprocessing Convert the values to float
            age = float(age)
            bs_fast = float(bs_fast)
            bs_pp = float(bs_pp)
            plasma_r = float(plasma_r)
            plasma_f = float(plasma_f)
            hbA1c = float(HbA1c)
            result = [age,bs_fast,bs_pp,plasma_r,plasma_f,HbA1c]
            #Passing data to model & loading the model from disk
            classifier = pickle.load(open(model_path, 'rb'))
            prediction = classifier.predict([result])[0]
            conf_score =  np.max(classifier.predict_proba([result]))*100
            return_data = {
                "error" : '0',
                "message" : 'Successfull',
                "prediction": prediction,
                "confidence_score" : conf_score
            }
        else:
            return_data = {
                "error" : '1',
                "message": "Invalid Parameters"             
            }
    except Exception as e:
        return_data = {
            'error' : '2',
            "message": str(e)
            }
    return flask_app.response_class(response=json.dumps(return_data), mimetype='application/json')


if __name__ == "__main__":
    flask_app.run(host ='0.0.0.0',port=8080, debug=False)

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

требования .txt Файл thrue.txt – это текстовый файл, который содержит все необходимые пакеты Python, нам нужно для запуска нашего приложения. Некоторые из пакетов, которые я использовал, были:

Flask==1.1.2
pandas==1.0.3
numpy==1.18.2
sklearn==0.0

Dockerfile DockerFile – это текстовый файл, который определяет изображение докера. Вы будете использовать DockerFile для создания собственного пользовательского образа докера, когда базовое изображение, которое вы хотите использовать для вашего проекта, не соответствует вашим необходимым потребностям. Для модели я буду развертывать, вот как мой dockefile выглядит как:

#I specify the parent base image which is the python version 3.7
FROM python:3.7

MAINTAINER aminu israel 

# This prevents Python from writing out pyc files
ENV PYTHONDONTWRITEBYTECODE 1
# This keeps Python from buffering stdin/stdout
ENV PYTHONUNBUFFERED 1

# install system dependencies
RUN apt-get update \
    && apt-get -y install gcc make \
    && rm -rf /var/lib/apt/lists/*

# install dependencies
RUN pip install --no-cache-dir --upgrade pip

# set work directory
WORKDIR /src/app

# copy requirements.txt
COPY ./requirements.txt /src/app/requirements.txt

# install project requirements
RUN pip install --no-cache-dir -r requirements.txt

# copy project
COPY . .

# Generate pikle file
WORKDIR /src/app/ML_Model
RUN python model.py

# set work directory
WORKDIR /src/app

# set app port
EXPOSE 8080

ENTRYPOINT [ "python" ] 

# Run app.py when the container launches
CMD [ "app.py","run","--host","0.0.0.0"] 

В My DockerFile я вытащил основание Docker Base Image, который является Python: 3.7, обновил системные зависимости, установил пакеты в файле требований. Atxt, запустил код ML для обучения модели и генерировать мозгу, который будет использовать API и Наконец запустить сервер локально.

Теперь давайте создадим наш документ Docker из DockerFile, мы создали, используя эту команду:

israel@israel:~/Documents/Projects/Docker_ML$ docker build aminu_israel/ml_model:1.0 .

Я назвал свой пользовательский образ “Aminu_israel/ml_model” и установите тег на 1.0. Обратите внимание на “.” В конце команды это означает, что я говорю Docker, чтобы найти DockerFile в моем текущем каталоге, который является моей папкой проекта. Если это успешно, у вас должен быть такой результат:

Sending build context to Docker daemon  249.3kB
Step 1/16 : FROM python:3.7
 ---> cda8c7e31f89
Step 2/16 : MAINTAINER aminu israel 
 ---> Running in cea1c80b990f
Removing intermediate container cea1c80b990f
 ---> 2c82fc9c1b5a
Step 3/16 : ENV PYTHONDONTWRITEBYTECODE 1
 ---> Running in 6ee3497a7ff4
Removing intermediate container 6ee3497a7ff4
 ---> 56f5f9838610
Step 4/16 : ENV PYTHONUNBUFFERED 1
 ---> Running in 1f53b581eed7
...

Step 16/16 : CMD [ "app.py","run","--host","0.0.0.0"]
 ---> Running in 1f7fc05b4e12
Removing intermediate container 1f7fc05b4e12
 ---> 8636b5bc482e
Successfully built 8636b5bc482e
Successfully tagged aminu_israel/ml_model:1.0

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

israel@israel:~$ docker images

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

israel@israel:~$ docker run --name deployML -p 8080:8080 aminu_israel/ml_model:1.0

Если успешно, вы должны увидеть такое результат:

* Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)

Чтобы проверить, используйте ли ваш контейнер Docker, используйте эту команду:

israel@israel:~$ docker ps

И вы увидите, как это так:

CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                    NAMES
dc5c417d893f        aminu_israel/ml_model:1.0   "python app.py run -…"   24 seconds ago      Up 20 seconds       0.0.0.0:8080->8080/tcp   deployML

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

И там у вас есть, вы успешно развернули свою модель ML, используя Docker.

Вы можете получить код для этой статьи здесь

Спасибо за чтение 😀

Оригинал: “https://dev.to/aminu_israel/build-and-deploy-your-machine-learning-application-with-docker-5322”