ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4주차 - Day 2. 클라우드를 활용한 머신러닝 모델 Serving API개발
    교육/프로그래머스 인공지능 데브코스 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
               },
               ...
    }

    댓글

Designed by Tistory.