You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by GitBox <gi...@apache.org> on 2022/08/23 05:20:11 UTC

[GitHub] [tvm] Lucien0 opened a new issue, #12553: [Bug][MicroTVM][Model Library Format] Cannot export when whole graph is partitioned to another compiler

Lucien0 opened a new issue, #12553:
URL: https://github.com/apache/tvm/issues/12553

   Hi, I constructed a simple example like that
   
       def test_export_mlf():
           x = relay.var("x", shape=(10, 10))
           w0 = relay.var("w0", shape=(10, 10))
           w1 = relay.var("w1", shape=(10, 10))
           w2 = relay.var("w2", shape=(10, 10))
   
           z0 = relay.add(x, w0)
           p0 = relay.subtract(z0, w1)
           q0 = relay.multiply(p0, w2)
   
           f = relay.Function([x, w0, w1, w2], q0)
           mod = tvm.IRModule()
           ann = byoc.CcompilerAnnotator()
           mod["main"] = ann.visit(f)
           mod = tvm.relay.transform.PartitionGraph()(mod)
           mod = tvm.relay.transform.InferType()(mod)
   
           rt_mod = relay.build(
               mod, target="c", runtime=Runtime("crt", {"system-lib": True}))
           tvm.micro.export_model_library_format(rt_mod, "./module.tar")
   
   which IRMoulde is like:
   
       def @main(%x: Tensor[(10, 10), float32], %w0: Tensor[(10, 10), float32], %w1: Tensor[(10, 10), float32], %w2: Tensor[(10, 10), float32]) -> Tensor[(10, 10), float32] {
       @tvmgen_default_ccompiler_main_0(%x, %w0, %w1, %w2) /* ty=Tensor[(10, 10), float32] */
       }
   
       def @tvmgen_default_ccompiler_main_0(%ccompiler_0_i0: Tensor[(10, 10), float32], %ccompiler_0_i1: Tensor[(10, 10), float32], %ccompiler_0_i2: Tensor[(10, 10), float32], %ccompiler_0_i3: Tensor[(10, 10), float32], Inline=1, global_symbol="tvmgen_default_ccompiler_main_0", Compiler="ccompiler", Primitive=1) -> Tensor[(10, 10), float32] {
       %0 = add(%ccompiler_0_i0, %ccompiler_0_i1) /* ty=Tensor[(10, 10), float32] */;
       %1 = subtract(%0, %ccompiler_0_i2) /* ty=Tensor[(10, 10), float32] */;
       multiply(%1, %ccompiler_0_i3) /* ty=Tensor[(10, 10), float32] */
       }
   
   ### Expected behavior
   
   The module.tar can be exported normally.
   
   ### Actual behavior
   
   In this example, there will be an error when exporting the module.tar
   
       assert dso_mod.format in [“c”, “cc”, “cpp”]
   
   But when I change the target from “c” to “llvm”, everything works fine. And I checked code, it seems that when lowered func is empty, just create an empty CSourceModule without format
   
       ret_.mod = tvm::codegen::CSourceModuleCreate(";", "", Array<String>{});
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@tvm.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org