[Django] - ML Flow 배포

Wooney98·2022년 12월 16일
3

PlayData_BackEnd

목록 보기
19/33

머신러닝 학습모델

장고 배포(deploy) 하기

플라스크 배포(deploy) 하기

  • 목표 : iris셋을 이용하여 다중분류 모델을 구축 후, 블로그에 배포

jupyter Lab(local) 환경세팅

참고 ) https://wonhwa.tistory.com/50

  • jupyter lab은 가상환경이 아닌 창에서 설치 시 모든 가상환경에서 사용 가능 ->
  • Jupyter lab 설치
    pip install jupyterlab

  • 가상환경에서 설치
    (해당 프로젝트 가상환경 폴더)/scripts activate.bat
    pip install ipykernel

  • ipykernel에 가상환경 이름 만들기
    python -m ipykernel install --user --name 가상환경이름 --display-name 가상환경_표시이름

  • 실행
    jupyter lab

    실시간으로 디렉토리가 업데이트된다.

  • 필요한 라이브러리 설치

  • numpy , pandas

  • scikit-learn

  • matploblib

  • seaborn

ML 모델을 pickle file로 저장

.pkl 파일로 저장된 모델파일은 Django 프로젝트에서 static 파일에 넣으면된다. ( ../static/하위폴더 )

ml_deploy 앱

  • django 앱 생성
python manage.py startapp ml_flow
  • 앱 등록(settings.py
  • URLConf 설정
    • ml_deploy
    • ml_deploy/predict/
  • view 정의
    • IrisHome (CBV형)
    • irisPredict (FBV형)
  • navbar 링크 설정
  • 랜더링 html 템플릿 기본 작성
    • iris_home.html
    • iris_predict.html

  • views.py의 irisPredict메소드 정의
def irisPredict(request):
    # 원래 if~else로 구분지어야 하지만, 지금은 다양한 페이지로 생성하고 있기때문에 
    #if로만 걸러내어 Post인지를 따진다.
    #Post가 request 일때 
    if request.method == 'POST':
        form = request.POST

        print(form)
        print(len(form))
        print(form['a'].isdigit())
        
        if(len(form) > 4 and form['a'].isdigit() and form['b'].isdigit() 
        				and form['c'].isdigit() and form['d'].isdigit() ):
            model = pickle.load(open('static/models/iris_model_svc.pkl', 'rb'))

            # 웹에서 입력되는 숫자값은 String 타입이여서 실제 float타입으로 형변환을 함.
            data1 = float(form['a'])
            data2 = float(form['b'])
            data3 = float(form['c'])
            data4 = float(form['d'])
            arr = np.array([[data1,data2,data3,data4]])
            # 해당 모델을 test_split 후 x_test의 shape을 확인해보면 
            # (37,4)로 2차원임을 확인할수 있다. 그래서 중괄호로 2번 감싸야한다.

            pred = model.predict(arr)
            context={'pred_result':pred}
        else:
            context={'warning':"값을 모두 숫자로 입력하세요."}

        
    return render(request,'ml_deploy/iris_predict.html',context)
profile
👨Education Computer Engineering 🎓Expected Graduation: February 2023 📞Contact info thstjddn77@gmail.com

0개의 댓글