4. 실습_Serialization&De-serialization

s2ul3·2022년 10월 14일
0
post-custom-banner

Model serving

  • 학습된 모델을 REST API 방식으로 배포하기 위해 학습된 모델의 Serialization과 웹 프레임워크를 통해 배포 준비 필요
  • 모델을 서빙할 때는 학습 시의 데이터 분포나 처리 방법과의 연속성 유지 필요
  • 모델을 배포하는 환경에 따라 다양한 Serving Framework를 고려하여 활용

과정

1. Model Training

  • Data Preprocessing
  • Model fitting
  • Evaluation

2. Serializing Model

  • Save trained model

3. Serving Model

  • Load trained model
  • Define inference
  • Deployment

0. 실습 환경 세팅

0-1. 실습 진행을 위해 실습 코드를 깃헙에서 복제

# template 소스코드 다운로드
git clone https://github.com/sackoh/kdt-ai-aws
cd ./kdt-ai-aws

# 필요 라이브러리 설치
pip install -r requirements.txt

0-2. workspace 이동

  • 파일탐색기 --> Open Folder --> 위에서 클론했던 깃허브 선택 --> OK 클릭

새로운 workspace가 생성되는 것을 확인할 수 있다.

이때 터미널 창을 열려고 하는데 다음과 같은 오류가 떴다.

  • 오류 : 터미널 프로세스를 시작하지 못했습니다.
    터미널을 실행하려고 했는데 갑자기 다음과 같은 오류 발생.

    --> 해결
    • 단축키 Ctrl + , --> 검색창에 default profile:windows를 검색

      --> settings.json에서 편집을 누르면 아래와 같은 코드가 나온다.

      terminal.integrated.cwd를 원하는 터미널 경로로 변경한다.
      --> 해결!!

1. 모델 훈련 (Model Training)

1-1. 먼저 가상환경을 만들어준다.

source activate pytorch

1-2. 그 후, 머신러닝 모델 학습시킨다.

python train_ml.py 코드를 작성하여 모델을 훈련시킨다.

깃허브로부터 데이터를 다운받고
다운 받은 데이터를 preprocessing, feature engineering 작업을 거친 후, 나이브 베이즈 모델에 훈련시키고 모델 성능을 평가했다.
그 후 학습한 모델을 아래 캡처처럼 저장하여 생성된 것을 확인할 수 있다.

2. Serializing model

모델을 디스크에 저장

  • joblib 패키지 사용
  • joblib.dump : 지정한 경로에 저장

3. Serving model

De-serialization

  • 저장된 모델을 불러와 특정 입력 값에 대한 예측 수행

과정

  1. 터미널 환경에서 python 또는 ipython, jupyter notebook 실행
  2. 아래 예제 코드 테스트하여 de-serialization 확인
  • 모델을 불러오고 불러온 모델을 바탕으로 '재미있는 영화입니다.' 가 긍정 리뷰인지 부정리뷰인지 확인해보자.


model_input 데이터를 앞서 불러온 model의 input으로 넣었을 때 그 결과는?

 model_output = model.predict_proba(model_input) # 결과값은 확률로 나옴
 
 >>> model_output
array([[0.02618814, 0.97381186]])
>>> model_output = model_output.argmax(axis = 1) # model_output의 결과 중 가장 큰 값의 index 추출
>>> model_output
array([1])
>>> id2label = {0 : 'negative', 1 : 'positive'} # id값 --> label로 변환해주는 dict

print('sentiment : {}'.format(id2label[model_output[0]]))
>>> sentiment : positive

--> 해당 리뷰는 긍정 리뷰로 판단했다.

profile
statistics & computer science
post-custom-banner

0개의 댓글