首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中,如何在django或flask等rest服务中只加载一次ML模型?

在python中,如何在django或flask等rest服务中只加载一次ML模型?
EN

Stack Overflow用户
提问于 2018-07-20 03:01:34
回答 2查看 2.6K关注 0票数 4

我有一个保存在pkl (pickel文件)中的ML模型,加载这个模型并使用它进行预测是没有问题的,即使我有一个rest服务来公开它,唯一的问题是我在每个请求中加载模型,类似于:

https://www.analyticsvidhya.com/blog/2017/09/machine-learning-models-as-apis-using-flask/

我真的希望我的模型只加载一次,就像一个全局变量,每个请求都使用这个变量,而不需要每次请求都加载模型

有可能吗?

EN

回答 2

Stack Overflow用户

发布于 2018-07-20 05:34:27

可以在settings.py中指定模型变量。每当服务器启动/重新启动时,django都会全局存储模型变量。可以像这样访问它

from django.conf import settings 
print settings.my_ml_model_variable
票数 7
EN

Stack Overflow用户

发布于 2018-08-02 06:34:37

基于Kaushal的评论,我使用django rest框架解决了我的问题,如下所示:

首先,我将模型另存为:

> joblib.dump(<your scikit model here> , <"yourfilename.pkl">, compress
> = 1)

一旦我用pkl扩展名保存了我的模型,我需要在settings.py文件中创建一个变量(这个文件是由django自动创建的)

YOURMODEL = joblib.load(<"yourfilename.pkl">) 

django进程在您启动服务器时调用此文件,因此它只被调用一次

现在我们只需要在任何我们想要的地方调用我们的模型,通常是在一个views.py文件中,因为我们使用的是django和/或django-rest-framework

myModel = getattr(settings, 'YOURMODEL', 'the_default_value')

res = myModel.predict_proba(s).tolist()

rest服务的一个简单示例:

from django.conf import settings 

class myClass(APIView):
    permission_classes = (permissions.AllowAny,)

    '''Httpverb post method'''
    def post(self, request,format=None):

        myModel = getattr(settings, '../mymodel.pkl', 'the_default_value')
        data = preparePostData(request.data)
        res = myModel.predict_proba(data).tolist()
        message = prepareMessage(res)
        return Response(message, status=status.HTTP_200_OK)

这里,preparePostData和prepareMessage是我开发函数,用于为我的模型和响应准备对象

问候

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51430094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档