首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在没有完整的tensorflow python库的情况下只使用tensorflow.saved_model.load()进行推理

有没有办法在没有完整的tensorflow python库的情况下只使用tensorflow.saved_model.load()进行推理
EN

Stack Overflow用户
提问于 2021-06-29 04:19:39
回答 1查看 137关注 0票数 0

我需要做推论。没有训练,只是简单的推断。

在python3中,现在我的非常基本的tensorflow“纯推理”代码正在执行以下操作:

代码语言:javascript
复制
import tensorflow as tf  # This is a 600MB library (at version 2.5)
from PIL import Image
import io

model = tf.saved_model.load('models/some-version')
infer = model.signatures['serving_default']
image = Image.open('someFile.jpg')
bytes = io.BytesIO()
image.save(bytes, format='JPEG')
inputs = [bytes.getvalue()]
predictions = infer(inputs=tf.constant(inputs))

这可以很好地工作。但是我的问题是:这个tensorflow python3库太大了!现在大约600MB。每当一个新的tensorflow版本发布时,它就变得越来越大!使用tensorflow 2.3 (即使用swig而不是pybind)时,库大小约为300MB。然后它达到了400,500,最近是600MB (2.5版)!

当我使用golang绑定(而不是python)执行相同的推理调用时,我所需要的只是libtensorflow.so.2 (275MB)和libtensorflow_framework.so.2 (25MB)文件,它们比当前600MB的文件夹(/usr/local/lib/python3.9/site-packages/tensorflow).小得多

所以我真正的问题是:在python3中,我可以使用tensorflow进行推理而不会那么臃肿吗?

以前有一个contrib.predictor模块,但在TensorFlow1.15版本中就有了,tensorflow V2不再提供该模块。当然,tensorflow_lite总是存在的,但它们是不同的。在golang中,我可以使用“真正的”TF绑定,而不会如此臃肿(我的意思是,它仍然是275MB+25MB,但它仍然不到600MB,而且它不会在每个新版本中都保持增长)。

有没有人能够在使用python3中的TensorFlow2.5只做推理(不训练)的同时控制库的大小?

如果python中有任何"contrib“模块可以做到这一点,我会很乐意使用它。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-07-01 23:39:49

最后,我围绕C绑定构建了一个简单的python包装器,只有两个简单的函数:第一个函数使用TF_LoadSessionFromSavedModel()“加载”模型,第二个函数使用TF_SessionRun()“推断”我的输入。结果是更快的启动时间(使用python中的C绑定“加载”模型只需要76ms,而使用完整的tensorflow python模块加载模型需要5秒以上的时间,我猜是因为执行了更多的“检查”?奇怪,但我会接受它,因为它是一个改进)。由此产生的docker图像大小是300MB,而不是几乎1 GB。因此,这对我来说是有效的,目前。我只是有点失望,tensorflow项目似乎并不关心磁盘空间。其他一切看起来都很好!

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

https://stackoverflow.com/questions/68169561

复制
相关文章

相似问题

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