-
Notifications
You must be signed in to change notification settings - Fork 5.9k
add dfg graphviz pass #11211
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add dfg graphviz pass #11211
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| /* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. | ||
|
|
||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||
| you may not use this file except in compliance with the License. | ||
| You may obtain a copy of the License at | ||
|
|
||
| http://www.apache.org/licenses/LICENSE-2.0 | ||
|
|
||
| Unless required by applicable law or agreed to in writing, software | ||
| distributed under the License is distributed on an "AS IS" BASIS, | ||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| See the License for the specific language governing permissions and | ||
| limitations under the License. */ | ||
|
|
||
| /* | ||
| * This file create an DFG_GraphvizDrawPass which helps to draw a data flow | ||
| * graph's structure using graphviz. | ||
| */ | ||
|
|
||
| #pragma once | ||
|
|
||
| #include <fstream> | ||
| #include <string> | ||
| #include "paddle/fluid/inference/analysis/pass.h" | ||
|
|
||
| namespace paddle { | ||
| namespace inference { | ||
| namespace analysis { | ||
|
|
||
| /* | ||
| * Output a dot file and write to some place. | ||
| */ | ||
| class DFG_GraphvizDrawPass : public DataFlowGraphPass { | ||
| public: | ||
| DFG_GraphvizDrawPass(const std::string& dir, const std::string& id) | ||
| : dir_(dir), id_(id) {} | ||
|
|
||
| bool Initialize() override { return Pass::Initialize(); } | ||
| void Run(DataFlowGraph* graph) override { | ||
| auto content = Draw(graph); | ||
| std::ofstream file(GenDotPath()); | ||
| file.write(content.c_str(), content.size()); | ||
| file.close(); | ||
| LOG(INFO) << "draw dot to " << GenDotPath(); | ||
| } | ||
|
|
||
| bool Finalize() override { return Pass::Finalize(); } | ||
|
|
||
| Pass* CreatePrinterPass(std::ostream& os, | ||
| const std::string& banner) const override { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 请问这个函数的功能是什么呢,参数banner是指?我看单侧里也没有用到这个函数。
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
| return nullptr; | ||
| } | ||
|
|
||
| private: | ||
| // Path of the dot file to output. | ||
| std::string GenDotPath() const { | ||
| return dir_ + "/" + "graph_" + id_ + ".dot"; | ||
| } | ||
|
|
||
| std::string Draw(DataFlowGraph* graph) { return graph->DotString(); } | ||
|
|
||
| std::string dir_; | ||
| std::string id_; | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 请多加点注释。dir是目录名,id是文件名?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 下个pr再加吧 |
||
| }; | ||
|
|
||
| } // namespace analysis | ||
| } // namespace inference | ||
| } // namespace paddle | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| /* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. | ||
|
|
||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||
| you may not use this file except in compliance with the License. | ||
| You may obtain a copy of the License at | ||
|
|
||
| http://www.apache.org/licenses/LICENSE-2.0 | ||
|
|
||
| Unless required by applicable law or agreed to in writing, software | ||
| distributed under the License is distributed on an "AS IS" BASIS, | ||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| See the License for the specific language governing permissions and | ||
| limitations under the License. */ | ||
|
|
||
| #include "paddle/fluid/inference/analysis/dfg_graphviz_draw_pass.h" | ||
|
|
||
| #include <gtest/gtest.h> | ||
| #include <fstream> | ||
| #include <string> | ||
| #include "paddle/fluid/inference/analysis/ut_helper.h" | ||
|
|
||
| namespace paddle { | ||
| namespace inference { | ||
| namespace analysis { | ||
|
|
||
| TEST_F(DFG_Tester, dfg_graphviz_draw_pass_tester) { | ||
| auto dfg = ProgramDescToDFG(desc); | ||
| DFG_GraphvizDrawPass pass("./", "test"); | ||
| pass.Initialize(); | ||
| pass.Run(&dfg); | ||
|
|
||
| // test content | ||
| std::ifstream file("./graph_test.dot"); | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 输入文件graph_test.dot是已经存在了?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 上面的 Run 会生成
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 请加注释说明下这个输入文件的来源。 |
||
| ASSERT_TRUE(file.is_open()); | ||
|
|
||
| std::string line; | ||
| int no{0}; | ||
| while (std::getline(file, line)) { | ||
| no++; | ||
| } | ||
| ASSERT_EQ(no, 82); | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 验证有82行就可以了?82这个数字是从哪儿来的?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 对,验证内容没太大必要
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 请加注释说明下82行的来源,不过如果programdesc发生变化了,这里会不会就过不了了。 |
||
| } | ||
|
|
||
| } // namespace analysis | ||
| } // namespace inference | ||
| } // namespace paddle | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
请问analysis目录下的单侧为什么要依赖test_word2vec的模型目录呢?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
test_word2vec 生成model
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.