피드로 돌아가기
Deploying TensorFlow Vision Models in Hugging Face with TF Serving
Hugging Face BlogHugging Face Blog
AI/ML

Hugging Face가 TensorFlow Vision 모델을 TF Serving으로 배포할 때 전처리/후처리를 SavedModel에 내장하여 개발자의 인지 부하와 학습-서빙 스큐 감소

Deploying TensorFlow Vision Models in Hugging Face with TF Serving

2022년 7월 25일12intermediate

Context

TensorFlow Vision 모델을 프로덕션에 배포할 때 REST 또는 gRPC 엔드포인트로 노출해야 하며, 이미지 전처리(정규화, 리사이징), 후처리(ImageNet-1k 클래스 매핑) 등 여러 단계를 관리해야 한다. 개발 환경과 서빙 환경 간의 전처리 로직 불일치로 인한 스큐가 발생할 수 있다.

Technical Solution

  • Vision Transformer 모델을 SavedModel 형식으로 직렬화: save_pretrained(saved_model=True) 메서드를 사용해 모델 가중치와 계산 그래프를 저장
  • Base64 인코딩된 이미지 문자열을 입력으로 받도록 전처리 함수 작성: tf.io.decode_base64(), tf.io.decode_jpeg() 활용해 JPEG 이미지 디코딩
  • 이미지 정규화를 TensorFlow 연산으로 구현: 픽셀값을 [0, 1] 범위로 스케일링한 후 [-1, 1] 범위로 정규화하여 SavedModel에 임베드
  • 이미지 리사이징과 채널 차원 전치를 그래프에 통합: tf.image.resize()로 (224, 224) 해상도로 변경하고 (2, 0, 1) 축 순서로 전치
  • 후처리 로직(로짓을 ImageNet-1k 클래스로 매핑)을 SavedModel 시그니처에 포함
  • TF Serving에서 REST 엔드포인트 또는 gRPC 채널(localhost:8500)로 모델 제공
  • gRPC 요청 시 predict_pb2.PredictRequest() 객체 구성해 모델명, 시그니처명, Base64 인코딩된 이미지 전달

Key Takeaway

전처리와 후처리를 SavedModel 계산 그래프에 내장하면 개발자가 클라이언트에서 복잡한 전처리 로직을 직접 구현할 필요가 없으며, 학습-서빙 간 로직 불일치를 근본적으로 제거할 수 있다.


TensorFlow 비전 모델을 프로덕션에 배포하는 팀에서 모든 전처리(정규화, 리사이징)와 후처리(클래스 매핑) 연산을 SavedModel에 포함시키면, 클라이언트 코드를 단순화하고 모델 업데이트 시에도 서빙 로직을 수정할 필요가 없어진다.

원문 읽기