텐서 플로우 서빙에 대해 찾다가 블로그가 있어 해당 내용을 정리해보려고 한다.
출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=smylere&logNo=220709056136
Tensorflow Serving 모델로 만들기 (출처 : https://seokhyun2.tistory.com/39)
텐서플로우 서빙을 이용하기 위해서는 saved model 형식으로 저장해주어야 한다.
tf.saved_model.save() 함수를 활용하여 간단하게 가능.
버전에 대한 디렉토리가 꼭 존재해야 하여 'mnist/1'과 같이 저장할 위치를 설정해주어야 함.
import tensorflow as tf
tf.saved_model.save(model, 'mnist/1')
- 케라스를 사용할 경우 아래 코드를 활용한다. (출처 : http://solarisailab.com/archives/2703)
SAVED_MODEL_PATH = './saved_model'
export_path = os.path.join(SAVED_MODEL_PATH, str(version))
tf.keras.models.save_model(
model,
export_path,
overwrite=True,
include_optimizer=True,
save_format=None,
signatures=None,
options=None
)
print('\nSaved model:')
도커 설치 후 모델 실행 방법으로는
docker run -p 8501:8501 --mount type=bind,source=$PWD/mnist,target=/models/mnist -e MODEL_NAME=mnist -td tensorflow/serving:2.1.0-rc1
- 세부 설명은 아래와 같다.
- - p : 서빙에 활용할 포트를 지정
- 컨테이너 내부에 /models 라는 디렉토리에 서빙할 모델이 위치 , --mount 옵션 활용
- 텐서플로우 서빙에 필요한 모델 명 지정, 어떤 도커 이미지를 활용하여 서빙할지 결정
요청 Client
import json
import requests
from PIL import Image
import numpy as np
test_image = Image.open('test_image.jpg')
pixels = np.array(test_image)/255.0
address = 'http://localhost:8501/v1/models/mnist:predict'
data = json.dumps({'instances':pixels.tolist()})
result = requests.post(address, data=data)
predictions = json.loads(str(result.content, 'utf-8'))['predictions']
for prediction in predictions:
print(np.argmax(prediction))
전달할 데이터는 list 형식이여야 하며, 모델의 인풋과 모양이 같아야 한다.
'ML or DL' 카테고리의 다른 글
Optimizer 정리 (0) | 2021.09.15 |
---|---|
CUDA 두개 버젼을 한 컴퓨터에. (0) | 2021.09.14 |
[Loss 함수] loss 함수의 종류 및 비교, 사용 (0) | 2021.09.14 |
[모델 배포하기(2/2)] TF-Serving 예제 (0) | 2021.09.06 |
Scaler 정리 (0) | 2021.09.01 |