4주차 - Day 2. 클라우드를 활용한 머신러닝 모델 Serving API개발
1. AWS를 활용한 인공지능 모델 배포1 - 클라우드 환경에서의 인공지능 모델 서빙 API 개발
1.클라우드 기초
과거 : 인터넷 환경에서 서비스를 제공하기 위해 서비스 제공자는 서비스 호스팅에 필요한 모든 것(데이터 센터, 서버, 보안, OS 등)을 직접 구축
->자원, 인력 비용이 크고 변화에 능동적으로 대응하기 어려움
->IDC(Internet Data Center)등장, 하지만 IDC 서버 임대는 계약을 통해 일정기간 임대를 하는 유연성이 떨어지는 구조
->인터넷 사용자 증가+다양한 서비스 제공으로 필요한 때에 필요한 만큼 서버를 증설하기 원하는 On Demand 수요 증가
현재 : 클라우드 컴퓨팅 등장
클라우드 컴퓨팅이란 인터넷 기반 컴퓨팅의 일종으로 언제 어디서나 필요한 만큼 컴퓨팅 자원을 필요한 시간만큼 인터넷을 통하여 활용할 수 있는 컴퓨팅 방식
4차 산업혁명 시대에 빅데이터를 위한 자원과 AI 개발을 위한 환경 마련
클라우드 컴퓨팅 특징 : 속도, 접근성, 확장성, 생산성, 보안, 안전성, 측정가능성 등
클라우드 컴퓨팅 운용 모델
1. 퍼블릭 : 서비스 유지를 위한 모든 인프라와 IT 기술을 클라우드에서 사용
2. 프라이빗 : 고객이 자체 데이터 센터에서 직접 클라우드 서비스를 구축하는 형태
3. 하이브리드 : 고객의 핵심 시스템은 내부에 두면서도 외부의 클라우드를 활용하는 형태, 퍼블릭의 경제성+프라이빗의 보안성
클라우드 서비스 제공 모델
On-Premises : A-Z까지 다 내가 관리, 구축
IaaS : 인프라 부분만 클라우드에서 사용, 나머지는 직접 관리
Paas : +플랫폼 부분도 클라우드에서 사용, 나머지는 직접 관리
SaaS : 모든 부분을 제공받음 ex)인터넷만 제공되면 MS Office 사용가능
클라우드 서비스 제공 사업자 : AWS, GCP, Azure, NCP 등
2. AWS를 활용한 인공지능 모델 배포2 - 실습 : AWS & 실습 환경 세팅
오늘은 뭘해도 안될날인듯 환경세팅만 6시간이상하고 글 다 써놨는데 다 날아갔다ㅎ...
환경세팅 시 기억해둘것
1. aws에서 ec2로 들어가서 ami검색하기 window말고 ubuntu로 깔것
2. aws에서 상태검사1/2 인스턴스 연결성 어쩌구하면 재부팅이나 중지/시작 할것 종료XXXXX종료하면 인스턴스가 삭제된다 그래서 다시 만들었음ㅎ..
3. putty에서 들어갈 때는 ubuntu@탄력적 id 로 들어갈 것
4. vscode는 config수정시 HostName에 인스턴스/ssh연결 예제에 있는 주소들고올것
3. AWS를 활용한 인공지능 모델 배포3 -
글이 날아가서 멘탈이 두번 터진 관계로 나중에 작성할 것ㅎ..
4. AWS를 활용한 인공지능 모델 배포4
아래 코드는 실행할때마다 입력 후 실행해줄것
conda activate pytorch_p36
python
import torch
torch.__version__
exit()
#De-serialization
import joblib
model = joblib.load('model/ml_model.pkl') #모델 불러오기
vectorizer=joblib.load('model/ml_vectorizer.pkl') #vectorizer 불러오기
#vectorizer?
#지금 학습하려는 모델은 nlp 한글은 수치형으로 표현하기 위한 방법이 필요
#단어의 음절단위로 쪼갠 후 문장내에서 음절이 몇 번 반복, 출현했는지 카운팅해서 벡터형태로 표현해주는 전처리
#text에 영화 리뷰가 들어오면 이 영화가 재미있는지 아닌지 예측하는 모델
text="재미있는 영화입니다."
model_input=vectorizer.transform(text) #모델이 학습할 수 있는 형태로 전처리
model_output=model.predict_proba(model_input) #모델 학습
#predict_proba : 예측을 확률로 나타냄 dir(model)을 하면 다른 함수들도 볼 수 있음
model_output
#>>>array([[a,b]]) a : 0에 속할 확률 b : 1에 속할 확률
#label을 통해서 사람이 이해할 수 있는 형태로 후처리
#argmax()를 통해 더 큰 값이 있는 인덱스를 뽑고 인덱스 자체가 label이 됨
model_output=model_output.argmax(axis=1)
model_output
#>>>array([1])
#후처리해주는 dictionary
id2label={0:'negative',1:'positive'}
print(f'sentiment : {id2label[model_output[0]]}')
#>>>sentiment : positive
모델을 학습하고 저장했던 방식 그대로 불러와야하고 학습된 모델 전처리방식, 후처리방식 그대로 활용
5. AWS를 활용한 인공지능 모델 배포 5 - 실습 : Inference를 위한 model handler 개발
모델을 가지고 입력된 데이터에 대해서 예측을 수행하는 handler를 실습
Serving Model - Define inference : 전처리를 어떻게 하고 최종적으로 어떤 형태로 저장할건지
#skeleton of model handler to serve model의 기본 구조
#BaseHandler에서 상속받을 건 상속 받고
class ModelHandler(BaseHandler):
#초기화하면서 필요한 것들 초기화
def __init__(self){:
pass
#데이터 처리, 모델, configuration 등 초기화
def initialize(self,**kwargs){:
pass
#입력된 값에 대해서 전처리수행
def preprocess(self,data){:
pass
#모델에 대해서 추론
def inference(self,data){:
pass
#후처리
def postprocess(self,data){:
pass
#요청 정보를 받아 적잘한 응답을 반환
#1.정의된 양식으로 입력? 2.전처리 3.모델추론 4.후처리 5.결과반환
def handle(self,data){:
pass
6. AWS를 활용한 인공지능 모델 배포 5 - 실습 : Flask 기반 감성분석 API개발
네이버 영화리뷰 감성분석 개요
나이브베이지안 모델+bert모델 0 : 부정 1: 긍정
#요청
#[POST] /predict
json={
"text":["review1","review2",...,], #리뷰 리스트
"do_fast":true or flase #true : 머신러닝모델 / false : 딥러닝모델
}
#반환
#response
{"idx0" : {
"text":"review1",
"label" : "positive" or "negative",
"confidnece" : float
},
...
}