AWS에서 알 수 없는 오류가 계속 발생하는 바람에 직접 실습을 해보지 못하고 동영상 강의만 들었던 것이 너무 아쉬웠다.. 용량이 부족해서 오류가 난 것이 원인인 것 같은데..ㅠ 아예 원격 SSH에 접속도 안되니까 필요없는 패키지 삭제도 못하고ㅜㅜㅜ 정말 속상했다.. 일단 이번주동안 계속 시도는 해봐야겠다
👩💻 준비과정!
우선 anaconda 가상 환경을 실행해야 한다.
conda activate pytorch_p36
trained model 저장
git clone https://github.com/sackoh/kdt-ai-aws
cd ./kdt-ai-aws/
필요한 패키지 추가로 설치
pip install -r requirements.txt
👩💻 본격적인 실습
Model training
anaconda를 실행한 상태로,
python train_ml.py
이렇게 하면 모델이 학습 된다!
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) 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...]))