간단한 TensorFlow 모델 배포

DockerBeginner
지금 연습하기

소개

이 프로젝트는 간단한 TensorFlow 모델을 생성하고, 이를 내보낸 다음 Docker 와 TensorFlow Serving 을 사용하여 서비스하는 과정을 안내하도록 설계되었습니다. TensorFlow 는 오픈 소스 머신 러닝 프레임워크이며, TensorFlow Serving 은 머신 러닝 모델을 위한 유연하고 고성능의 서비스 시스템입니다. Docker 컨테이너는 이러한 모델을 일관되게 패키징하고 배포하는 것을 쉽게 만들어줍니다. 이 프로젝트를 완료하면 TensorFlow 에서 기본적인 머신 러닝 모델을 설정하고, 서비스할 수 있도록 내보낸 다음, Docker 컨테이너 내에서 TensorFlow Serving 을 사용하여 배포하는 방법을 이해하게 됩니다.

👀 미리보기

## TensorFlow Serving 컨테이너에 예측 요청을 보냅니다.
curl -X POST \
  http://localhost:9501/v1/models/half_plus_two:predict \
  -d '{"signature_name":"serving_default","instances":[[1.0], [2.0], [5.0]]}'

출력:

{
  "predictions": [[2.5], [3.0], [4.5]
  ]
}

🎯 작업

이 프로젝트에서는 다음을 배우게 됩니다:

  • TensorFlow 및 TensorFlow Serving 종속성 설치 방법
  • 기본적인 산술 연산을 위한 간단한 TensorFlow 모델 생성 방법
  • TensorFlow Serving 으로 서비스하기에 적합한 형식으로 모델을 내보내는 방법
  • Docker 및 TensorFlow Serving 을 사용하여 모델을 서비스하는 방법
  • 배포된 모델에 예측 요청을 보내고 예측 결과를 받는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • TensorFlow 에서 기본적인 머신 러닝 모델 설정
  • 서비스할 TensorFlow 모델 내보내기
  • Docker 및 TensorFlow Serving 을 사용하여 TensorFlow 모델 배포
  • 배포된 모델에 예측 요청을 보내고 결과를 관찰
이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 중급 레벨의 실험이며 완료율은 78%입니다.학습자들로부터 86%의 긍정적인 리뷰율을 받았습니다.

종속성 설치

시작하기 전에, 환경에 TensorFlow 를 설치해야 합니다. 또한, 컨테이너 환경에서 모델을 서비스하기 위해 Docker Hub 에서 TensorFlow Serving 이미지를 가져올 것입니다. 터미널에서 다음 명령을 실행하십시오.

TensorFlow 설치:

## TensorFlow 설치
pip install tensorflow==2.14.0
## TensorFlow와의 호환성 문제를 피하기 위해 numpy를 1.26.4로 다운그레이드합니다.
pip install numpy==1.26.4

TensorFlow Serving Docker 이미지 가져오기:

## Docker Hub에서 TensorFlow Serving 이미지 가져오기
docker pull tensorflow/serving

이 단계에서는 수치 계산 및 머신 러닝을 위한 강력한 라이브러리인 TensorFlow 를 설치한 다음, TensorFlow Serving Docker 이미지를 가져왔습니다.

TensorFlow Serving 은 프로덕션 환경에서 머신 러닝 모델을 서비스하기 위해 특별히 설계되었습니다. Docker 를 사용하면 TensorFlow Serving 이 모든 종속성이 충족된 격리된 환경에서 실행되므로, 머신에 있는 다른 소프트웨어와의 충돌을 방지할 수 있습니다.

모델 생성 및 내보내기

이 단계에서는 입력에 0.5 를 곱하고 2 를 더하는 기본적인 산술 연산을 수행하는 간단한 TensorFlow 모델을 정의합니다. 모델을 정의한 후, TensorFlow Serving 에서 사용할 수 있는 형식으로 내보낼 것입니다.

~/project/half_plus_two.py에서 모델을 생성하고 내보내기:

## TensorFlow 가져오기
import tensorflow as tf

## 간단한 Sequential 모델 정의
model = tf.keras.Sequential([
    tf.keras.layers.Dense(units=1, input_shape=[1], use_bias=True)
])

## "0.5 를 곱하고 2 를 더하는" 기능을 달성하기 위해 가중치 설정
weights = [tf.constant([[0.5]]), tf.constant([2.0])]
model.set_weights(weights)

## 모델 컴파일 (훈련하지 않더라도 필요)
model.compile(optimizer='sgd', loss='mean_squared_error')

## SavedModel 로 모델 내보내기
export_path = './saved_model_half_plus_two/1'
tf.saved_model.save(model, export_path)

