使用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: []