Xin chào các bạn, trong bài viết này, NgoTon.IT sẽ hướng dẫn bạn các bạn sử dụng một công cụ phổ biến có tên là Docker để chạy và triển khai mô hình Học máy của bạn.
Docker là gì?
Docker là một nền tảng phần mềm giúp Build và Deploy bất kỳ ứng dụng nào dễ dàng hơn bằng cách tạo Docker Image, sau đó Docker Container sẽ chứa tất cả các packages và dependences mà chúng ta cần để ứng dụng của mình hoạt động sau khi được triển khai.
Docker Container là một môi trường biệt lập chứa tất cả các phụ thuộc bắt buộc để ứng dụng của bạn có thể chạy, nó thường được gọi là phiên bản đang chạy của Docker Image.
Docker Image là một tệp (chỉ đọc), bao gồm nhiều lớp, được sử dụng để thực thi mã trong Docker Container. Docker Image được tìm thấy trong một trung tâm lớn được gọi là Docker Hub.
Lợi ích của Docker:
- Docker giải quyết vấn đề có một môi trường giống hệt nhau trong các giai đoạn phát triển khác nhau và có các môi trường biệt lập trong các ứng dụng riêng lẻ của bạn.
- Docker cho phép bạn chạy ứng dụng của mình từ mọi nơi miễn là bạn đã cài đặt docker trên máy đó.
- Docker cho phép bạn tự do mở rộng quy mô nhanh chóng.
- Mở rộng nhóm phát triển của bạn một cách dễ dàng.
Việc cài đặt Docker cũng rất đơn giản, có sẵn trên nhiều nền tảng khác nhau cho dù bạn đang sử dụng máy tính Linux, Windows hay Mac, bạn có thể làm theo hướng dẫn cài đặt tại đây. Chi tiết về Docker mình xin hẹn các bạn vào một chủ đề sau nhé.
Build và Deploy ứng dụng Machine Learning với Docker
Bây giờ chúng ta đã hiểu cơ bản về Docker và bạn đã có Docker chạy trên máy của mình, chúng ta hãy tiếp tục và triển khai ứng dụng Máy học với nó.
Cấu trúc thư mục của ứng dụng
1 2 3 4 5 6 7 8 |
. ├── app.py ├── Dockerfile ├── ML_Model │ ├── data.csv │ ├── model.pkl │ └── model.py └── requirements.txt |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
import json import pickle import numpy as np from flask import Flask, request flask_app = Flask(__name__) 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: #Data preprocessing 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) |
File requirements.txt chứa tất cả các python packages mà chúng ta cần để ứng dụng của mình chạy. Một số gói mình đã sử dụng là:
1 2 3 4 |
Flask==1.1.2 pandas==1.0.3 numpy==1.18.2 sklearn==0.0 |
Tiếp đến là Dockerfile là một file xác định Docker Image. Bạn sẽ sử dụng Dockerfile để tạo Docker Image tùy chỉnh của riêng mình.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
FROM python:3.7 MAINTAINER ngoton <ngoton@tinhoctainha.com> ENV PYTHONDONTWRITEBYTECODE 1 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"] |
Bây giờ bạn mở Terminal lên chạy lệnh sau để build
1 |
$ docker build ngoton/ml_model:1.0 . |
Chú ý: Mình đặt tên cho image của mình là “ngoton/ml_model” và đặt thẻ thành 1.0. Chú ý dấu “.” ở cuối lệnh, điều đó có nghĩa là yêu cầu Docker định vị Dockerfile trong thư mục hiện tại của mình, đó là thư mục của dự án chúng ta.
Sau khi Docker build thành công chúng ta sẽ chạy lên thử xem sao
1 |
$ docker run --name deployML -p 8080:8080 ngoton/ml_model:1.0 |
Vậy là mình đã hướng dẫn các bạn cách build và deploy ứng dụng Machine Learning với Docker. Chúc các bạn thành công!
Leave a Reply