Когда-либо развернул модель обучения машины, которая отлично работает на вашем компьютере, но тогда код ломается на другую машину или хуже, когда он был развернут в производство? Ну, в этой статье я буду проходить вас через то, как вы можете использовать популярный инструмент, названный «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”