gussmith23 opened a new issue #4449: [RFC] Program Analysis Framework in Relay
URL: https://github.com/apache/incubator-tvm/issues/4449
 
 
   Please also see #3895, which is @MarisaKirisame's RFC around a specific 
change to support analyses in Relay.
   
   This RFC pertains to building a centralized, comprehensive program analysis 
framework in Relay. I see two primary uses of program analyses in Relay: for 
generating analysis data **used by the compiler**, to do things such as 
quantization, and for generating human-readable data **used by developers**, 
useful for exploring Relay programs. Whereas Marisa's request pertains more to 
the first use-case, this request is inspired by the second use-case, and 
motivated by a desire to build a framework that covers both use-cases. Such 
frameworks exist -- see [LLVM's 
framework](http://llvm.org/docs/WritingAnLLVMPass.html), which is designed to 
generate data useful to both the compiler and the developer.
   
   I built [a small analysis 
framework](https://github.com/microsoft/Analysis-Framework-for-TVM) for Relay 
this past summer at Microsoft, useful for building human-readable analyses of 
Relay programs. A demo of this framework can be found 
[here](https://github.com/gussmith23/tvm/blob/c28b928b33da0cad03fc6804f26e34d61aca1606/demo.ipynb),
 on my branch of TVM.
   
   These are features I developed in my simple framework:
   - Utilities for exporting analysis results into some more useful format 
(e.g. pandas)
     + I achieve this in my simple framework by giving utilities which: (1) 
extract "columns" out of the resulting analysis data and (2) convert analysis 
data into a record-based format which can be imported into pandas.
   - A consistent format for the resulting analysis data, allowing for analyses 
to be composed and to depend on the outputs of previous analyses.
     + In my framework, analysis data is simply structured into a 
dictionary-of-dictionaries in Python, where keys are strings representing 
column/column-group names.
   - A helper class for doing simple static dataflow analysis, built on Relay's 
`ExprVisitor`.
   
   These are features which could be considered for a full framework:
   - The ability to do dynamic analysis of programs
     + There is some exploration of this in the demo linked above
   - Integration with the Pass Manager, so that dependencies between passes can 
be explicit
   - Utilities for doing control-flow analyses
   
   These are open questions that I have:
   - What examples of "ad-hoc" program analyses exist in Relay? #3895 lists 
some.
   - What features are needed by compiler analyses?
   
   I'm posting this in advance of the TVM conference this year, as I'm doing a 
lighting talk on program analysis in Relay and am hoping that the talk 
generates some discussion.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to