leeexyz opened a new pull request #9807: URL: https://github.com/apache/tvm/pull/9807
Hi All, This PR tries to fix the Target constructing issue. I just found an error when invoking `relay.backend._backend.build` from the python side. After `build_target_by_device_type_map`, we got a dict target and it will be converted to Map when calling `relay.backend._backend.build`, because it is a global function. Then, the error occurred due to we cannot construct Target by type Map or String. https://github.com/apache/tvm/blob/main/python/tvm/relay/build_module.py#L273-L280 Reproduce case ```python import tvm from tvm import relay from tvm.relay.backend import graph_executor_codegen def test_add(): def build_graph(mod, target): target = tvm.relay.build_module.build_target_by_device_type_map(target) target, target_host = tvm.target.Target.check_and_update_host_consist(target) mod, _ = relay.optimize(mod, target, None) grc = graph_executor_codegen.GraphExecutorCodegen(None, target) graph_json, lowered_funcs, params = grc.codegen(mod, mod["main"]) built_mod = relay.backend._backend.build(lowered_funcs, target, target_host) def add(shape, dtype): A = relay.var("A", shape=shape, dtype=dtype) B = relay.var("B", shape=shape, dtype=dtype) C = relay.add(A, B) expr = relay.Function((A, B), C) mod = tvm.IRModule.from_expr(expr) return mod mod = build_graph(add((1, 8), "float32"), tvm.target.Target("llvm")) test_add() ``` Trace log ```bash Traceback (most recent call last): File "test_build_graph.py", line 27, in <module> test_add() File "test_build_graph.py", line 24, in test_add mod = build_graph(add((1, 8), "float32"), tvm.target.Target("llvm")) File "test_build_graph.py", line 14, in build_graph built_mod = relay.backend._backend.build(lowered_funcs, target, target_host) File "/home/tuisku/project/apache/tvm/python/tvm/_ffi/_ctypes/packed_func.py", line 237, in __call__ raise get_last_ffi_error() ValueError: Traceback (most recent call last): 4: TVMFuncCall at ../src/runtime/c_runtime_api.cc:475 3: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const at ../include/tvm/runtime/packed_func.h:1151 2: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const at /usr/include/c++/7/bits/std_function.h:706 1: _M_invoke at /usr/include/c++/7/bits/std_function.h:316 0: operator() at ../src/runtime/c_runtime_api.cc:526 File "~/apache/tvm/python/tvm/_ffi/_ctypes/packed_func.py", line 81, in cfun rv = local_pyfunc(*pyargs) File "/home/tuisku/project/apache/tvm/python/tvm/relay/backend/_backend.py", line 44, in build target, target_host = Target.check_and_update_host_consist(target, target_host) File "/home/tuisku/project/apache/tvm/python/tvm/target/target.py", line 239, in check_and_update_host_consist target = Target(target, host) File "/home/tuisku/project/apache/tvm/python/tvm/target/target.py", line 111, in __init__ raise ValueError("target has to be a string or dictionary.") ValueError: target has to be a string or dictionary. ``` I also found there are two container definitions `tvm.runtime.container` and `tvm.ir.container`. Can we merge them? -- 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]
