@@ -40,9 +40,16 @@ def _native_ops_only(model):
4040def _tvm_worker (model_bytes , inputs , input_names , output_count , result_queue ):
4141 """Compile and run an ONNX model via TVM Relay in an isolated subprocess."""
4242 import onnx
43- import tvm
44- from tvm import relay
45- from tvm .contrib import graph_executor
43+
44+ try :
45+ import tvm
46+ from tvm import relay
47+ from tvm .contrib import graph_executor
48+ except (ImportError , AttributeError , OSError , RuntimeError ) as e :
49+ msg = f"tvm import failed: { type (e ).__name__ } : { e } "
50+ print (f"[tvm] SKIP { msg } " , file = sys .stderr , flush = True )
51+ result_queue .put (("error" , msg ))
52+ return
4653
4754 model = onnx .ModelProto ()
4855 model .ParseFromString (model_bytes )
@@ -68,7 +75,14 @@ def _tvm_worker(model_bytes, inputs, input_names, output_count, result_queue):
6875 module .run ()
6976 outputs = [module .get_output (i ).numpy () for i in range (output_count )]
7077 result_queue .put (("ok" , outputs ))
71- except (tvm .TVMError , RuntimeError , ValueError , TypeError , OSError ) as e :
78+ except (
79+ tvm .TVMError ,
80+ RuntimeError ,
81+ ValueError ,
82+ TypeError ,
83+ OSError ,
84+ ImportError ,
85+ ) as e :
7286 ops = sorted ({n .op_type for n in model .graph .node })
7387 msg = f"ops={ ops } error={ type (e ).__name__ } : { e } "
7488 print (f"[tvm] SKIP { msg } " , file = sys .stderr , flush = True )
0 commit comments