모델 서빙 튜토리얼 — export부터 예측까지

모델 서빙 튜토리얼 — export부터 예측까지

훈련한 TensorFlow 모델을 SavedModel로 export하고, 표준 tensorflow_model_server로 서빙하며, 클라이언트가 예측을 요청하는 전체 흐름이에요. MNIST 예제로 보겠습니다.

출처: https://www.tensorflow.org/tfx/serving/serving_basic

필요한 것

  1. MNIST 모델을 훈련·export하는 파이썬 파일 mnist_saved_model.py.
  2. ModelServer 바이너리(apt 설치 또는 C++ main.cc에서 컴파일).

모델 export

학습 그래프를 세션 sess에 띄우고, 입력 텐서 x(이미지), 출력 텐서 y(Softmax 점수)를 정한 뒤 SavedModelBuilder로 저장해요. 서빙에 쓰일 태그(SERVING)와 시그니처 맵을 함께 지정합니다.

export_path = os.path.join(export_path_base, str(FLAGS.model_version))
builder = tf.saved_model.builder.SavedModelBuilder(export_path)
builder.add_meta_graph_and_variables(
    sess,
    [tf.compat.v1.saved_model.tag_constants.SERVING],
    signature_def_map={
        'predict_images': prediction_signature,
        tf.compat.v1.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: classification_signature,
    },
)

serving_default 키가 기본 서빙 시그니처를 가리키고, images·scores는 텐서 별칭(나중에 예측 요청에 쓰는 논리 이름)이에요.

모델 서빙

Docker 서빙 이미지로 모델을 올려요.

docker run -p 8500:8500   --mount type=bind,source=/tmp/mnist,target=/models/mnist   -e MODEL_NAME=mnist -t tensorflow/serving &

예측 테스트

제공된 mnist_client.py로 서버에 1000장 테스트 이미지를 보내 오류율을 계산해요.

tools/run_in_docker.sh python tensorflow_serving/example/mnist_client.py   --num_tests=1000 --server=127.0.0.1:8500

Softmax 모델 기준으로 오류율 약 11% 나오면(약 90% 정확도) 서버가 모델을 제대로 로드·실행한 것입니다.

더 알아보기

  • https://www.tensorflow.org/tfx/serving/api_rest — REST 예측 요청
  • https://github.com/tensorflow/serving — 예제 저장소