Как запустить ML-модель с помощью Django на Live-сервере
У меня есть Django проект, который использует публичную ML модель ("deepset/roberta-base-squad2") для создания некоторых прогнозов. Сервер получает запрос с параметрами, которые вызывают функцию очереди. Эта функция и делает предсказания. Но это работает только на моем локальном сервере. Как только я переношу проект на живой сервер, модель начинает работать, но не завершается. Я пытался настроить проект с помощью различных руководств, чтобы избежать загрузки ML-модели при каждом запросе, но это не решает проблему. Я не знаю, что еще можно сделать, пожалуйста. Если нужна какая-то дополнительная информация, я могу ее предоставить.
Вот моя установка, как она есть сейчас:
views.py
class BotView(GenericAPIView):
serializer_class = BotSerializer
def post(self, request, *args, **kwargs):
try:
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
print(serializer.data)
return Response(data=serializer.data, status=status.HTTP_200_OK)
except Exception as e:
print(str(e))
return Response(data=str(e), status=status.HTTP_400_BAD_REQUEST)
serializers.py
from .tasks import upload_to_ai
class BotSerializer(serializers.Serializer):
questions = serializers.ListField(required=True, write_only=True)
user_info = serializers.CharField(required=True, write_only=True)
merchant = serializers.CharField(required=True, write_only=True)
user_id = serializers.IntegerField(required=True, write_only=True)
def create(self, validated_data):
# call ai and run async
upload_to_ai.delay(validated_data['questions'], validated_data['user_info'], validated_data['merchant'], validated_data['user_id'])
return "successful"
tasks.py
from bot.apps import BotConfig
from model.QA_Model import predict
@shared_task()
def upload_to_ai(questions:list, user_info:str, merchant:str, user_id:int):
model_predictions = predict(questions, BotConfig.MODEL, user_info)
print(model_predictions)
return
apps.py
class BotConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'bot'
reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2", top_k=3, use_gpu=False)
#model pipeline
MODEL = Pipeline()
MODEL.add_node(component= reader, name="Reader", inputs=["Query"])
QA_models.py
from haystack import Document
import pandas as pd
def predict(query:list, model, context):
'''
This function predicts the answer to question passed as query
Arguments:
query: This is/are the question you intend to ask
model: This is the model for the prediction
context: This is the data from which the model will find it's answers
'''
result = model.run_batch(queries=query,
documents=[Document(content=context)])
response = convert_to_dict(result['answers'], query)
return response
Каждый раз, когда я отправляю запрос, ML-модель начинает работать, как показано на изображении, но никогда не переходит за 0%.
Я решил эту проблему. Итак, все это время я запускал ML-модель в фоновом процессе с помощью Celery, но она работала, когда я запускал ее в основном потоке. Я пока не знаю, почему она не запускается в фоновом процессе.