Skip to content
Snippets Groups Projects

General API (Level 1)

  • Knob:

    • A name -- constant
    • kwargs (for knob parameter, for example: 25% in 25% perforation) -- constant
    • Whether coexist with another knob or not -- method
      • Useful when we want to support multiple knobs in an op
  • Application:

    • List of knobs for each operator -- constant
      • (We provide a knob value for "baseline" and sneak that in each layer)
    • Argparser extra arguments -- static method
    • How to measure QoS & performance given a configuration -- method
      • Input? Don't care
      • Empirical or modeled? Don't care
      • This is a minimal interface to interact with opentuner, nothing ApproxTuner yet.

Predictive Tuning (Level 2)

Performance model + QoS model (P1, P2)

  • Performance model (linear combination of operator cost * speedup of knob)

    • Requires list of operator cost
    • Requires table of knob speedup on layer
  • QoS P1 (linear in tensor output)

    • Requires tensor output of each single knob
  • QoS P2 (linear in QoS)

    • Requires QoS of each single knob
  • Predict-tunable application

    • User should inherit from a number of interfaces. Inherit P1Interface -> can use P1, etc.
    • Detect self capability using isinstance(self, ...) and offers argparser extra arguments (or config file entries).

Predictive Tuning for PyTorch Modules (Level 3)

Automate some definitions using inspection on module

  • PyTorch application
    • *Provides list of operators and cost in FLOPs
    • *Provides function for running inference on module and combining output
    • *Implements P2
    • *Implements P1 if output is tensor
    • Require a PyTorch module
    • Require an input dataset

API usage

  • User defines classes for knobs
    • Perforation, sampling...
  • User defines application
    • Most general: just Application. Useful for tuning a binary, for example.