tvm.transform.Sequential自定义pass的执行顺序遇到问题

使用tvm.transform.Sequential去自定义pass优化的执行顺序,但将实际真实的pass执行流打印出来,发现得到relayIR后,relayIR确实会按照我定义的pass优化的执行顺序去执行,但是执行完后,还会去继续执行当前优化等级的其余RealyIR pass优化,这个是为什么呢,在我理解看来,自定了RealyIR pass的执行顺序之后,实际的pass执行流应该是我定义的这个顺序在加上TIR的pass优化,而不是图优化pass再出现一遍,这个问题我没有找到合理的解释,希望社区里的各位专家及编译器研究人员能帮我解决这个疑问,这个是我自定义的relay IR pass的执行流:

@tvm.instrument.pass_instrument class PrintIR:

def __init__(self):
    self._info = []
# def extract_info(self,mod,info):
def run_before_pass(self,mod,info):
    self._info.append(info)
def getinfo(self):
    return self._info

printIR = PrintIR()

seq = tvm.transform.Sequential([

           relay.transform.Legalize(),
           relay.transform.SimplifyInference(),
           relay.transform.EliminateCommonSubexpr(),
           relay.transform.FoldConstant(),
           relay.transform.FoldScaleAxis(),
           relay.transform.SimplifyExpr(),
           relay.transform.CanonicalizeOps(),
           relay.transform.InferType(),
           relay.transform.FoldConstant(),
           relay.transform.InferType()
        ])

with tvm.transform.PassContext(opt_level=4,instruments=[printIR]):

mod = seq(mod)
lib = relay.build(mod, target=target, params=params)

f = open(‘pass.txt’,‘w’)

f.write(‘relay.build---------->\n’ + str(printIR.getinfo()))

f.close()

这个是实际打印出来的执行流(因为我目前只想重拍relayIR的pass流,所以以下只展示了实测中relayIR的pass执行顺序,TIR的并未给出)

relay.build---------->

[The meta data of the pass - pass name: sequential, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: Legalize, opt_level: 1, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: SimplifyInference, opt_level: 0, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: EliminateCommonSubexpr, opt_level: 3, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: FoldConstant, opt_level: 2, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: FoldScaleAxis, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: BackwardFoldScaleAxis, opt_level: 3, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: ForwardFoldScaleAxis, opt_level: 3, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: FoldConstant, opt_level: 2, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: SimplifyExpr, opt_level: 0, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: CanonicalizeOps, opt_level: 3, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: FoldConstant, opt_level: 2, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: sequential, opt_level: 0, required passes: []

, The meta data of the pass - pass name: RemoveUnusedFunctions, opt_level: 1, required passes: []

, The meta data of the pass - pass name: ToBasicBlockNormalForm, opt_level: 1, required passes: []

, The meta data of the pass - pass name: sequential, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: Legalize, opt_level: 1, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: Legalize, opt_level: 1, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: Legalize, opt_level: 1, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: SimplifyInference, opt_level: 0, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: EliminateCommonSubexpr, opt_level: 3, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: CombineParallelConv2d, opt_level: 4, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: CombineParallelDense, opt_level: 4, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: CombineParallelBatchMatmul, opt_level: 4, required passes:[InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: FoldConstant, opt_level: 2, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: FoldScaleAxis, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: BackwardFoldScaleAxis, opt_level: 3, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: ForwardFoldScaleAxis, opt_level: 3, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: FoldConstant, opt_level: 2, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: SimplifyExpr, opt_level: 0, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: CanonicalizeCast, opt_level: 3, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: CanonicalizeOps, opt_level: 3, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: AlterOpLayout, opt_level: 3, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: FastMath, opt_level: 4, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: FoldConstant, opt_level: 2, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: SplitArgs, opt_level: 1, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: PlanDevices, opt_level: 0, required passes: []

, The meta data of the pass - pass name: PlanDevicesRewrite, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: PlanDevicesCore, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: FuseOps, opt_level: 0, required passes: [ InferType, ]

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InlineGlobals, opt_level: 1, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: LabelOps, opt_level: 1, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: sequential, opt_level: 0, required passes: []

, The meta data of the pass - pass name: RelayToTIRTargetHook, opt_level: 0, required passes: []

, The meta data of the pass - pass name: sequential, opt_level: 0, required passes: []

, The meta data of the pass - pass name: InferType, opt_level: 0, required passes: []

, The meta data of the pass - pass name: LowerTE, opt_level: 0, required passes: [ InferType, ]

, The meta data of the pass - pass name: LowerTensorExpr, opt_level: 0, required passes: []

, The meta data of the pass - pass name: sequential, opt_level: 0, required passes: []

, The meta data of the pass - pass name: tir.InjectPrefetch, opt_level: 0, required passes: []

, The meta data of the pass - pass name: tir.TextureFlatten, opt_level: 0, required passes: []

, The meta data of the pass - pass name: tir.StorageFlatten, opt_level: 0, required passes: []

, The meta data of the pass - pass name: tir.StorageFlatten_impl, opt_level: 0, required passes: []

The build flow applies a series of pre-defined passes. If you want to apply customized Relay pass combination, consider adding some changes locally to function “OptimizeImpl” in src/relay/backend/build_module.cc to bypass the original optimization procedure.

1 Like

This part processed the passes you defined.

While in ‘relay.build(…)’ more pre-defined passes are processed.