如何使用 django 保持 tensorflow 会话在内存中运行
Posted
技术标签:
【中文标题】如何使用 django 保持 tensorflow 会话在内存中运行【英文标题】:How to keep a tensorflow session running in memory with django 【发布时间】:2019-05-06 18:59:57 【问题描述】:我有一个使用 tensorflow 构建并与 Django 项目集成的对象检测模型。当前发生的情况是,每当请求到达 Django API 时,都会创建一个 tf 会话,并在检测完成后关闭。是否可以使用所需的推理图启动 Django 服务器和 tensorflow 会话以减少对象检测时间?
【问题讨论】:
【参考方案1】:正如我对上一个解决方案建议的评论,图形/会话很久以前就不再是最佳解决方案了。 我建议你开始使用 mlops,并尽可能多地预加载所有内容,这样当你调用 api 时,django 只负责生成预测。 我把你留在这里我的项目,我有几个 ML/Django/Tflite
如果您有任何疑问,请随时问我。
链接到我的项目:https://github.com/Nouvellie/django-mlops-docker/blob/main/src/main/apps/mlops/utils/model_loader.py
【讨论】:
【参考方案2】:解决方案包括抽象逻辑以使用模块中的会话运行推理。在这个模块中,会话和图形将被定义为全局变量,并且将被您的视图或其他任何东西透明地访问,使用像函数run_inference
这样的接口。
如果您需要更精细地控制图形和/或会话的生命周期,您可以考虑添加 reload_graph
等函数...或在您的模块中实现它,例如使用专用于管理生命周期的类张量流对象和运行推理。
这在我看来是最好的解决方案。通过这种方式,您还可以拥有更强大的工作流程,并拥有更多控制权,以防您想要使用多线程并希望在推理代码的运行方式方面更加安全。
【讨论】:
这不是最好的解决方案,很久以前不再需要图形和会话,甚至全局变量。如果您遵守 MLOPS 实践,最好保留尽可能多的预加载和后期处理,然后仅在请求到达您的 api 时生成推理。 github.com/Nouvellie/django-mlops-docker/blob/main/src/main/… 尝试了很多方法,会话/图表、tf 和 tflite,到目前为止,最好的是 tflite。这是最高效的,使用 gunicorn/nginx 可以轻松进行并行调用,没有任何问题以上是关于如何使用 django 保持 tensorflow 会话在内存中运行的主要内容,如果未能解决你的问题,请参考以下文章
DRL 教程 | 如何保持运动小车上的旗杆屹立不倒?TensorFlow利用A3C算法训练智能体玩CartPole游戏
人工智能深度学习:TensorFlow2.0如何保持和读取模型?
Django - 如何在不刷新页面的情况下保持在同一页面上?