如果有GPU,可以选择cuda
    未命名图片.png

    1. import numpy as np
    2. from tvm import relay
    3. from tvm.relay import testing
    4. import tvm
    5. from tvm.contrib import graph_runtime
    6. batch_size = 1
    7. num_class = 1000
    8. image_shape = (3, 224, 224)
    9. data_shape = (batch_size,) + image_shape
    10. out_shape = (batch_size, num_class)
    11. mod, params = relay.testing.resnet.get_workload(
    12. num_layers=18, batch_size=batch_size, image_shape=image_shape)
    13. # set show_meta_data=True if you want to show meta data
    14. print(mod.astext(show_meta_data=False))
    15. opt_level = 3
    16. target = tvm.target.cuda()
    17. with relay.build_config(opt_level=opt_level):
    18. graph, lib, params = relay.build_module.build(
    19. mod, target, params=params)
    20. # create random input
    21. ctx = tvm.gpu()
    22. data = np.random.uniform(-1, 1, size=data_shape).astype("float32")
    23. # create module
    24. module = graph_runtime.create(graph, lib, ctx)
    25. # set input and parameters
    26. module.set_input("data", data)
    27. module.set_input(**params)
    28. # run
    29. module.run()
    30. # get output
    31. out = module.get_output(0, tvm.nd.empty(out_shape)).asnumpy()
    32. # Print first 10 elements of output
    33. print(out.flatten()[0:10])

    如上图所示:
    target 是指构建目标,一般是一个字符串,例如”cuda”, “llvm”。
    ctx是部署模块的上下文。当只有一个TVMContext时,它可以是本地的或远程的。否则,列表中的第一个上下文将被用于部署模块。

    例如,使用GPU时,可以这么设置:
    target = ‘cuda’ #或 target = tvm.target.cuda()
    ctx=tvm.gpu(0) #或 ctx=tvm.gpu()

    如果没有GPU,也可以用CPU:
    target = ‘llvm’
    ctx=tvm.cpu(0)

    或是自定义的硬件:
    target = ‘llvm’
    ctx=tvm.vacc(0)