Docker로 훈련된 모델을 서빙하는 방법에 대해서 정리합니다.
모델 서빙서버 생성하기
1. S3 버킷에서 모델 파일 다운 받기
AWS에 접속한 상태에서 아래의 코드를 입력하면 로컬에 다운받을 수 있다.
1 | aws s3 cp s3://'버킷 이름'/'파일 이름' '다운받을 로컬 디렉토리 경로' |
2. tar 묶음 해제하기
모델을 다운받은 디렉토리로 이동하여 아래의 코드를 입력하면 간단하게 해제할 수 있다.
1 | tar xvf '파일 이름.tar' |
3.도커에서 사용할 이미지 다운받기
서빙서버를 생성하기 위해서는 아래의 이미지를 다운받아야 한다.
1 | docker pull tensorflow/serving |
위 이미지는 텐서플로우측에서 서빙을 위해 제공하는 이미지이다. 이 이미지를 사용하면 간단하게 서빙서버를 만들 수 있다.
4. 도커에 서빙서버 생성하기
커맨드라인에서 아래의 코드를 입력하여 다운받은 모델을 서빙할 서버를 생성한다.
1 | docker run -p 8501:8501 --mount type=bind,source=$PWD/mnist_convNet,target=/models/mnist -e MODEL_NAME=mnist -td tensorflow/serving |
이제 모델 서빙서버가 만들어졌다. 아래의 코드를 입력하면 현재 서빙서버가 작동되고 있음을 확인할 수 있다.
1 | docker ps # 현재 실행중인 컨테이너만 보여준다. |
예제로 모델 서빙서버 테스트하기
이제 서빙서버에 있는 모델이 잘 작동하는지 확인해보자. 커맨드라인에서 Python을 실행한 후 아래의 라이브러리들을 다운로드한다.
1 | import json |
위 모델은 MNIST 데이터를 학습하였다. 따라서 테스트는 텐서플로우 측에서 제공하는 MNIST 데이터셋으로 진행할 것이다. 아래의 코들르 입력하여 MNIST 데이터들을 가져오자.
1 | (train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data() |
테스트셋은 10000개나 들어있다. 따라서 시각적으로 확인해보기 위해 앞의 2개의 이미지만 분리하여 예측해볼 것이다. 아래의 코드를 입력하여 이미지 2개를 분리하자.
1 | temp = test_images[0:2,:,:,:] |
이제 이미지 2개인 temp
를 서빙서버에 보내고 예측값을 받아오자.
1 | address = 'http://localhost:8501/v1/models/mnist:predict' |
우리가 보낸 이미지의 예측값이 predictions
에 저장되었다. 아래의 코드를 입력하면 값들을 확인할 수 있다.
1 | np.argmax(predictions[0]) |
모델은 첫 번째 이미지를 7이라고 예측했고, 두 번째 이미지를 2라고 예측하였다. 아까 미리 저장해두었던 정답을 확인해보자.
1 | answer |
모델의 예측이 정확히 맞았다.