Использование библиотеки Python ML для DJANGO APIView: загрузка модели при каждом запросе
Я пытаюсь использовать эту python ML библиотеку и превратить ее в APIView для моего проекта.
Хотя он работает должным образом, для получения ответа требуется около 20 секунд, в то время как ссылка huggingface выдает те же результаты за значительно меньшее время. Насколько я знаю, обнимающееся лицо работает на CPU, занимает ~20 секунд только при первой загрузке и затем только 1-2 секунды после этого.
Я думаю, что это может быть потому, что эта строка: kp_model = KeyPhraseTransformer() вызывается при каждом запросе, что не нужно, так как мне нужно инициировать объект только один раз.
Есть ли способ улучшить это?
services.py
from keyphrasetransformer import KeyPhraseTransformer
def extract_keyword(text):
kp_model = KeyPhraseTransformer()
keyphrases = kp_model.get_key_phrases(text)
return keyphrases
views.py
from .services import extract_keyword
class ExtractKeyphrase(APIView): def post(self, request, format=None): try: text = request.data["text"] keyphrases = extract_keyword(text) return JsonResponse(keyphrases, status=status.HTTP_200_OK, safe=False) except requests.exceptions.RequestException: Response("Request Failed", status=status.HTTP_400_BAD_REQUEST)
Решено использованием декоратора @lru_cache для части загрузки модели, которая занимала больше всего времени.
services.py
from functools import lru_cache
from keyphrasetransformer import KeyPhraseTransformer
@lru_cache(maxsize=2)
def load_model():
kp_model = KeyPhraseTransformer()
return kp_model
def extract_keyword(model, text):
keyphrases = model.get_key_phrases(text)
return keyphrases
views.py
from .services import load_model, extract_keyword
class ExtractKeyphrase(ApiAuthMixin, APIView):
def post(self, request):
try:
text = request.data["text"]
kp_model = load_model()
keyphrases = extract_keyword(kp_model, text)
return JsonResponse(keyphrases, status=status.HTTP_200_OK, safe=False)
except requests.exceptions.RequestException:
Response("Request Failed", status=status.HTTP_400_BAD_REQUEST)