use*_*632 3 django machine-learning redis celery
我有一个Word2Vec模型(机器学习模型之一),可以通过文件名获得这个预先训练的模型:
model = Word2Vec.load(fname)
Run Code Online (Sandbox Code Playgroud)
所以,我可以通过使用这个模型得到一些预测:
预测= model.predict(X)
我正在尝试做的是从用户那里获取请求(包括查询词)并将此数据查询到我预先训练的模型并获得预测,以便服务器可以使用此预测数据发送响应.每次用户发送查询时都应该进行此过程,因此这个预先训练的模型应始终在内存中.
为了实现这一点,我想我必须使用Redis,Celery有点像,但据我所知,Celery与DjangoWeb应用程序异步工作,所以它不适合我想做的事情......
如何在我的Django应用程序中实现此功能?
谢谢.
你实际上并不需要Redis或芹菜.
在我使用Django发布解决方案之前,我应该提一下,如果您只需要一个用于ML项目的Web界面,也就是说,您不需要Django的花哨ORM,admin等,那么您应该使用Flask.它非常适合您的用例.
使用Flask将训练好的模型存储在内存中非常容易:
# ...
# your Flask application code
# ...
# ...
if __name__ == '__main__':
model = Word2Vec.load(fname)
app.run()
Run Code Online (Sandbox Code Playgroud)
如果您有兴趣,可以在这里找到完整的示例.
您可以使用Django的缓存框架来存储您的模型.首先,激活本地内存缓存后端.说明在这里.
现在,您需要将模型存储在缓存中.
from django.core.cache import cache
model_cache_key = 'model_cache'
# this key is used to `set` and `get`
# your trained model from the cache
model = cache.get(model_cache_key) # get model from cache
if model is None:
# your model isn't in the cache
# so `set` it
model = Word2Vec.load(fname) # load model
cache.set(model_cache_key, model, None) # save in the cache
# in above line, None is the timeout parameter. It means cache forever
# now predict
prediction = model.predict(...)
Run Code Online (Sandbox Code Playgroud)
您可以在视图中保留上述代码,但我宁愿为此创建单独的文件,然后在您的视图中导入此文件.
您可以在此博客上找到完整的示例.
| 归档时间: |
|
| 查看次数: |
4134 次 |
| 最近记录: |