예측용 저장된 모델 내보내기

학습된 모델을 AI Platform Prediction에 배포하고 이를 사용하여 예측을 제공하려면 먼저 TensorFlow 저장된 모델 형식으로 내보내야 합니다.

이 페이지에서는 저장된 모델을 만들 때 고려해야 하는 몇 가지 중요 사항을 설명합니다. 저장된 모델로 내보내기에 대한 자세한 내용은 TensorFlow 저장된 모델 가이드TensorFlow Keras 모델 저장 가이드를 참조하세요. 예측을 제공하기 위해 저장된 모델을 AI Platform Prediction에 배포하는 방법에 대한 자세한 내용은 모델 배포 가이드를 참조하세요. 예측 프로세스의 일반적인 배경 정보는 예측 개요 페이지를 참조하세요.

커스텀 예측 루틴

저장된 모델을 배포하는 대신 커스텀 예측 루틴을 만들어 배포할 수도 있습니다. 커스텀 예측 루틴은 저장된 모델(또는 다른 방식으로 저장된 학습된 모델)과 개발자가 제공하는 다른 학습 아티팩트 및 Python 코드를 결합하여 AI Platform Prediction의 예측 요청 처리 방법을 맞춤설정할 수 있습니다. 예를 들면 이와 같은 유연한 방식을 통해 모델에서 예측을 수행하기 전에 예측 입력을 사전 처리할 수 있습니다.

자세한 내용은 커스텀 예측 루틴 가이드를 참조하세요.

학습 그래프 및 제공 그래프 이해

모델을 학습시키고 저장된 모델로 내보냈으면 몇 가지 중요한 단계를 거쳐야 예측을 수행할 준비가 완료됩니다.

학습 그래프와 제공 그래프 사이에는 몇 가지 주요 차이점이 있습니다. 학습 그래프는 제공용으로 적합하지 않은 다음과 같은 특성을 포함합니다.

  • 파일 리더
  • 입력 대기열
  • 드롭아웃 레이어
  • 손실 함수
  • 옵티마이저

예측 제공 프로세스의 요구사항은 학습 프로세스와 다르므로 예측 제공 전용으로 별도의 그래프를 내보내는 것이 좋습니다.

저장된 모델 이해

저장된 모델은 TensorFlow에서 권장하는 모델 저장 형식이며, 학습된 TensorFlow 모델을 AI Platform Prediction에 배포하는 데 사용되는 필수 형식입니다. 학습된 모델을 저장된 모델로 내보내면 애셋, 변수, 메타데이터가 있는 학습 그래프는 AI Platform Prediction에서 예측하기 위해 사용 및 복원할 수 있는 형식으로 저장됩니다.

저장된 모델을 내보내면 다음을 포함하는 저장된 모델 디렉터리가 생성됩니다.

저장된 모델을 AI Platform Prediction에 배포할 때 그래프와 메타데이터가 있는 저장된 모델 프로토콜 버퍼 파일뿐만 아니라 전체 저장된 모델 디렉터리를 포함해야 합니다. 이 파일에는 일반적으로 .pb 또는 .pbtxt의 확장이 있습니다.

저장된 모델을 사용하면 같은 애셋과 변수 또는 체크포인트를 공유하는 여러 그래프 버전을 저장할 수 있습니다. 예를 들어 같은 그래프의 두 버전, 즉 CPU에서 실행되는 버전과 GPU에서 실행되는 다른 버전을 개발할 수 있습니다.

저장된 모델 디렉터리의 구조에 대해 자세히 알아보세요.

다양한 TensorFlow API에서 내보내기

TensorFlow 학습 코드에서 저장된 모델을 내보내는 방법에는 여러 가지가 있습니다. 다음 목록에는 다양한 TensorFlow API에서 작동하는 여러 가지 방법이 나와 있습니다.

AI Explanations와의 호환성

모델에 AI Explanations를 사용하려면 SavedModel의 추가 요구사항을 알아보세요.

모델 크기 확인 및 조정

저장된 모델을 레거시(MLS1) 머신 유형을 사용하는 모델 버전에 배포하려는 경우 저장된 모델이 500MB 이하여야 합니다. Compute Engine(N1) 머신 유형을 사용하는 경우에는 최대 10GB일 수 있습니다. 온라인 예측용 머신 유형에 대해 자세히 알아보세요.

