* Doc Migration from Gitlab (#1289) * doc migration * fix * Update FakeQuantize_1.md * Update performance_benchmarks.md * Updates graphs for FPGA * Update performance_benchmarks.md * Change DL Workbench structure (#1) * Changed DL Workbench structure * Fixed tags * fixes * Update ie_docs.xml * Update performance_benchmarks_faq.md * Fixes in DL Workbench layout * Fixes for CVS-31290 * [DL Workbench] Minor correction * Fix for CVS-30955 * Added nGraph deprecation notice as requested by Zoe * fix broken links in api doxy layouts * CVS-31131 fixes * Additional fixes * Fixed POT TOC * Update PAC_Configure.md PAC DCP 1.2.1 install guide. * Update inference_engine_intro.md * fix broken link * Update opset.md * fix * added opset4 to layout * added new opsets to layout, set labels for them * Update VisionAcceleratorFPGA_Configure.md Updated from 2020.3 to 2020.4 Co-authored-by: domi2000 <domi2000@users.noreply.github.com>
4.1 KiB
4.1 KiB
Inference Engine hetero plugin design overview
Subgraphs selection
Algorithm:
For each plugin
- Select root node
- Node not in subgraph previously constructed
- Affinity is equal to plugin name
- Select adjacent node to any node in already subgraph which is not in rejected list
- if there are no such nodes end
- Check selected node has same affinity
- Add node to subgraph if check was successful or add to rejected list otherwise
- Check global condition
- Nodes in rejected list can never be added to subgraph
- Nodes not in subgraph and not in rejected list can possibly be added later
- Check subgraph topology (the only check now is there are no indirect subgraph self-references)
- If global condition was failed remove last node from subgraph, add it to rejected list and go to step 5
- we can rollback multiple times here because rejected list is changed every time
- Go to step 2
Example:
1
|
2
/ \
3 4
\ /
5
|
6
|
7
Nodes [1,2,3,5,6,7] are supported in plugin, [4] is not
Possible roots: [1,2,3,5,6,7]
- Select root [1]
- Subgraph: [1]
- Rejected: []
- Global condition: ok
- Merge [2]
- Subgraph: [1,2]
- Rejected: []
- Global condition: ok
- Merge [3]
- Subgraph: [1,2,3]
- Rejected: []
- Global condition: ok
- Merge [5]
- Subgraph: [1,2,3,5]
- Rejected: []
- Global condition: There is possible self-references through node [4] but we do not know yet, ok
- Merge [6]
- Subgraph: [1,2,3,5,6]
- Rejected: []
- Global condition: There is possible self-references through node [4] but we do not know yet, ok
- Merge [7]
- Subgraph: [1,2,3,5,6,7]
- Rejected: []
- Global condition: There is possible self-references through node [4] but we do not know yet, ok
- Failed to merge [4]
- Subgraph: [1,2,3,5,6,7]
- Rejected: [4]
- Global condition: There is self-references through node [4], reject
- Rollback [7]
- Subgraph: [1,2,3,5,6]
- Rejected: [4,7]
- Global condition: There is self-references through node [4], reject
- Rollback [6]
- Subgraph: [1,2,3,5]
- Rejected: [4,6,7]
- Global condition: There is self-references through node [4], reject
- Rollback [5]
- Subgraph: [1,2,3]
- Rejected: [4,5,6,7]
- Global condition: ok
- There are nodes to merge end
Possible roots: [5,6,7]
- Select root [5]
- Subgraph: [5]
- Rejected: []
- Global condition: ok
- Merge [6]
- Subgraph: [5,6]
- Rejected: []
- Global condition: ok
- Merge [7]
- Subgraph: [5,6,7]
- Rejected: []
- Global condition: ok
- Merge [3]
- Subgraph: [3,5,6,7]
- Rejected: []
- Global condition: ok
- Merge [2]
- Subgraph: [2,3,5,6,7]
- Rejected: []
- Global condition: There is possible self-references through node [4] but we do not know yet, ok
- Failed to merge [4]
- Subgraph: [2,3,5,6,7]
- Rejected: [4]
- Global condition: There is self-references through node [4], reject
- Rollback [2]
- Subgraph: [3,5,6,7]
- Rejected: [2,4]
- Global condition: ok
- There are nodes to merge end
Possible roots: [] no roots, END
Subgraphs: [1,2,3], [3,5,6,7]
Select best subgraph:
- When we have multiple subgraphs larger ([3,5,6,7]) is always selected, always
Repeat previous steps with remaining nodes [1,2]
The final result is:
- First plugin: [3,5,6,7], [1,2]
- Second plugin: [4]
Subgraphs self reference detection
- For each node in network build a list of reachable node (transitive closure)
- For each pair of nodes in subgraph find
pathnodes (nodes through one node in pair reachable to other)- assume
src- one node in pair,dst- other node in pair - get all nodes reachable from
src - in those nodes find nodes through you can reach
dstthose will be ourpathnode
- assume
- Results for pairs is cached.
- Check if there intersection between
pathnodes set and rejected nodes set for each nodes pair in subgraph - In case of intersection we have a self-reference and subgraph is invalid