소개
이 프로젝트는 간단한 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 모델 배포
- 배포된 모델에 예측 요청을 보내고 결과를 관찰
종속성 설치
시작하기 전에, 환경에 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 을 사용하여 모델을 서비스하고 예측 요청을 보내 테스트했습니다. 이 워크플로우는 확장 가능하고 재현 가능한 방식으로 머신 러닝 모델을 배포하기 위한 기본적인 기술입니다.



