我使用Django來託管一個機器學習服務,該服務在使用參數查詢時返回預測結果。持久性庫而不是重複導入django
我的問題是,每次有新的請求進入時,它必須重新登錄import tensorflow
和所有不同的庫。這使它非常慢。 (Tensorflow在輸入時需要花費4秒的時間來發送一串消息)
有沒有辦法讓庫和模型持久化?
當前的體系結構(只有服務):
main_app/
manage.py
classifiers/
__init__.py
util.py
views.py
lstm_predictor.py
util.py:(!Tensorflow被重載每次新的請求到來時)
from sklearn.externals import joblib
import pandas as pd
import xgboost as xgb
from keras.models import load_model
from keras.preprocessing import sequence
from nltk.corpus import stopwords
import os,calendar,re
import logging
from lstm_predictor import lstm_predict
logger = logging.getLogger(__name__)
# Load models here to avoid reload every time
ensemble_final_layer = joblib.load("final_ensemble_layer.pkl")
text_processor = joblib.load("text_processor.pkl")
lstm = load_model("LSTM_2017-07-18_V0")
views.py
import json, pdb, os, hashlib
import logging
from django.core.serializers.json import DjangoJSONEncoder
from django.http.response import HttpResponse
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from classifiers.util import *
logger = logging.getLogger(__name__)
@csrf_exempt
def predict(request):
result = get_prediction(params)
result_hash = {"routing_prediction":result}
data = json.dumps(result_hash, cls = jangoJSONEncoder)
return HttpResponse(data, content_type="application/json")
有什麼地方可以將導入轉移到應用程序啓動時它只加載一次?
謝謝! :)
它只會加載一次,因爲模塊是單身人士,但是當您使用'uwsgi'或類似工具部署它時,您將運行多個進程,因此它將爲每個進程加載一次。 – Grimmy
@Grimmy你好,謝謝你的回覆!它沒有。查看日誌,每當有新的請求進入時,tensorflow就會重新加載。(當您第一次導入時,Tensorflow會給出一串消息) – Wboy
當您在'./manage.py shell'中多次導入'util'時是否也會發生這種情況?那會很奇怪。 – Grimmy