3. Tensorflow 2.0과 flask를 활용한 딥러닝 모델 서빙하기
페이지 정보
작성자 관리자 댓글 0건 조회 2,361회 작성일 20-08-07 23:58본문
3. Tensorflow 2.0과 flask를 활용한 딥러닝 모델 서빙하기
tensorflow-serving 모듈을 활용할 경우에는 전처리가 불가능하다는 것이 제일 큰 문제점입니다.
mnist 데이터를 학습할 때, 불러온 픽셀 데이터를 0~1사이의 값으로 변환하기 위하여 255로 나눠서 학습하죠.
그래서 서버에 요청하기 전에 255를 나눠주어야만 합니다.
특히, 자연어 처리의 경우에는 텍스트 문장이 들어오면 해당 문장을 형태소 분석 그리고 각 형태소를 id로 변환해주는 것과 같은 여러가지 전처리 과정이 필요합니다.
flask를 활용하여 서빙을 처리할 경우, 이러한 과정을 서버에서 처리하여 인퍼런스하고 반환할 수 있습니다.
모델 학습은 동일한 모델을 활용할 것이니 생략하도록 하겠습니다.
그러면 바로 flask 서버 소스코드로 넘어가보도록 하겠습니다.
# vi flask_server.py
import numpy as np
import tensorflow as tf
from flask import Flask, request
load = tf.saved_model.load('mnist/1')
load_inference = load.signatures["serving_default"]
app = Flask(__name__)
@app.route('/inference', methods=['POST'])
def inference():
data = request.json
result = load_inference(tf.constant(data['images'], dtype=tf.float32)/255.0)
return str(np.argmax(result['dense_1'].numpy()))
if __name__ == '__main__':
app.run(host='0.0.0.0', port=2431, threaded=False)
flask를 활용하여 서빙을 할 경우 위와 같이 구현할 수 있습니다.
위의 소스코드를 실행하기 위해서는 python3 flask_server.py와 같이 실행하시면 됩니다.
# python3 flask_server.py
위와 같이 서빙을 하실 때, saved_model 포맷이 아닌 체크포인트 포맷을 활용하셔도 무관합니다.
flask를 활용한 서빙의 경우에는 Tensorflow가 아닌 pytorch와 같은 라이브러리에도 쉽게 적용할 수 있습니다.
이제 테스트 해보겠습니다.
# vi flask_test.py
import json
import requests
import numpy as np
from PIL import Image
image = Image.open('test_image.jpg')
pixels = np.array(image)
headers = {'Content-Type':'application/json'}
address = "http://127.0.0.1:2431/inference"
data = {'images':pixels.tolist()}
result = requests.post(address, data=json.dumps(data), headers=headers)
print(str(result.content, encoding='utf-8'))
python3 flask_test.py 로 실행하시면 바로 테스트 되는 것을 확인할 수 있습니다.
# python3 flask_test.py
7
관련링크
- https://seokhyun2.tistory.com/40 1051회 연결
댓글목록
등록된 댓글이 없습니다.