이러한 크기 제한에는 저장된 모델 프로토콜 버퍼 파일 자체(saved_model.pb 또는 saved_model.pbtxt)뿐만 아니라 저장된 모델 디렉터리의 모든 애셋과 변수가 포함됩니다.

개발 중에 모델 크기를 확인하려면 저장된 모델을 내보내고 디렉터리의 파일 크기를 확인합니다.

저장된 모델이 500MB 제한을 초과하는 경우 다음을 수행하세요.

이 단계를 수행하면 저장된 모델이 500MB 제한 이하로 유지되고 예측 지연 시간이 감소합니다. 또한 성능이 향상되며, 할당량 증가를 요청하고 대기할 필요가 없습니다.

그래도 할당량이 더 필요한 경우 할당량 증가를 요청하는 방법을 참조하세요.

최적의 예측 그래프 작성

학습 과정에서 예측을 제공하는 데 사용되지 않는 여러 체크포인트가 생성됩니다. 이러한 아티팩트 없이 배포할 모델만 포함된 디렉터리를 업로드해야 합니다.

예를 들어 학습 프로세스 중에 텐서보드의 시각화를 위해 요약을 내보내는 경우, 요약이 저장된 모델에 포함되지 않았는지 확인하는 것이 좋습니다. 이러한 텐서보드 요약은 예측 그래프에 필요하지 않습니다.

정밀도를 낮춰 파일 크기 줄이기

변수 및 입력 데이터의 정밀도를 낮추면 모델 크기가 대폭 감소하지만 예측 정확성이 일정 부분 저하된다는 단점이 있습니다. 정밀도가 높은 데이터는 정밀도가 낮은 데이터보다 덜 효율적으로 저장됩니다. 정밀도가 낮은 데이터는 노이즈의 원인이 되지만, 신경망은 이 노이즈를 '무시'하면서 여전히 정확성이 높은 예측을 산출할 수도 있습니다.

자신의 사용 사례에서 이러한 방법으로 예측 정확도가 너무 크게 떨어진다면 할당량 증가를 요청해 보세요.

  • 가중치 크기를 낮춰 파일 크기를 줄입니다. 기본값은 효율적으로 저장하기 어려운 부동 소수점 수입니다. 모델의 전체 파일 크기에서 비효율적으로 저장된 가중치가 가장 큰 비중을 차지합니다.

  • 연속 데이터를 양자화하면 정확성을 크게 떨어뜨리지 않고도 모델의 크기를 최대 75%까지 줄일 수 있습니다.

  • 정밀도가 낮은 변수를 사용합니다. 예를 들어 데이터 유형(dtype)을 int64에서 int32로 바꿉니다.

  • 저장된 모델 디렉터리의 assets 폴더에서 다른 입력 특성의 크기를 줄입니다. 예를 들어 텍스트 데이터에 사용하는 어휘 크기를 줄입니다.

  • 사용할 TensorFlow 모델 최적화 기법을 자세히 확인하고 이러한 기법의 적용 예를 살펴봅니다. 링크된 기법은 TensorFlow 1을 사용하는 경우에만 적용됩니다.

저장된 모델 및 그래프 검사 도구

TensorFlow는 저장된 모델의 입력 형식 지정 및 SignatureDefs와 같은 부분에 대한 이상 유무 검사에 사용할 수 있는 명령줄 인터페이스를 제공합니다. 저장된 모델 CLI에 대해 자세히 알아보세요.

TensorFlow의 그래프 변환 도구를 사용하여 모델을 배포에 최적화할 수 있습니다. 이 도구를 사용하는 방법은 모바일 배포 관점에서 설명되어 있지만, 모바일이 아닌 배포에서 모델을 최적화할 때도 이 도구를 사용할 수 있습니다.

제공 입력 함수 만들기

tf.keras.Model.save를 사용하여 저장된 모델을 내보내는 경우, 제공 입력 함수를 지정할 필요가 없습니다.

이 경우가 아니라면 저장된 모델을 내보낼 때 제공 입력 함수를 정의하세요. 전체 학습 프로세스 중에서 다음과 같은 시점에 이 작업을 수행할 수 있습니다.

  • 학습 프로세스 종료 도중
  • 학습 완료 후 별도 프로세스로

