Hi, I am new to TVM. I need to convert ONNX models into Relay models, compile 
Relay models into binary files and then run the binary file in tvm. 

My question lies in running the binary file in tvm. I've successfully run 
binary files generated from Relax models through 
```tvm.runtime.relax_vm.VirtualMachine```. I've tried to operate binary files 
generated from Relay models through ```tvm.contrib.graph_executor``` but failed 
because I can't find the ```main``` function.

Here's my code:
```python
import numpy as np
import tvm
from tvm.contrib import graph_executor

lib = tvm.runtime.load_module('output.so')
dev = tvm.cpu(0)
target = 'llvm'

module = graph_executor.create(lib['main'](dev))

X = np.array([[1, 2], [3, 4]], dtype=np.float64)
A = np.array([[5, 6], [7, 8]], dtype=np.float64)
B = np.array([[9, 10], [11, 12]], dtype=np.float64)
C = np.array([[13, 14], [15, 16]], dtype=np.float64)
D = np.array([[17, 18], [19, 20]], dtype=np.float64)

module.set_input("X", X)
module.set_input("A", A)
module.set_input("B", B)
module.set_input("C", C)
module.set_input("D", D)

module.run()
output = module.get_output(0).asnumpy()
print("Output Y:", output)
```
Following is the error message:
```
Traceback (most recent call last):
  File "/home/code/Code_TVM/onnx_to_llvm_ir/relay/run_binary.py", line 9, in 
<module>
    module = graph_executor.create(lib['main'](dev))
                                   ~~~^^^^^^^^
  File "/home/code/tvm/python/tvm/runtime/module.py", line 192, in __getitem__
    return self.get_function(name)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/code/tvm/python/tvm/runtime/module.py", line 176, in get_function
    raise AttributeError(f"Module has no function '{name}'")
AttributeError: Module has no function 'main'
```
And here's the Relay model:
```
def @main(%X: Tensor[(2, 2), float64] /* ty=Tensor[(2, 2), float64] 
span=MatMul_0.X:0:0 */, %A: Tensor[(2, 2), float64] /* ty=Tensor[(2, 2), 
float64] span=MatMul_0.A:0:0 */, %B: Tensor[(2, 2), float64] /* ty=Tensor[(2, 
2), float64] span=Add_0.B:0:0 */, %C: Tensor[(2, 2), float64] /* ty=Tensor[(2, 
2), float64] span=MatMul_1.C:0:0 */, %D: Tensor[(2, 2), float64] /* 
ty=Tensor[(2, 2), float64] span=Add_1.D:0:0 */) -> Tensor[(2, 2), float64] {
  %0 = transpose(%A, axes=[1, 0]) /* ty=Tensor[(2, 2), float64] 
span=MatMul_0:0:0 */;
  %1 = nn.dense(%X, %0, units=None, out_dtype="float64") /* ty=Tensor[(2, 2), 
float64] span=MatMul_0:0:0 */;
  %2 = add(%1, %B) /* ty=Tensor[(2, 2), float64] span=Add_0:0:0 */;
  %3 = nn.relu(%2) /* ty=Tensor[(2, 2), float64] span=Relu_0:0:0 */;
  %4 = transpose(%C, axes=[1, 0]) /* ty=Tensor[(2, 2), float64] 
span=MatMul_1:0:0 */;
  %5 = nn.dense(%3, %4, units=None, out_dtype="float64") /* ty=Tensor[(2, 2), 
float64] span=MatMul_1:0:0 */;
  add(%5, %D) /* ty=Tensor[(2, 2), float64] span=Add_1:0:0 */
}
```
I wonder which function should I get to run the entire model? Are there any 
possible ways to run the binary file?

Thank you very much!





---
[Visit 
Topic](https://discuss.tvm.apache.org/t/run-relay-generated-binary/18072/1) to 
respond.

You are receiving this because you enabled mailing list mode.

To unsubscribe from these emails, [click 
here](https://discuss.tvm.apache.org/email/unsubscribe/e3039d546313baa66afe297b63f5e1239a249d8ebb4a5a0d58c910d2ac26507c).

Reply via email to