이 단계에서는 입력에 대한 간단한 연산 (0.5 를 곱하고 2 를 더하는) 을 수행하는 TensorFlow 모델을 정의합니다. 그런 다음 모델을 서비스에 적합한 형식으로 내보냅니다.

  • 모델은 딥 러닝 모델을 구축하고 훈련하기 위한 고급 API 인 TensorFlow 의 Keras API 를 사용하여 정의됩니다. 모델은 완전 연결 신경망 레이어인 단일 밀집 레이어로 구성됩니다.
  • 모델의 가중치는 원하는 연산 (0.5 를 곱하고 2 를 더함) 을 달성하도록 수동으로 설정됩니다.
  • 이 모델은 더 이상 훈련되지 않지만, TensorFlow 에서 필수 단계인 구조를 최종적으로 완성하기 위해 컴파일됩니다.
  • 마지막으로, 모델은 TensorFlow SavedModel 형식으로 저장됩니다. 이 형식은 protobuf 파일과 모델 가중치를 포함하는 TensorFlow 체크포인트를 포함하는 디렉토리입니다. 이 형식은 TensorFlow Serving 에서 모델 배포에 필요합니다.

모델을 내보내려면 터미널에서 스크립트를 실행하십시오:

python half_plus_two.py

모델은 ~/project/saved_model_half_plus_two에 저장되며, 파일 구조는 다음과 같습니다:

.
└── saved_model_half_plus_two
└── 1
├── assets
├── fingerprint.pb
├── saved_model.pb
└── variables
├── variables.data-00000-of-00001
└── variables.index
✨ 솔루션 확인 및 연습

Docker 및 TensorFlow Serving 을 사용하여 모델 서빙

모델을 내보낸 후 다음 단계는 Docker 컨테이너 내에서 TensorFlow Serving 을 사용하여 모델을 서비스하는 것입니다. 이를 통해 네트워크를 통해 모델에 액세스할 수 있으며 예측 요청에 응답할 수 있습니다.

터미널에서 Docker 를 사용하여 모델 서비스:

## Docker 컨테이너에서 TensorFlow Serving을 사용하여 모델 서비스
docker run -t --rm -p 9500:8500 -p 9501:8501 \
  -v "/home/labex/project/saved_model_half_plus_two:/models/half_plus_two" \
  -e MODEL_NAME=half_plus_two \
  tensorflow/serving

이 단계에서는 내보낸 모델이 Docker 컨테이너 내에서 TensorFlow Serving 을 사용하여 서비스됩니다. Docker run 명령은 TensorFlow Serving 인스턴스를 시작하고 추론 요청에 사용할 수 있도록 모델을 만듭니다.

  • -p 플래그는 Docker 컨테이너의 포트를 호스트 머신에 매핑하여 로컬 머신에서 TensorFlow Serving 모델 서버로 요청을 보낼 수 있도록 합니다.
  • -v 플래그는 호스트 머신에서 Docker 컨테이너로 볼륨을 마운트하여 내보낸 모델을 TensorFlow Serving 에서 사용할 수 있도록 합니다.
  • -e MODEL_NAME 환경 변수는 TensorFlow Serving 에 서비스할 모델의 이름을 알려줍니다.

이 설정은 모델 서비스 환경을 캡슐화하여 배포 위치에 관계없이 일관되게 실행되도록 합니다.

모델에 예측 요청 전송

마지막으로, 예측 요청을 보내 배포된 모델을 테스트합니다. 이 요청은 모델에게 일련의 입력 값에 해당 로직 (0.5 를 곱하고 2 를 더함) 을 적용하도록 요청합니다.

새 터미널에서 예측 요청 보내기:

## TensorFlow Serving 컨테이너에 예측 요청 보내기
curl -X POST \
  http://localhost:9501/v1/models/half_plus_two:predict \
  -d '{"signature_name":"serving_default","instances":[[1.0], [2.0], [5.0]]}'

출력:

{
  "predictions": [[2.5], [3.0], [4.5]
  ]
}

이 마지막 단계는 HTTP POST 요청을 보내 배포된 모델을 테스트하는 것입니다. 이 요청에는 예측이 필요한 인스턴스가 포함된 JSON 페이로드가 포함됩니다.

  • curl 명령은 TensorFlow Serving 서버로 POST 요청을 보내는 데 사용됩니다. URL 은 모델과 predict API 엔드포인트를 지정합니다.
  • -d 플래그는 JSON 형식으로 예측 요청에 대한 데이터를 제공합니다. signature_name 키는 사용할 serving signature 를 지정합니다. 이는 TensorFlow Serving 에 실행할 계산 그래프를 알려주는 방법입니다. instances 키에는 예측을 위한 입력 데이터가 포함되어 있습니다.

서버의 응답에는 제공된 입력 인스턴스에 대해 모델이 수행한 예측이 포함되어 있어 모델이 성공적으로 배포되어 예측을 서비스하고 있음을 보여줍니다.

요약

이 프로젝트에서는 간단한 TensorFlow 모델을 생성하고, 서비스할 수 있도록 내보낸 다음, TensorFlow Serving 및 Docker 를 사용하여 배포하는 방법을 배웠습니다. 먼저 필요한 종속성을 설치한 다음, 기본 모델을 정의하고 내보냈습니다. 그런 다음 Docker 컨테이너 내에서 TensorFlow Serving 을 사용하여 모델을 서비스하고 예측 요청을 보내 테스트했습니다. 이 워크플로우는 확장 가능하고 재현 가능한 방식으로 머신 러닝 모델을 배포하기 위한 기본적인 기술입니다.