교육/프로그래머스 인공지능 데브코스

4주차 - Day 2. 클라우드를 활용한 머신러닝 모델 Serving API개발

zzangyeah 2021. 5. 13. 13:27
728x90

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
           },
           ...
}