Civitasv opened a new issue, #15379:
URL: https://github.com/apache/tvm/issues/15379

   I'm using TVM's BYOC approach to integrate TVM and TensorRT. But I observe a 
huge significant performance gap between them.
   
   Firstly, I am using the VAE decoder model.
   Upon using TensorRT directly, the performance summary is as follows:
   
   ```txt
   [07/21/2023-17:37:24] [I] === Performance summary ===
   [07/21/2023-17:37:24] [I] Throughput: 29.5276 qps
   [07/21/2023-17:37:24] [I] Latency: min = 32.5517 ms, max = 41.0814 ms, mean 
= 33.5797 ms, median = 33.2942 ms, percentile(90%) = 34.4155 ms, 
percentile(95%) = 34.7879 ms, percentile(99%) = 41.0814 ms
   [07/21/2023-17:37:24] [I] Enqueue Time: min = 1.86743 ms, max = 3.68506 ms, 
mean = 3.11519 ms, median = 3.28667 ms, percentile(90%) = 3.34058 ms, 
percentile(95%) = 3.36389 ms, percentile(99%) = 3.68506 ms
   [07/21/2023-17:37:24] [I] H2D Latency: min = 0.0218506 ms, max = 0.0581055 
ms, mean = 0.0320333 ms, median = 0.0335693 ms, percentile(90%) = 0.0351562 ms, 
percentile(95%) = 0.0424805 ms, percentile(99%) = 0.0581055 ms
   [07/21/2023-17:37:24] [I] GPU Compute Time: min = 32.4423 ms, max = 40.9753 
ms, mean = 33.4738 ms, median = 33.1878 ms, percentile(90%) = 34.3101 ms, 
percentile(95%) = 34.689 ms, percentile(99%) = 40.9753 ms
   [07/21/2023-17:37:24] [I] D2H Latency: min = 0.0646973 ms, max = 0.0771484 
ms, mean = 0.0739099 ms, median = 0.0740356 ms, percentile(90%) = 0.0749512 ms, 
percentile(95%) = 0.0751953 ms, percentile(99%) = 0.0771484 ms
   ```
   You can see it is about 34ms.
   
   But when I use TVM's BYOC strategy using the following script:
   
   ```py
   from tvm.relay.op.contrib import tensorrt
   
   ...
   mod = tensorrt.partition_for_tensorrt(mod, params, target)
   
   with tvm.transform.PassContext(opt_level=3):
       lib = relay.build(mod, target="cuda", params=params)
   
   # load parameters
   dev = tvm.cuda(0)
   module_exec = runtime.GraphModule(lib["default"](dev))
   
   print(module_exec.benchmark(dev, number=1, repeat=10))
   ```
   
   It shows me like:
   
   ```txt
   Execution time summary:
    mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)
     101.8611     101.3974     103.1465     101.3486      0.6918
   ```
   
   You can see it is about 101ms.
   
   And I can confirm the BYOC of TensorRT works, the runtime module structure 
looks like:
   
   ```txt
   Runtime module structure:
            Module(const_loader, 3d6d3e8)
             |- Module(llvm, d523f68)
             |- Module(tensorrt, d71b768)
             |- Module(tensorrt, d7425f8)
             |- Module(tensorrt, 36c1758)
             |- Module(tensorrt, 4ad32c8)
             |- Module(tensorrt, 3a77638)
             |- Module(tensorrt, 4aed8f8)
             |- Module(tensorrt, 3a38aa8)
             |- Module(tensorrt, 4a83748)
             |- Module(tensorrt, dcb4bf8)
             |- Module(tensorrt, 3eab758)
             |- Module(tensorrt, d712598)
             |- Module(tensorrt, dc46f48)
             |- Module(tensorrt, dc79f88)
             |- Module(tensorrt, dc4e5e8)
             |- Module(tensorrt, dca49c8)
             |- Module(tensorrt, da5cee8)
             |- Module(tensorrt, 3e32938)
             |- Module(tensorrt, db029b8)
             |- Module(tensorrt, dd11098)
             |- Module(tensorrt, dcd3938)
             |- Module(tensorrt, da4cd08)
             |- Module(tensorrt, daa4368)
             |- Module(tensorrt, 3df0448)
             |- Module(tensorrt, 3dd8858)
             |- Module(tensorrt, db07f08)
             |- Module(tensorrt, dcffc58)
             |- Module(tensorrt, d859fd8)
             |- Module(tensorrt, 3eba938)
             |- Module(tensorrt, 3ddfc88)
             |- Module(tensorrt, 3e04dd8)
             |- Module(tensorrt, d737348)
             |- Module(tensorrt, dcd4ce8)
             |- Module(tensorrt, da84218)
             |- Module(tensorrt, da9c6c8)
             |- Module(tensorrt, dcab6d8)
             |- Module(tensorrt, da73148)
             |- Module(tensorrt, daebc08)
             |- Module(tensorrt, 3e448f8)
             |- Module(tensorrt, dc61778)
             |- Module(tensorrt, dacb768)
             |- Module(tensorrt, dd3e3d8)
             |- Module(tensorrt, daabff8)
   ```
   
   And the operator profile looks like:
   
   ```txt
   Total number of operators: 85
   Detail breakdown
           I.GlobalVar("tvmgen_default_tensorrt_main_172"): 1
           Op(nn.instance_norm): 30
           I.GlobalVar("tvmgen_default_tensorrt_main_162"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_152"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_142"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_139"): 1
           Op(image.resize2d): 3
           I.GlobalVar("tvmgen_default_tensorrt_main_129"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_119"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_109"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_106"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_96"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_86"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_76"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_74"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_64"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_54"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_44"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_34"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_0"): 1
           Op(reshape): 8
           I.GlobalVar("tvmgen_default_tensorrt_main_30"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_26"): 1
           Op(cast): 2
           I.GlobalVar("tvmgen_default_tensorrt_main_25"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_1"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_18"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_15"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_5"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_2"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_6"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_21"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_28"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_35"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_45"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_55"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_65"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_77"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_87"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_97"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_110"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_120"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_130"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_143"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_153"): 1
           I.GlobalVar("tvmgen_default_tensorrt_main_163"): 1
   TensorRT subgraph #: 42
   ```
   
   ### Expected behavior
   
   I think the performance should be equal, or even TVM is better.
   
   ### Actual behavior
   
   The performance gap between TensorRT and TVM's BYOC is huge.
   
   ### Environment
   
   OS: Ubuntu 20.04
   TVM: Latest unity branch
   
   ### Steps to reproduce
   
   I'm using the vae_decoder onnx model. I will attach it.
   
   ### Triage
   
   * byoc:tensorrt
   
   


-- 
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]

Reply via email to