Week3 - 2

이현지·2021년 7월 28일
0

KMU_summer_AI

목록 보기
7/8

AWS를 활용한 인공지능 모델 배포


AWS에서 알 수 없는 오류가 계속 발생하는 바람에 직접 실습을 해보지 못하고 동영상 강의만 들었던 것이 너무 아쉬웠다.. 용량이 부족해서 오류가 난 것이 원인인 것 같은데..ㅠ 아예 원격 SSH에 접속도 안되니까 필요없는 패키지 삭제도 못하고ㅜㅜㅜ 정말 속상했다.. 일단 이번주동안 계속 시도는 해봐야겠다

trained model을 저장하고 이걸 다시 불러오는 실습!


👩‍💻 준비과정!

  1. 우선 anaconda 가상 환경을 실행해야 한다.
    conda activate pytorch_p36

  2. trained model 저장
    git clone https://github.com/sackoh/kdt-ai-aws

    cd ./kdt-ai-aws/

  3. 필요한 패키지 추가로 설치
    pip install -r requirements.txt

👩‍💻 본격적인 실습

  1. Model training
    anaconda를 실행한 상태로,
    python train_ml.py
    이렇게 하면 모델이 학습 된다!

  2. De-serialization
    그 다음 python을 실행해주고

import joblib
model = joblib.load('model/ml_model.pkl')
vectorizer = joblib.load('model/ml_vectorizer.pkl')

text = '재미있는 영화입니다.'

model_input = vectorizer.transform(text)
print(model_input.asformat('array'))

model_output = model.predict_proba(model_input)
model_output = model_output.argmax(axis=1)
id2label = {0: 'negative', 1: 'positive'}
print(f'sentiment : {id2label[model_output[0]]}')

  1. Define inference
    👉 model handler 개발

1) handle()
: 요청 정보를 받아 적절한 응답을 반환

def handle(self, data):
    model_input = self.preprocess(data)
    model_output = self.inference(model_input)
    return self.postprocess(model_output)

2) initialize()
: 데이터 처리나 모델, configuration 등 초기화

def initialize(self, ):
    import joblib
    self.model = joblib.load('model/ml_model.pkl')
    self.vectorizer = joblib.load('model/ml_vectorizer.pkl')

3) preprocess()
: Raw input을 전처리 및 모델 입력 가능 형태로 변환

def preprocess(self, text):
    model_input = self._clean_text(text)
    
    model_input = self.vectorizer.transform(model_input)
    return model_input

4) inference()
: 입력된 값에 대한 예측/추론

def inference(self, model_input):
    model_output = self.model.predict_proba(model_input)
    return model_output

5) postprocess()
: 모델의 예측값을 response에 맞게 후처리 작업

def postprocess(self, model_output):
    predicted_probabilites = model_output.max(axis=1)
    predicted_ids = model_output.argmax(axis=1)
    predicted_labels = [self.id2label[id_] for id_ in predicted_ids]
    return predicted_labels, predicted_probabilites

--> model handler가 잘 개발되었는지 확인해보기
>>> python
>>> from model import MLModelHandler
>>> ml_handler = MLModelHandler()
>>> dir(ml_handler)
>>> ml_handler.model
>>> ml_handler.vectorizer
>>> text = ['정말 재미있는 영화입니다.', '정말 재미가 없습니다.']
>>> text
>>> result = ml_handler.handle(text)
>>> result

(['positive', 'negative'], array([0.9868..., 0.7958...]))
profile
열심히 살아보자구

0개의 댓글