mshr-h opened a new issue, #18882: URL: https://github.com/apache/tvm/issues/18882
`TargetNode::ToConfig()` exports canonicalizer-generated `feature.*` attributes, but `TargetInternal::FromConfig()` rejects those same keys during reconstruction because they are not part of the target kind schema. This breaks round-trip reconstruction of exported targets and can also fail when a caller exports a target config, mutates another field, and reconstructs it. MLC-LLM uses this pattern here: https://github.com/mlc-ai/mlc-llm/blob/345d2e2c96c183fbca4538b268d74cb73485989c/python/mlc_llm/support/auto_target.py#L48-L52 ### Actual behavior ``` $ python target_roundtrip_failure.py Traceback (most recent call last): File "/home/ubuntu/data/project/tvm-example/target_roundtrip_failure.py", line 13, in <module> main() File "/home/ubuntu/data/project/tvm-example/target_roundtrip_failure.py", line 9, in main Target(exported) File "/home/ubuntu/data/project/tvm-example/tvm/python/tvm/target/target.py", line 145, in __init__ self.__init_handle_by_constructor__(_ffi_api.Target, target) File "python/tvm_ffi/cython/object.pxi", line 200, in tvm_ffi.core.Object.__init_handle_by_constructor__ File "python/tvm_ffi/cython/function.pxi", line 123, in tvm_ffi.core.ConstructorCall File "python/tvm_ffi/cython/error.pxi", line 163, in tvm_ffi.core.CHECK_CALL File "/home/ubuntu/data/project/tvm-example/tvm/src/target/target.cc", line 235, in tvm::TargetInternal::ConstructorDispatcher(tvm::ffi::PackedArgs, tvm::ffi::Any*) *rv = Target(opt_map.value()); File "/home/ubuntu/data/project/tvm-example/tvm/src/target/target.cc", line 125, in tvm::Target::Target(tvm::ffi::Map<tvm::ffi::String, tvm::ffi::Any, void> const&) target = TargetInternal::FromConfig(config); File "/home/ubuntu/data/project/tvm-example/tvm/src/target/target.cc", line 327, in tvm::TargetInternal::FromConfig(tvm::ffi::Map<tvm::ffi::String, tvm::ffi::Any, void>) target->host = ffi::Function(ConstructorDispatcher)(config[kHost]).cast<Target>(); File "/home/ubuntu/data/project/tvm-example/tvm/src/target/target.cc", line 235, in tvm::TargetInternal::ConstructorDispatcher(tvm::ffi::PackedArgs, tvm::ffi::Any*) *rv = Target(opt_map.value()); File "/home/ubuntu/data/project/tvm-example/tvm/src/target/target.cc", line 125, in tvm::Target::Target(tvm::ffi::Map<tvm::ffi::String, tvm::ffi::Any, void> const&) target = TargetInternal::FromConfig(config); File "/home/ubuntu/data/project/tvm-example/tvm/src/target/target.cc", line 335, in tvm::TargetInternal::FromConfig(tvm::ffi::Map<tvm::ffi::String, tvm::ffi::Any, void>) ffi::Map<ffi::String, ffi::Any> resolved = target->kind->schema_.Resolve(config); File "/home/ubuntu/data/project/tvm-example/tvm/include/tvm/ir/config_schema.h", line 152, in tvm::ir::ConfigSchema::ConfigMap tvm::ir::ConfigSchema::Resolve(ConfigMap) const TVM_FFI_THROW(ValueError) << os.str(); ValueError: Unknown config option 'feature.has_sme'. Known options: 'kind', 'keys', 'tag', 'device', 'model', 'libs', 'host', 'from_device', 'target_device_type', 'mattr', 'mcpu', 'mtriple', 'mfloat-abi', 'mabi', 'num-cores', 'fast-math', 'fast-math-nnan', 'fast-math-ninf', 'fast-math-nsz', 'fast-math-arcp', 'fast-math-contract', 'fast-math-reassoc', 'opt-level', 'cl-opt', 'jit', 'vector-width'. Target creation from config dict failed: {"kind": "llvm", "tag": "", "keys": ["arm_cpu", "cpu"], "feature.has_sme": 0, "feature.has_matmul_i8": 0, "feature.has_dotprod": 0, "feature.has_fp16_simd": 0, "feature.has_sve": 0, "feature.has_asimd": 1, "feature.is_aarch64": 1, "mtriple": "aarch64-unknown-linux-gnu"}. Target creation from config dict failed: {"kind": "cuda", "tag": "", "keys": ["cuda", "gpu"], "host": {"kind": "llvm", "tag": "", "keys": ["arm_cpu", "cpu"], "feature.has_sme": 0, "feature.has_matmul_i8": 0, "feature.has_dotprod": 0, "feature.has_fp16_simd": 0, "feature.has_sve": 0, "feature.has_asimd": 1, "feature.is_aarch64": 1, "mtriple": "aarch64-unknown-linux-gnu"}, "max_num_threads": 1024, "thread_warp_size": 32, "arch": "sm_53"} ``` ### Environment Any environment details, such as: Operating System, TVM version, etc ### Steps to reproduce ```python from tvm.target import Target def main() -> None: host = Target({"kind": "llvm", "mtriple": "aarch64-unknown-linux-gnu"}) target = Target({"kind": "cuda", "arch": "sm_53"}, host=host) exported = dict(target.export()) Target(exported) if __name__ == "__main__": main() ``` -- 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]
