Skip to content

[RELAY][BUG]type inference is slow #7008

Description

@Meteorix

For a large model, tvm compilation is really slow. I perf it and find that type inference costs most of the time.

# Children      Self  Command  Shared Object                         Symbol
# ........  ........  .......  ....................................  .....................................................................................................................................................................
#
    93.18%     0.00%  python   libtvm.so                             [.] tvm::relay::PatternRewriter::Rewrite
            |
            ---tvm::relay::PatternRewriter::Rewrite
               |
                --93.17%--tvm::relay::InferTypeWithModule
                          |
                           --93.05%--tvm::transform::Pass::operator()
                                     tvm::transform::PassNode::operator()
                                     tvm::transform::ModulePassNode::operator()
                                     tvm::runtime::PackedFunc::operator()<tvm::IRModule, tvm::transform::PassContext>
                                     std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()
                                     std::_Function_handler<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*), void tvm::runtime::TypedPackedFunc<tvm::IRModule (tvm::IRModule, tvm::transform::PassContext)>::AssignTypedLambda<tv
                                     void tvm::runtime::TypedPackedFunc<tvm::IRModule (tvm::IRModule, tvm::transform::PassContext)>::AssignTypedLambda<tvm::relay::transform::InferType()::{lambda(tvm::IRModule, tvm::transform::PassCont
                                     |
                                      --93.03%--tvm::relay::transform::InferType()::{lambda(tvm::IRModule, tvm::transform::PassContext const&)#1}::operator()
                                                |
                                                |--79.48%--tvm::relay::TypeInferencer::Infer
                                                |          |
                                                |          |--49.03%--tvm::relay::TypeInferencer::GetType

From my understanding, PatternRewriter rewrite every function in a module, then each time PatternRewriter calls InferType to infer every function. It should be incremental. Is there any reason why this incremental inference is commented? https://github.com/apache/tvm/blob/main/src/relay/transforms/type_infer.cc#L805

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions