我正在尝试通过应用 grappler 来优化我的 tensorflow 模型服务性能,我正在开发 C++ tensorflow 服务服务。
AFAIK,我应该在 LoadSavedModel 之后做 grappler 的事情。但我不确定我到底应该做什么,我应该自己编写 op
优化还是只调用 API?
我在 Google 上搜索了很长一段时间,没有看到解决问题的帖子或代码片段。
您能给我任何建议或代码示例吗?
最佳答案
我通过搜索tensorflow代码库找到了答案。
tensorflow::grappler::GrapplerItem item;
item.fetch = std::vector<std::string>{output_node_};
item.graph = bundle_.meta_graph_def.graph_def();
tensorflow::RewriterConfig rw_cfg;
rw_cfg.add_optimizers("constfold");
rw_cfg.add_optimizers("layout");
auto new_graph_def = bundle_.meta_graph_def.mutable_graph_def();
tensorflow::grappler::MetaOptimizer meta_opt(nullptr, rw_cfg);
meta_opt.Optimize(nullptr, item, new_graph_def);
通过添加上面的代码行,我的 GraphDef-Serialized-Filesize 从 20MB 减少到 6MB,所以它确实进行了修剪。但我发现 session.Run() 比以前花费了更多的时间。
============
更新:
上面的用法是不正确的。默认设置使用 grappler 优化图形,并在加载保存的模型时运行。您可以通过查看LoadSavedModel
相关代码来了解正确的用法。
关于tensorflow - 如何使用 tensorflow 抓斗器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59630937/