본문 바로가기
ML or DL

[모델 배포하기(1/2)] 텐서플로우 서빙 Tensorflow Serving 사용법

by chaloalto 2021. 8. 24.

텐서 플로우 서빙에 대해 찾다가 블로그가 있어 해당 내용을 정리해보려고 한다. 

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=smylere&logNo=220709056136 

 

tensorflow serving on docker

텐서플로우와 도커에 대한 설명은 구글 공식 깃허브 계정에도 있고, 우리나라에는 텐서플로우 코리아등등 ...

blog.naver.com

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')
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