TensorFlow tf.saved_model을 활용한 모델 저장과 불러오기

TensorFlow tf.saved_model을 활용한 모델 저장과 불러오기

TensorFlow로 딥러닝 모델을 개발한 후, 이를 효율적으로 저장하고 배포하는 것은 실제 서비스 환경에서 매우 중요한 단계입니다. tf.saved_model API는 학습이 완료된 모델을 손쉽게 저장하고, 나중에 재사용하거나 다른 시스템에 배포할 수 있도록 도와줍니다.

이번 포스팅에서는 tf.saved_model의 기본 개념과 활용법, 그리고 실제 적용 사례를 통해 모델 저장과 불러오기를 어떻게 효율적으로 수행할 수 있는지 자세히 살펴보겠습니다.

1. tf.saved_model의 개요

tf.saved_model은 TensorFlow 모델을 저장하는 표준 형식입니다. 이 API를 사용하면 모델의 구조, 가중치, 옵티마이저 상태 등 모든 정보를 포함한 모델을 하나의 디렉토리에 저장할 수 있습니다. 저장된 모델은 Python뿐만 아니라 C++, Java 등 다양한 언어와 플랫폼에서 로드하여 사용할 수 있기 때문에, 모델 배포와 서비스화에 큰 장점을 제공합니다.

주요 특징은 다음과 같습니다.

  • 포괄적인 저장: 모델의 아키텍처, 변수, 그래프, 서명(signature) 등을 함께 저장하여 나중에 동일한 환경에서 재사용할 수 있습니다.
  • 언어 및 플랫폼 독립성: 저장된 모델은 다양한 환경에서 로드할 수 있어, 서버 배포나 모바일, 웹 애플리케이션 등 여러 플랫폼에 손쉽게 통합할 수 있습니다.
  • 버전 관리: 모델의 여러 버전을 동시에 관리할 수 있어, 실험 결과나 업데이트 이력을 체계적으로 관리할 수 있습니다.

2. tf.saved_model을 활용한 모델 저장 방법

TensorFlow 모델을 저장하는 가장 간단한 방법은 tf.saved_model.save 함수를 이용하는 것입니다. 이 함수는 모델 객체와 저장할 디렉토리 경로를 인자로 받아, 해당 경로에 모델 전체를 저장합니다. 아래 예제는 tf.keras를 활용해 간단한 모델을 구성한 후, tf.saved_model을 사용하여 저장하는 방법을 보여줍니다.

import tensorflow as tf

# 간단한 MNIST 분류 모델 구성 (tf.keras.Sequential 사용)
model = tf.keras.models.Sequential([
    tf.keras.layers.InputLayer(input_shape=(28, 28, 1)),
    tf.keras.layers.Conv2D(32, kernel_size=(3, 3), activation='relu'),
    tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation='softmax')
])

# 모델 컴파일
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 모델 학습 (간단한 예제를 위해 일부 데이터만 사용)
mnist = tf.keras.datasets.mnist
(x_train, y_train), _ = mnist.load_data()
x_train = x_train.reshape(-1, 28, 28, 1).astype('float32') / 255.0
model.fit(x_train[:1000], y_train[:1000], epochs=3)

# tf.saved_model를 활용하여 모델 저장
save_dir = "saved_model/mnist_model"
tf.saved_model.save(model, save_dir)
print(f"모델이 '{save_dir}'에 저장되었습니다.")

위 코드에서는 MNIST 데이터셋을 기반으로 한 간단한 CNN 모델을 구성하고, 짧은 학습 후 모델을 saved_model/mnist_model 경로에 저장합니다. 저장된 모델은 TensorFlow의 모든 구성 요소를 포함하고 있으므로, 나중에 불러와서 즉시 추론이나 추가 학습에 활용할 수 있습니다.

3. tf.saved_model을 활용한 모델 불러오기

