私は、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'などを使用して展開するといくつかのプロセスが実行されるため、プロセスごとに1回ロードされます。 – Grimmy
@Grimmyこんにちは、あなたの返信ありがとう!それはdoesntです。ログを見ると、新しいリクエストが来るたびにテンソルフローがリロードされます。(Tensorflowは最初にインポートしたときにたくさんのメッセージを表示します) – Wboy
'./manage.py shell'で' util'を何度もインポートすると、これも起こりますか?それは変だ。 – Grimmy