(self, graph: BaseGraph,
dataloader: Iterable, executor: BaseGraphExecutor, **kwargs)
| 539 | super().__init__('Swish Fusion') |
| 540 | |
| 541 | def optimize(self, graph: BaseGraph, |
| 542 | dataloader: Iterable, executor: BaseGraphExecutor, **kwargs) -> None: |
| 543 | search_engine = SearchableGraph(graph) |
| 544 | patterns = search_engine.pattern_matching( |
| 545 | patterns = [lambda x: x.is_computing_op, 'Sigmoid', 'Mul'], |
| 546 | edges = [[0, 1], [1, 2], [0, 2]], |
| 547 | exclusive = True) |
| 548 | |
| 549 | for pattern in patterns: |
| 550 | if any([not isinstance(op, QuantableOperation) for op in pattern]): |
| 551 | ppq_warning(f'There is a pattern of swish activation in your network start from {pattern[0]}, ' |
| 552 | 'however part of your swish activation is not quantable, ' |
| 553 | 'so that graph fusion can not merge their quantization configuration.') |
| 554 | continue |
| 555 | if any([op.platform != pattern[0].platform for op in pattern]): |
| 556 | ppq_warning(f'There is a pattern of swish activation in your network start from {pattern[0]}, ' |
| 557 | 'however part of your swish activation is not quantable, ' |
| 558 | 'so that graph fusion can not merge their quantization configuration.') |
| 559 | continue |
| 560 | computing, sigmoid, mul = pattern |
| 561 | |
| 562 | assert isinstance(computing, QuantableOperation) |
| 563 | assert isinstance(sigmoid, QuantableOperation) |
| 564 | assert isinstance(mul, QuantableOperation) |
| 565 | |
| 566 | master_config = mul.config.output_quantization_config[0] |
| 567 | computing.config.output_quantization_config[0].dominated_by = master_config |
| 568 | sigmoid.config.input_quantization_config[0].dominated_by = master_config |
| 569 | sigmoid.config.output_quantization_config[0].dominated_by = master_config |
| 570 | mul.config.input_quantization_config[0].dominated_by = master_config |
| 571 | mul.config.input_quantization_config[1].dominated_by = master_config |
| 572 | |
| 573 | |
| 574 | class MishFusionPass(QuantizationOptimizationPass): |
nothing calls this directly
no test coverage detected