[RELAY][PASS] Enable decorating python class as Pass #3364
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Previously relay's python pass decorator(
transform.module_pass
,transform.function_pass
) decorates functions.However, one typical use-case of the customized pass is parameterized pipelines.
The example below is one made-up use-case when a user wants to customize the behavior of the pipeline by setting a customization flag(
enable_fold
).This PR enables this kind of decoration. That decorate CustomPipeline into a new class that is a subclass of ModulePass, and enables its usage as a ModulePass.
Note that, however, we can certainly reach a similar solution using functional style programming along with the old API(see the code below).
So it was really a debate about which style that a user might prefer(FP vs objects) and what will happen as the pipeline gets more complicated. By talking to folks, the feedback that I get so far is:
After considering these facts, I think it might be helpful to enable the object style of writing customized passes. So that certain customized pipelines like Quantization might take benefit from this improvement.
cc @jroesch @ZihengJiang @zhiics @eqy @MarisaKirisame @yzhliu @icemelon9