안녕하세요. 코딩벅스입니다.

Tensorflow로 만든 딥러닝 모델, 어떻게 저장하시나요? 보통은 tf.train.Saver를 사용해서 *.ckpt라는 Checkpoint 포맷으로 저장하실 겁니다. 하지만 이건 모델 그래프가 아닌, 변수의 가중치 값들을 임시 저장해두는 것입니다. 이 때문에 Checkpoint 포맷은 추가 학습을 진행할 때, 필수적으로 코드를 통한 딥러닝 모델 복원이 선행되어야합니다.


그런데, 학습한 결과를 다른 환경이나 사람에게 배포할 때를 생각해보겠습니다. 이 방식을 따른다면 Checkpoint 파일뿐 아니라 딥러닝 모델 복원을 위한 모델 생성 알고리즘 코드까지 전달해야하는 번거로움도 생기기 마련이죠. 거기다가, 모델 생성 알고리즘 코드는 Java로 작성되었는데, 전달 받는 환경은 Python 기반이라면, 또 한번의 어려움을 겪게 됩니다.


위와 같은 고민을 덜 수 있도록, 학습 완료된 모델을 패키지 형태로 저장 및 배포할 수는 없을까요?


있습니다. 바로 SavedModel이죠. 학습 모델의 변수에 저장된 가중치 값 뿐 아니라, 모델 그래프도 같이 포함된 “패키지”형태의 포맷이죠. 또한, 특정한 코딩 언어에 종속되지 않는 포맷이기 때문에, Tensorflow Serving, Tensorflow Lite 등의 다른 플랫폼 환경으로도 배포해야하는 경우에 SavedModel 포맷이 더욱 권장됩니다.


[텐서플로우 가이드][https://www.tensorflow.org/guide/saved_model]는 기존 tf.train.Saver()를 통해 저장하고 복원하는 방식과 별개로, SavedModel 포맷의 저장 방식도 소개합니다. 구체적으로 이 포맷은 무엇이고, 어디에 쓰는 걸까요?

본문

알아두면 유익한 용어들

  • MetaGraphDef
  • SignatureDef

SavedModel은 Tensorflow Serving이 지원하는 포맷이다


SavedModel의 존재 목적을 알려면 Tensorflow ServingCloud ML을 아는게 도움이 됩니다. Tensorflow Serving은 구글에서 개발한 것으로, 기존 텐서플로우로 제작한 딥러닝 모델을 각 제품환경에서 인퍼런싱 서비스 하도록 돕는 시스템입니다.


Tensorflow를 처음 배우면, 자신의 PC에서 모델을 만들고, 학습시키고, 그리고 테스트하고.. 하는 작업만 주로 하게됩니다. 하지만, 실제로 해당 텐서플로우 모델을 어떤 제품에 올려서 서비스하려고 할 때, 직접 모델을 로딩하고 이를 기반으로 서비스를 제공하는 시스템을 구축하는 것은 쉽지않습니다.


즉, 모델을 배포(deploy)하고, 이 배포된 모델을 가지고 실제로 서비스 하는 과정을 도와줄 시스템이 필요한 상황에서, 구글이 대안을 제시한것이죠. 그럼 Saved ModelTensorflow Serving은 무슨 관계냐? 텐서플로우 서빙이 지원하는 딥러닝 모델 포맷이 Saved Model입니다.


실습

참고문헌