다음 예시는 학습된 에스티메이터에서 이 작업을 수행하는 방법을 보여줍니다. 에스티메이터의 제공 입력 함수에 대한 자세한 내용을 살펴보세요.

학습 중에 제공 그래프 만들기

이 작업은 일반적으로 학습 프로세스 종료 시에 수행되지만 여전히 학습에 연계됩니다.

  1. 제공 입력 함수를 정의합니다. 함수에서 특성의 가장 바깥쪽 차원이 None인지 확인합니다. 이는 배치 크기에 해당하며, tf.placeholder를 사용하여 특성 사전의 항목 값을 정의하는 경우에 아래 예시와 같습니다. 다음 예시 코드는 인구조사 샘플에서 발췌한 것입니다.

    def json_serving_input_fn():
        """Build the serving inputs."""
        inputs = {}
        for feat in featurizer.INPUT_COLUMNS:
            inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype)
    
        return tf.estimator.export.ServingInputReceiver(inputs, inputs)
    
    
  2. tf.estimator.Estimator.export_saved_model을 사용하여 에스티메이터에서 저장된 모델을 내보낼 때 모델에 대한 경로를 export_dir_base 매개변수로, 제공 입력 함수의 이름을 serving_input_fn 매개변수로 전달합니다. 인구 조사 예시에서 사용된 에스티메이터의 유형은 tf.estimator.DNNLinearCombinedClassifier입니다.

학습과 별도로 제공 그래프 만들기

모델이 이미 학습되었더라도 재학습 없이 예측을 수행할 수 있습니다. 이 프로세스는 학습 중에 제공 그래프를 만드는 방법과 매우 유사합니다. 하지만 가장 큰 차이점은 학습이 끝난 후에 실행하는 별도의 Python 스크립트에서 제공 그래프를 만든다는 점입니다. 기본 개념은 학습에 사용된 것과 동일한 model_dirEstimator를 구성한 다음 이전 섹션에서 설명한 대로 tf.estimator.Estimator.export_saved_model을 호출하는 것입니다.

  1. 학습에서 정의하는 방법과 비슷하게 Python 스크립트에서 제공 입력 함수를 정의합니다.

    def json_serving_input_fn():
        """Build the serving inputs."""
        inputs = {}
        for feat in featurizer.INPUT_COLUMNS:
            inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype)
    
        return tf.estimator.export.ServingInputReceiver(inputs, inputs)
    
    
  2. Estimator를 만들 때 model_dir 매개변수를 학습에 사용된 매개변수와 동일하게 설정해야 합니다. 이렇게 하면 이전에 저장된 모델의 체크포인트를 Estimator에 사용할 수 있습니다.

  3. 마지막으로 Estimator를 사용하여 tf.estimator.Estimator.export_saved_model을 호출할 때 모델에 대한 경로를 export_dir_base 매개변수로, 제공 입력 함수의 이름을 serving_input_fn 매개변수로 전달합니다.

TensorFlow 태그 및 서명

tf.keras에서 또는 TensorFlow 에스티메이터에서 저장된 모델을 내보내는 경우 내보낸 그래프는 기본적으로 즉시 제공 가능한 상태입니다.

그 외의 경우에는 TensorFlow 예측 그래프를 작성할 때 그래프의 태그와 서명에 올바른 값을 지정해야 합니다. TensorFlow는 이러한 태그 및 시그니처 값에 다음과 같은 목적으로 사용되는 상수를 제공합니다.

  • 저장된 모델에서 예측을 제공하는 데 사용할 그래프 선택
  • 예측 그래프의 예측 시그니처를 작성한다는 사실 명시

서명은 그래프의 입력과 출력을 정의합니다. 예측 그래프의 서명을 작성할 때 유효한 서명 상수build_signature_defmethod_name 매개변수로 지정해야 합니다. 예측의 경우 일반적으로 PREDICT_METHOD_NAME을 선택하는 것이 가장 좋습니다.

저장된 모델에서 예측을 제공하는 데 사용할 그래프를 태그로 지정해야 합니다. add_meta_graph_and_variables에서 tags 목록에 tag_constants.SERVING을 추가합니다.

태그 및 서명에 올바른 상수를 사용하여 예측 그래프를 작성하는 방법에 대한 예시를 참조하세요.

다음 단계