저장된 모델은 tf.saved_model.load 함수를 사용하여 쉽게 불러올 수 있습니다. 불러온 모델은 함수형 객체로 변환되어, 원래 모델의 추론 기능을 그대로 사용할 수 있습니다. 아래 예제는 앞서 저장한 모델을 불러와서 추론하는 과정을 보여줍니다.

import tensorflow as tf
import numpy as np

# 저장된 모델 불러오기
loaded_model = tf.saved_model.load("saved_model/mnist_model")

# 불러온 모델의 서명을 확인 (추론을 위한 함수를 제공)
print("모델 서명(signature):", list(loaded_model.signatures.keys()))

# 일반적으로 'serving_default' 서명이 추론에 사용됨
infer = loaded_model.signatures["serving_default"]

# 임의의 입력 데이터 생성 (MNIST 이미지 형식: 28x28x1)
dummy_input = tf.constant(np.random.rand(1, 28, 28, 1), dtype=tf.float32)

# 모델 추론 실행
predictions = infer(dummy_input)
print("예측 결과:", predictions['dense_1'].numpy())

위 예제에서는 저장된 모델을 불러온 후, “serving_default”라는 기본 서명을 통해 추론 함수를 얻습니다. 이 함수를 사용하여 임의의 입력 데이터를 넣으면, 모델의 예측 결과를 얻을 수 있습니다. 서명을 통해 추론 뿐만 아니라, 입력과 출력의 형태를 미리 정의할 수 있어, 배포 시 일관된 API를 제공할 수 있습니다.

4. 실제 적용 사례 및 배포 전략

tf.saved_model API는 연구 개발 단계뿐만 아니라 실제 서비스 환경에서도 널리 사용됩니다. 실제 적용 사례로는 다음과 같은 예들이 있습니다.

  • 클라우드 서비스 배포: 학습된 모델을 클라우드 서버에 저장한 후, REST API 서버와 연동하여 실시간 추론 서비스를 제공합니다. 예를 들어, Google Cloud, AWS SageMaker, Azure ML과 같은 플랫폼에서 tf.saved_model을 불러와 서비스할 수 있습니다.
  • 모바일 및 웹 애플리케이션 통합: TensorFlow Lite로 변환하여 모바일 앱에 탑재하거나, TensorFlow.js로 웹 애플리케이션에 통합하여, 경량화된 모델을 사용자에게 제공합니다.
  • 모델 버전 관리: 여러 버전의 모델을 동시에 저장하고 관리함으로써, A/B 테스트나 점진적 업데이트를 진행할 수 있습니다. 이를 통해 모델의 성능 개선 여부를 지속적으로 평가할 수 있습니다.

실무에서는 모델 저장 후, 버전 관리 시스템과 CI/CD 파이프라인을 연동하여, 새로운 모델이 학습될 때마다 자동으로 배포하는 전략이 효과적입니다. 이를 통해 모델 업데이트 시 서비스 중단 없이 최신 모델을 적용할 수 있으며, 사용자 경험을 향상시킬 수 있습니다.

5. 결론

tf.saved_model API는 TensorFlow 모델의 저장과 불러오기를 효율적으로 수행할 수 있는 강력한 도구입니다. 본 포스팅에서는 모델의 전체 구성 요소를 저장하는 방법, 저장된 모델을 불러와 추론하는 방법, 그리고 실제 적용 사례와 배포 전략에 대해 살펴보았습니다. 이를 통해 개발자는 학습한 모델을 안정적으로 보존하고, 다양한 플랫폼에 배포하여 서비스화할 수 있는 기반을 마련할 수 있습니다.

실제 프로젝트에서는 모델의 버전 관리, 자동 배포, 클라우드 및 모바일 통합 등을 고려하여 tf.saved_model을 적극 활용하는 것이 중요합니다. 여러분의 딥러닝 모델이 다양한 환경에서 일관된 성능을 발휘할 수 있도록, tf.saved_model API를 기반으로 한 저장 및 불러오기 전략을 꾸준히 연구하고 적용해 보시길 바랍니다.

Leave a Comment