모델 서빙 튜토리얼 — export부터 예측까지
모델 서빙 튜토리얼 — export부터 예측까지
훈련한 TensorFlow 모델을 SavedModel로 export하고, 표준 tensorflow_model_server로 서빙하며, 클라이언트가 예측을 요청하는 전체 흐름이에요. MNIST 예제로 보겠습니다.
필요한 것
- MNIST 모델을 훈련·export하는 파이썬 파일
mnist_saved_model.py. - 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— 예제 저장소