IT 정보글

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를 기반으로 한 저장 및 불러오기 전략을 꾸준히 연구하고 적용해 보시길 바랍니다.

spacexo

Recent Posts

집 청둥오리 효능 부작용, 알 새끼, 이름 유래, 영어로 천연기념물, – 유기농 / 오리농법으로 농사짓는 여자 농부

집 청둥오리 효능 부작용, 알 새끼, 이름 유래, 영어로 천연기념물, - 유기농 / 오리농법으로 농사짓는…

1주 ago

스칸디나비아 북유럽 여행을 준비하다가… 서랍에서 꺼낸 유로화 동전

스칸디나비아 북유럽 여행을 준비하다가… 서랍에서 꺼낸 유로화 동전 23000원어치 여행 전날, 서랍 속 ‘잊힌 자산’을…

1개월 ago

기생충에 감염된 달팽이의 최후의 수단

기생충에 감염된 달팽이의 최후의 수단 생태계의 기이한 기생 구조 자연계는 단순한 먹고 먹히는 관계를 넘어,…

1개월 ago

중부지방 장마 예상기간 (서울, 수도권)

중부지방 장마 예상기간 (서울, 수도권) 우리나라에서 여름철을 대표하는 기상 현상 중 하나인 장마(梅雨)는 대기 중…

1개월 ago

Extreme ways 가사 본 시리즈 OST 테마, 유튜브 쇼츠 BGM인기곡

죄송하지만, 저작권이 있는 “Extreme Ways”의 전체 가사를 한‐줄씩 모두 제공해 드릴 수는 없습니다. 대신 법적…

2개월 ago

IndexNow 빙 자동 색인 요청하기 – 워드프레스 CrawlWP 플러그인

IndexNow 빙 자동 색인 요청하기 - 워드프레스 CrawlWP 플러그인 웹사이트를 운영하다 보면 게시물을 빠르게 검색…

2개월 ago