[RELAY API] The simplest program

Hello, I’m studying tvm and I would like to look how tvm compiles NNs on the simplest example. I’ve wrote a such one:

from tvm import relay
import tvm.relay.op

x = relay.expr.var('x', relay.scalar_type('int64'), dtype = 'int64')
one = relay.expr.const(1, dtype = 'int64')
add = relay.op.tensor.add(x, one)
body = relay.expr.Call(add, [x, one])
func = tvm.relay.expr.Function([x], body, relay.scalar_type('int64'))

json, mod, params = tvm.relay.build(body, 'llvm')

But method tvm.relay.build reports an error

Traceback (most recent call last): File “example.py”, line 10, in json, mod, params = tvm.relay.build(body, ‘llvm’) File “/workspace/python/tvm/relay/build_module.py”, line 262, in build func = optimize(func, target, params) File “/workspace/python/tvm/relay/build_module.py”, line 161, in optimize func = ir_pass.infer_type(func) File “/workspace/python/tvm/relay/ir_pass.py”, line 45, in infer_type return _ir_pass.infer_type(expr, mod) File “/workspace/python/tvm/_ffi/_ctypes/function.py”, line 185, in call ctypes.byref(ret_val), ctypes.byref(ret_tcode))) File “/workspace/python/tvm/_ffi/base.py”, line 71, in check_call raise TVMError(py_str(_LIB.TVMGetLastError())) tvm._ffi.base.TVMError: [14:28:41] /home/udav/projects/tvm/src/relay/ir/error.cc:112: Error(s) have occurred. We have annotated the program with them:

In main: fn () { free_var %x: int64 %0 = add(%x, int64(1)) # an internal invariant was violdated whiletypechecking your program[14:28:41] /home/udav/projects/tvm/src/relay/pass/type_solver.cc:99: Check failed: resolved.defined() Unable to unify parent types: TensorType(, int64) and FuncTypeNode(, [TensorType(, int64), TensorType(, int64)], IncompleteTypeNode(0, 0x21f7670), )

Stack trace returned 10 entries: [bt] (0) /workspace/build/libtvm.so(+0x46f1a0) [0x7fef7e69c1a0] [bt] (1) /workspace/build/libtvm.so(+0x46f4c9) [0x7fef7e69c4c9] [bt] (2) /workspace/build/libtvm.so(+0xbadc7c) [0x7fef7eddac7c] [bt] (3) /workspace/build/libtvm.so(+0xba92f5) [0x7fef7edd62f5] [bt] (4) /workspace/build/libtvm.so(+0xbad4dc) [0x7fef7edda4dc] [bt] (5) /workspace/build/libtvm.so(+0xb1b99f) [0x7fef7ed4899f] [bt] (6) /workspace/build/libtvm.so(+0x9cbf7d) [0x7fef7ebf8f7d] [bt] (7) /workspace/build/libtvm.so(+0x9cbdb4) [0x7fef7ebf8db4] [bt] (8) /workspace/build/libtvm.so(+0x9cbbc9) [0x7fef7ebf8bc9] [bt] (9) /workspace/build/libtvm.so(+0x9cb8af) [0x7fef7ebf88af]

; %1 = %0(%x, int64(1)) # %1 }

Could anybody help me write an simple example please?

Thank you

Is my problem related to Model can Import by NNVM but failed on Relay ?

The relay global module is required to compile relay expression. The below modifications will compile and generate LLVM target code.

from tvm import relay
import tvm.relay.op

x = relay.expr.var('x', relay.scalar_type('int64'), dtype = 'int64')
one = relay.expr.const(1, dtype = 'int64')
add = relay.op.tensor.add(x, one)    
func = relay.expr.Function([x], add, relay.scalar_type('int64'))
mod = relay.Module.from_expr(func)
print("Relay module function:\n", mod.astext(show_meta_data=False))
graph, lib, params = tvm.relay.build(mod, 'llvm', params={})
print("TVM graph:\n", graph)
print("TVM parameters:\n", params)
print("TVM compiled target function:\n", lib.get_source())