글 작성자: 개발섭

 

 

장고에서 머신러닝을 돌리는 게 좋은 이유

장고 웹프레임워크를 사용하는 것에는 여러가지 이유가 있겠으나 장고의 메인 언어인 Python을 쓴다는 점은 엄청난 메리트가 있습니다. 왜냐하면 Python에는 ML,AI와 관련된 여러가지 툴이 있기때문입니다.

그래서 실제로 프로젝트를 진행할때 장고안에 머신러닝 모델을 직접 이식하는 방식을 통해서 굳이 따로 서버를 두는 것이 아니라, 실제로 장고 서버가 돌아가는 와중에 머신러닝이나 신경망을 통한 모델이 바로 제가 넣은 값을 통해서 바로 예측값을 출력해낸다면 저희는 두가지의 일을 동시에 하지 않아도 되죠.( 예를 들면 뭐 머신러닝 서버를 또 따로 만든다던가..)

 

일단 마주쳤던 문제점

신경망이든 머신러닝이든간에 일단 모델을 불러서 값을 넣은 후에 그것을 예측값을 받는 과정은 단순하게 신경망을 통해서 예측하는 프로젝트에서는 크게 문제가 되지 않습니다. 문제는 다음과 같은 웹서버에서 모델을 불러서 값을 넣은 후에 그것을 예측값을 받는 과정은 단순하게 신경망을 통해서 예측하는 과정은 시간 소비가 엄청나다는 게 문제입니다.

 

웹서버에서 한 버튼을 클릭했는데, 5초나 걸리면 솔직히 그게 아무리 정확한 지표라한들... 사용자 입장에서는 불편함을 느낄 수 밖에 없습니다. (적어도 저는 그렇게 생각합니다.)

그럼 여기서 시간을 더 줄일 수 있는 방법은 뭘까요?

 

머신러닝의 돌아가는 과정은

  1. 모델을 불러서
  2. 값을 넣은 후에
  3. 그것을 예측값을 받는 과정

이라고 축약할 수 있는데 실제로 2,3은 머신러닝의 구조를 바꾸지 않는 이상 시간을 줄일 수 없습니다.

그러면 1. 모델을 불러오는 과정의 시간을 줄이면 되지 않을까요?

 

그럼 시도 해봅시다.

장고에서는 모델 단위를

python manage.py startapp ~~~ 와 같은 APP 범주로 관리를 합니다. 이때 이 파일에서 생성되는 파일중 하나인

app.py를 참조합시다. 실제로 app.py는 장고에서는 크게 관심을 가지지 않는 파트로 타 장고 튜토리얼에서 크게 작성하는 코드가 없던걸로 기억합니다.

from django.apps import AppConfig
from deep.model import DeepModel

class ShopConfig(AppConfig):
    name = 'shop'
    model = DeepModel()

하지만 APP.py에 다음과 같이 작성을 하면, 이 모델을 장고 실행시 한번만 불러오게 됩니다.

이게 어떤 의미를 가지는지 다음과 같은 예제를 참고 해보겠습니다.

 

  • 적용전

    적용전에는 API 호출 한번당 딥러닝 모델 혹은 머신러닝 Model을 직접 불러옵니다.

    ㄴ API 호출 한번 당의 속도가 정말 오래 걸렸습니다.

 model = DeepModel()
        path_audio = request.FILES['alarm']['file']
        tags = model.extract_info(path_audio, mode='tag', topN=5)
        print(tags)

 

  • 적용후

    적용 후에는 API 호출에 상관없이 이미 올라가있는 딥러닝 모델을 그대로 받아서 사용합니다.

    ㄴ 모델을 불러오는 속도가 감소되어서 적용 전에 비해서 훨씬 빠르게 추출됩니다.

   data = request.FILES['alarm']
        k = io.BytesIO(data.file.read())
        feat, tag = ShopConfig.model.extract_info(k, mode='both', topN=5)

 

이런 방식을 또 응용 할 수 있는 것들?

실제로 app.py를 사용하는 방식은 같은 것을 여러번 불러오는 상황을 막기에는 최적의 환경을 가집니다. 딥러닝이나 머신러닝과 같이 모델을 불러오는데 그리고 초기화하는데에 시간이 많이 걸리는 코드처럼. Python 내부의 로직이 복잡하여 오래걸리거나 한번 초기화 해둔 파일을 계속 사용하고 싶은 경우 app.py를 사용하면 될 것 같습니다.

참조:

https://medium.com/saarthi-ai/deploying-a-machine-learning-model-using-django-part-1-6c7de05c8d7

 

Deploying a Machine Learning Model Using Django: Part-1

Create your own Django REST application to deploy Machine Learning models in simple steps.

medium.com