(self, graph: BaseGraph, **kwargs)
| 576 | super().__init__('Mish Fusion') |
| 577 | |
| 578 | def optimize(self, graph: BaseGraph, **kwargs) -> None: |
| 579 | search_engine = SearchableGraph(graph) |
| 580 | patterns = search_engine.pattern_matching( |
| 581 | patterns = [lambda x: x.is_computing_op, 'Softplus', 'Tanh', 'Mul'], |
| 582 | edges = [[0, 1], [1, 2], [2, 3], [0, 3]], |
| 583 | exclusive = True) |
| 584 | |
| 585 | for pattern in patterns: |
| 586 | if any([not isinstance(op, QuantableOperation) for op in pattern]): |
| 587 | ppq_warning(f'There is a pattern of mish activation in your network start from {pattern[0]}, ' |
| 588 | 'however part of your mish activation is not quantable, ' |
| 589 | 'so that graph fusion can not merge their quantization configuration.') |
| 590 | continue |
| 591 | if any([op.platform != pattern[0].platform for op in pattern]): |
| 592 | ppq_warning(f'There is a pattern of mish activation in your network start from {pattern[0]}, ' |
| 593 | 'however part of your mish activation is not quantable, ' |
| 594 | 'so that graph fusion can not merge their quantization configuration.') |
| 595 | continue |
| 596 | computing, softplus, tanh, mul = pattern |
| 597 | |
| 598 | assert isinstance(computing, QuantableOperation) |
| 599 | assert isinstance(softplus, QuantableOperation) |
| 600 | assert isinstance(tanh, QuantableOperation) |
| 601 | assert isinstance(mul, QuantableOperation) |
| 602 | |
| 603 | master_config = mul.config.output_quantization_config[0] |
| 604 | computing.config.output_quantization_config[0].dominated_by = master_config |
| 605 | tanh.config.input_quantization_config[0].dominated_by = master_config |
| 606 | tanh.config.output_quantization_config[0].dominated_by = master_config |
| 607 | softplus.config.input_quantization_config[0].dominated_by = master_config |
| 608 | softplus.config.output_quantization_config[0].dominated_by = master_config |
| 609 | mul.config.input_quantization_config[0].dominated_by = master_config |
| 610 | mul.config.input_quantization_config[1].dominated_by = master_config |
| 611 | |
| 612 | |
| 613 | class NxpInputRoundingRefinePass(QuantizationOptimizationPass): |
nothing calls this directly
no test coverage detected