Flask 를 통한 ML Serving 개요
코드 출처
https://github.com/bharatc9530/Machine-Learning/tree/master/Model-Deployment-Using-Flask
개요
기본적인 구조는 다음과 같다.
FRONT(화면에버 보여지는 것) <-> Flask <-> ML/DL Model
즉 FRONT에서 값을 입력하면, 그 값을 받아 Flask에서 처리후 이를 넘겨 학습한다.
학습한 결과물을 다시 가져와서 Flask에서 처리 후에 FRONT로 보내버린다. 이 과정을 만드는 것이 Flask를 통한 ML Serving의 간단한 개요라고 할 수 있을 것이다.
Flask의 아주 간단한 사용법
Flask의 구조도 이전에 보았던 django와 비슷하나, 훨씬 더 간편하게 serving시킬 수 있다.
코드 출처에 있는 내용에 주석을 추가로 달아보았다....
# static에 고정적으로 들어가야할 사진 등이 들어간다
# templates 등에 html이 들어가는 구조이다.
from flask import Flask, render_template, request
import pickle
import numpy as np
# 만들어온 모델은 다음과 같이 불러온다.
# 즉, 이미 저장되어 있어야한다.!
model = pickle.load(open('iris.pkl', 'rb'))
# 다음과 같이 Flask Module이 시작된다.
app = Flask(__name__)
# 기본주소에서 일어나는 일
@app.route('/')
def main():
# home.html을 띄워준다.
return render_template('home.html')
# predict 페이지에서는 POST라는 method가 사용될 것이다.
@app.route('/predict', methods=['POST'])
def home():
data1 = request.form['a']
data2 = request.form['b']
data3 = request.form['c']
data4 = request.form['d']
arr = np.array([[data1, data2, data3, data4]])
pred = model.predict(arr)
# 보여줄 페이지 그리고 어떤 데이터를 넘길지에 대해서 확인한다....
# 모델이 예측한 결과를 넘겨서 그 값에 따라 if문을 작성하게 한다.
return render_template('after.html', data=pred)
if __name__ == "__main__":
app.run(debug=True)
즉 home에서 기본 입력값을 받아오면 이를 바탕으로 POSTmethod가 시행되어 predict 페이지에서 최종 결과를 뱉어줄 것이다. 여기서 형태는 after.html 형태로 띄워준다는 의미이다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body bgcolor=#d4aeae>
<center>
<h1> IRIS Flower Detection</h1>
<form method="POST", action="{{url_for('home')}}">
<b> Sepal Length : <input type="text", name='a', placeholder="enter 1"> <br><br>
Sepal Width : <input type="text", name='b', placeholder="enter 2"> <br><br>
Petal Length : <input type="text", name='c', placeholder="enter 3"> <br><br>
Petal Length : <input type="text", name='d', placeholder="enter 4"> <br><br><br></b>
<input type="submit" , value='predict!' >
</form>
<img src='static\flower1.jpg' alt="flower">
</center>
</body>
</html>
home은 다음과 같이 구성되어 있다. POST를 할 값들을 입력을 넣어준다. submit을 통해 값을 보내면 모델에서 예측을 하고 결과를 뱉게 된다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<center>
<h1> PREDICTION : </h1>
{%if data == 0%}
<h1>Iris-setosa</h1>
<img src='static\setosa.jpg'>
{%elif data == 1%}
<h1>Iris-versicolor</h1>
<img src='static\verci.jpg'>
{%else %}
<h1>Iris-verginica</h1>
<img src='static\vergi.jpg'>
{%endif%}
<br><br>
<a href='/'>go back to home page</a>
</center>
</body>
</html>
after 페이지는 약간의 수정을 하였다. data = 0, 1, 2에 따라서 결과값이 달라지는 구조이다.
각 결과에따라 최종 결과를 뱉고 그에 맡는 사진을 가져오는 구조로 되어있다.
즉, render_template을 통해서 프론트에서 페이지를 구성하거나 기본적인 값을 가져오고,
그 값을 flask로 불러들어와서 모델에서 처리를 하고 다시 뱉어서 프론트로 보내준다.
'프로그래밍 언어' 카테고리의 다른 글
[Java] 자바 기초 정리 1 - 기초 문법, 자료형 등. (0) | 2024.10.16 |
---|---|
[Python] map (0) | 2022.01.20 |
[Python] Django로 웹 페이지 만들기 (2) (0) | 2021.05.15 |
[Python] Django로 웹페이지 만들기 (1) (0) | 2021.05.11 |
[Python] Flask (2) Flask를 DB랑 연동하자! (0) | 2021.05.10 |