TVM Relay

TVM is a compiler for machine learning frameworks that can optimize and target kernels to several different backends. Relay is a high level intermediate representation for the TVM framework. The goal of Relay is to replace old computation graph based IRs with a more expressive IR. More information can be found in this paper.

The TVM Relay frontend lives in the relay-lang folder in the Calyx repository and generates Calyx components from the Relay intermediate representation.

Installation

  1. Clone the TVM repository with commit hash ccacb1ec1):

     git clone --recursive git@github.com:apache/incubator-tvm.git
     cd incubator-tvm && git reset --hard ccacb1ec1
    
  2. Set up to build (the default configuration is fine because we don't need any fancy backends like LLVM or CUDA):

     mkdir build && cd build
     cp ../cmake/config.cmake .
    
  3. Build TVM:

     cmake -G Ninja .. && ninja
    
  4. Install the tvm Python package by building a wheel:

     cd ../python && python3 setup.py bdist_wheel
     pip3 install --user dist/tvm-*.whl
    
  5. Install the accompanying topi Python package:

     cd ../topi/python && python3 setup.py bdist_wheel
     pip3 install --user dist/topi-*.whl
    
  6. Install ANTLR v4.7.2 (required for the Relay text format parser):

     pip3 install -Iv antlr4-python3-runtime==4.7.2
    
  7. To run the MLP net and VGG net examples, install pytest:

     pip3 install pytest
    
  8. Install Dahlia, which is used when lowering Relay call nodes to Calyx.

  9. Install the calyx-py library.

Run an Example

Try this to run a simple example:

cd calyx/frontends/relay
python3 example.py tensor_add
  • -h: Help option; shows available examples.
  • -r: Dumps the Relay IR. Otherwise, it dumps the Calyx output.