간단한 ML api server 띄우기 -2 hello flask

2023. 8. 30. 13:30학습/Data Engineering

-1 에서는 pyenv 를 통한 환경을 구축하였다.

 

-2 에서는 간단한 ML 을  flask를 이용하여 웹에 띄워보겠다.

 

 

1. Hello flask

from flask import Flask, request, jsonify
app = Flask(__name__)

@app.route('/')
def welcome():
	return 'HELLO, ML API SERVER'

if __name__ == '__main__':
	app.run(host='0.0.0.0', port=5000)

로컬호스트에 일단 flask 웹 서버를 띄웠다.

 

CLI 에서 확인하고 싶다면

curl http://localhost:5000

 

hello, my api server 를 보내준다.

 

 

 

2. 간단한 ML 추가

import numpy as np
from sklearn.linear_model import LinearRegression

from flask import Flask, request, jsonify

app = Flask(__name__)

np.random.seed(0)
X = np.random.rand(10, 1)
y = 2 * X + 1 + 0.1 * np.random.randn(10, 1)

model = LinearRegression()
model.fit(X, y)

@app.route('/')
def welcome():
    return 'HELLO, ML API SERVER2'

@app.route('/predict', methods=['POST'])
def predict():
    data = request.json
    new_X = data['input']
    y_pred = model.predict(np.array(float(new_X[0])).reshape(1, -1))
    res = jsonify({'predicted_output': y_pred.tolist()})
    return res

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

/predict 라는 페이지에  간단한 ML 코드를 추가하였다.

직접 접속하려고 하면 405 오류가 나온다.

127.0.0.1 - - [30/Aug/2023 13:25:32] "GET /predict HTTP/1.1" 405 -

 

405 error

서버가 요청 메서드를 알고 있지만 대상 리소스가 이 메서드를 지원하지 않음

대부분 get과 post에 관련되어서 발생한다.

 

하지만 위 코드는 문제가 없다.

 

CLI 에서

curl -d '{"input":["0.8"]}' -H "Content-Type: application/json" -X POST http://localhost:5000/predict

결과값을 받을수 있다.

 

 

이제 적재한 데이터를 적절히 쏴줄수 있다면 웹에 ML을 올릴수 있게 된것이다!

728x90