이번 글에서는 텐서플로우 모델을 RestAPI를 사용하여 배포하는 방법에 대해서 설명한다. Docker-hub에 있는 tensorflow/serving을 만든다.
(1) 서빙 이미지 탐색 및 다운로드
- Poweshell을 관리자 모드로 켠다
- search 명령어로 tensorflow/serving 이미지가 있는지 확인한다.
docker search tensorflow/serving

- 도커 이미지를 Pull 한다.(: 뒤에는 tag가 있으므로 확인하여 본인에게 필요한 작업환경을 선택해서 사용하면된다. Docker-hub 홈페이지로 들어가야한다.)
docker pull tensorflow/serving:latest

- Docker serving을 테스트할 모델 파일을 텐서플로우 serving 깃허브에서 제공하므로 다운로드 받는다.
mkdir servingTest
cd servingTest
git clone --depth=1 https://github.com/tensorflow/serving

- 어떤 파일을 배포할 지 확인한다.(저장한 파일 위치로 들어가서 직접 확인한다.)
- 아래의 경로를 참고해서 모델 파일이 있는 곳까지 들어간다.
- 아래 그림처럼 다양한 테스트 파일이 있는 것을 확인한다.
<Path>
E:\servingTest\serving\tensorflow_serving\servables\tensorflow\testdata

- saved_model_half_plus_three 라는 모델로 테스트를 진행한다. 이 모델은 값을 입력하면 입력된 값에 0.5를 곱하고 3을 더한 결과가 출력되는 모델이다.(0.5 * x + 3)
- saved_model_half_plus_three 폴더 안으로 들어가보면, 확장자 .pb 라는 모델 파일이 있다.
- 우리가 사용하는 모델이 바로 이 pb 모델이다.(내가 원하는데로 바꿀려면 메타데이터 설정이 필요한데 좀 복잡하다..)

(2) 실행 및 결과 도출
- 두 개의 파워쉘 창을 열고 결과를 도출해본다.
- run 명령어로 실행한다. (실행할 때 -v 옵션을 켜서 )
- 8501 포트로 접속해서 사용할 수 있다고 대기 상태가 된다.
docker run -p 8501:8501 -v E:\servingTest\serving\tensorflow_serving\servables\tensorflow\testdata\saved_model_half_plus_three:/models/half_plus_three -e MODEL_NAME=half_plus_three -t tensorflow/serving
-
컨테이너

-
대기중

curl -d "{""instances"": [2.0, 4.0, 6.0]}" -X POST http://localhost:8501/v1/models/half_plus_three:predict
- 새로운 명령 프롬프트를 연다. (값을 입력해서 출력값 확인한다.)

(3) 고찰
- 예제 파일에서는 .pb 파일의 메타데이터들을 모두 매핑시켜져 있기 때문에 특별한 문제 없이 사용가능하였다. 하지만, 우리가 만든 딥러닝 파일은 .h5 확장자라서 .pb로 맞추는 것이 어렵다.
- 딥러닝 뿐만 아니라 .joblib 확장자를 사용하는 머신러닝 모델을 배포해야한다면 굉장히 처리해줘야할 문제들이 많아진다.
- 하지만, 모델 배포를 위한 컨테이너 활용 방안을 자세하게 조사할 수 있었다. 이러한 조건들을 반영해서 컨테이너를 만든다.
- 보통 대용량 연산이 가능한 모델은 서버 컴퓨터에만 놓고 연산 결과만 현장으로 보내야하는 경우가 대부분인데, 타겟 도메인으로 모델을 보내야하는 것을 고려해야한다면 이 방법에서 보완이 필요하다.
- 개인별 개발 환경을 serving 컨테이너가 만들어논 방식을 따라야 한다.