Week3 - 3

6692 단어 TILTIL

Flask 기반 감성분석 API 개발


전반적으로 handler가 어떻게 작동하는지는 이해했으나, 각 코드들이 정확히 어떤 역할을 하는지까지는 이해하지 못해서 아쉬웠다.. 매 주차마다 수업의 난이도가 가파르게 상승하는 느낌이 든다ㅠㅠ 수업을 이해하기 위해서는 갈수록 많은 노력이 필요할 것이라는 생각이 들었고, 그래서 더 노력해야겠다는 생각이 들었다..!!

+) 세션에서 이해의 영역이 아니라는 말씀을 해주셔서.... 마음이 한결 편안했다ㅎㅎ AWS를 만져본 것에 큰 의의를 두자!


🧚 DLModelHandler 개발해보기

import torch

def initialize(self, ):
    from transformers import AutoTokenizer, AutoModelForSequenceClassification
    self.model_name_or_path = 'sackoh/bert-base-multilingual-cased-nsmc'
    self.tokenizer = AutoTokenizer.from_pretrained(self.model_name_or_path)
    self.model = AutoModelForSequenceClassification.from_pretrained(self.model_name_or_path)
    self.model.to('cpu')
def preprocess(self, text):
    model_input = self._clean_text(text)
    model_input = self.tokenizer(text, return_tensors='pt', padding=True)
    return model_input
def inference(self, model_input):
    with torch.no_grad():
        model_output = self.model(**model_input)[0].cpu()
        model_output = 1.0/ (1.0 + torch.exp(-model_output))
        model_output = model_output.numpy().astype('float')
    return model_output

postprocess랑 handle은 ML 모델에서 그대로 복사해와도 된다!

--> 원하는 대로 동작하는지 unittest
terminal을 열어서,
conda activate pytorch_p36
python -m unittest -v test_model_handler.py


🧚 Flask로 API 개발 & 배포
app.py 에서,
ml_handler = MLModelHandler()
dl_handler = DLModelHandler()
추가해주기
그리고, predict() 에서

#model inference

if do_fast:
    predictions = ml_handler.handle(text)
else:
    predictions = dl_handler.handle(text)

추가해주기

🧚 실제 배포하기!
terminal에서 app.py 실행해주기
python app.py

  • host: 퍼블릭 IP 주소
  • port: 5000

로컬 노트북에서 터미널 실행
cd kdt
curl -d '{"text": ["영화 오랜만에 봤는데 괜찮은 영화였어", "정말 지루했어"], "use_fast": false}' \
-H "Content-Type: application/json" \ -X POST \
http://"퍼블릭 아이피주소":500/predict

python3
import requests
url = "http://"퍼블릭 아이피주소":500/predict"
data = {"text": ["영화 오랜만에 봤는데 정말 재미있었어", "정말 지루했어"], "use_fast": False}'
response = request.post(url, json=data)
print(response.content)

좋은 웹페이지 즐겨찾기