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

   
     Expected behavior
   
     A Relax module that the compiler cannot build should be rejected with a 
clean diagnostic. In particular, relax.transform.BundleModelParams followed by 
relax.build (default pipeline) — or by
     relax.transform.VMShapeLower alone — must not crash the compiler process.
   
     Actual behavior
   
     For a module with a R.Prim parameter and a symbolic-shape tensor parameter 
(where num_input is smaller than the number of parameters), BundleModelParams 
bundles them into a tuple parameter whose field types
     lose their shapes (R.Tensor(dtype="float32", ndim=1) — shape is unknown), 
and synthesizes a match_cast to re-bind the extent and the weight. A subsequent 
relax.build (default pipeline) segfaults inside
     VMShapeLowerMutator::VisitType_(TensorTypeNode const*, ...) while walking 
the tuple-typed parameter. The crash is deterministic (3/3 runs) and is 
compile-time (exec_mode irrelevant).
   
     Key frames:
   
     tvm::relax::VMShapeLowerMutator::VisitType_(tvm::relax::TensorTypeNode 
const*, ...)
     tvm::relax::TypeFunctor<...>::VisitType(...)
     tvm::relax::VMShapeLowerMutator::VisitType_(tvm::relax::TupleTypeNode 
const*, ...)
     tvm::relax::VMShapeLowerMutator::Rewrite(tvm::GlobalVar, 
tvm::relax::Function)
     tvm::relax::VMShapeLowerMutator::Lower(tvm::IRModule, bool)
   
     Severity note: the same module without BundleModelParams is rejected 
cleanly by the VM codegen (Prim-typed parameters are not supported), so this 
bug downgrades a clean diagnostic into a process-level
     segfault. The module itself is well-formed Relax (it parses and the passes 
accept it); a pass emitting IR that crashes a later pass — instead of raising — 
is the defect.
   
     Environment
   
     OS: Linux x86_64
     Target: llvm
     TVM version: 0.26.dev0
     TVM commit: 2a2b293 (current main at time of writing)
   
     Steps to reproduce
   
     import tvm
     from tvm import relax
     from tvm.script import ir as I, relax as R
   
     MOD = """
     @I.ir_module
     class Module:
         @R.function
         def main(x: R.Tensor([32], "float32"), extent: R.Prim("int64"),
                  weight: R.Tensor(["extent"], "float32")):
             R.func_attr({"num_input": 1})
             out = R.add(x, weight)
             return out
     """
   
     from tvm.script import from_source
   
     def
     # Trigger: BundleModelParams first -> deterministic SIGSEGV in VMShapeLower
     build(MOD, bundle=True)
   
     # Single-pass reproduction: crash is inside VMShapeLower itself
     mod = from_source(MOD)
     mod = relax.transform.BundleModelParams()(mod)
     mod = relax.transform.VMShapeLower()(mod)   # segfaults without any other 
pass
   
     After BundleModelParams the module looks like this (note the tuple field 
lost its shape, and the synthesized match_cast):
   
     @I.ir_module
     class Module:
         @R.function
         def main(x: R.Tensor((32,), dtype="float32"),
                  model_params: R.Tuple(T.int64, R.Tensor(dtype="float32", 
ndim=1))
                 ) -> R.Tensor(dtype="float32", ndim=1):
             R.func_attr({"num_input": 1})
             extent: T.int64 = model_params[0]
             weight: R.Tensor((extent,), dtype="float32") = \
                 R.match_cast(model_params[1], R.Tensor((extent,), 
dtype="float32"))
             out: R.Tensor(dtype="float32", ndim=1) = R.add(x, weight)
             return out
   
     Controls (each removes exactly one trigger condition)
   
     - Trigger: Prim param + symbolic-shape weight + num_input=1
         without BMP: clean error (rc=1)
         with BMP:    SIGSEGV (rc=-11), 3/3 runs
     - Same + match_cast in the body (the originally-found pattern)
         without BMP: clean error
         with BMP:    SIGSEGV  (match_cast in user code is NOT required, BMP 
synthesizes it)
     - Static-shape weight (R.Tensor([32])), rest identical
         without BMP: clean error
         with BMP:    clean error  (symbolic shape in the bundled field is 
required)
     - No Prim param (all-static, plain bundling)
         without BMP: builds OK
         with BMP:    builds OK
     - No num_input attribute (BMP is a no-op)
         without BMP: clean error
         with BMP:    clean error
   
     Notes on triage
   
     - Searched upstream for VMShapeLower (16 hits) and BundleModelParams (8 
hits): no matching report. #17876 / #18491 are opt_level=1 InternalErrors from 
the default pipeline — different failure and different
       path. BundleModelParams issues on file are 2023–24 feature/PR threads.
     - Suggested labels: needs-triage, type: bug, relax.
   
   


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to