You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by tq...@apache.org on 2021/10/11 12:39:06 UTC

[tvm-site] branch asf-site updated: Docs build at Mon Oct 11 08:38:46 EDT 2021

This is an automated email from the ASF dual-hosted git repository.

tqchen pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/tvm-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new fc570b4  Docs build at Mon Oct 11 08:38:46 EDT 2021
fc570b4 is described below

commit fc570b40f69c7ba21fcb25c5a11764a3691886fb
Author: tqchen <tq...@gmail.com>
AuthorDate: Mon Oct 11 08:38:46 2021 -0400

    Docs build at Mon Oct 11 08:38:46 EDT 2021
---
 .../tune_relay_cuda.py                             |    0
 .../install.py                                     |    0
 .../tune_sparse_x86.py                             |    0
 .../deploy_sparse.ipynb                            |    0
 .../from_mxnet.py                                  |    0
 .../opt_gemm.ipynb                                 |    0
 .../micro_autotune.ipynb                           |  162 -
 .../reduction.ipynb                                |    0
 .../use_pass_infra.ipynb                           |  277 -
 .../convolution_opt.py                             |    0
 .../from_paddle.py                                 |  117 +
 .../tune_alu_vta.ipynb                             |    0
 .../tune_network_arm.py                            |    0
 .../tvmc_command_line_driver.py                    |  511 --
 .../deploy_prequantized_tflite.ipynb               |    0
 .../intrin_math.ipynb                              |    0
 .../matrix_multiply.ipynb                          |    0
 .../from_pytorch.ipynb                             |    0
 .../deploy_model_on_android.py                     |    0
 .../tvmc_command_line_driver.py                    |  512 ++
 .../from_tflite.ipynb                              |    0
 .../auto_scheduler_matmul_x86.ipynb                |    0
 .../extern_op.py                                   |    0
 .../tune_sparse_x86.ipynb                          |    0
 .../reduction.py                                   |    0
 .../install.ipynb                                  |    0
 .../autotvm_relay_x86.ipynb                        |    0
 .../micro_tflite.py                                |  321 +
 .../introduction.py                                |    0
 .../tune_relay_arm.py                              |    0
 .../autotvm_matmul_x86.ipynb                       |    0
 .../deploy_object_detection_pytorch.ipynb          |    0
 .../intro_topi.py                                  |    0
 .../from_coreml.py                                 |    0
 .../tensorize.ipynb                                |    0
 .../opt_conv_cuda.py                               |    0
 .../relay_quick_start.ipynb                        |    0
 .../deploy_model_on_rasp.py                        |    0
 .../tensor_expr_get_started.py                     |    0
 .../tensorize.py                                   |    0
 .../tensor_expr_get_started.ipynb                  |    0
 .../from_mxnet.ipynb                               |    0
 .../matrix_multiply_opt.ipynb                      |    0
 .../tune_network_arm.ipynb                         |    0
 .../from_caffe2.ipynb                              |    0
 .../use_pass_infra.py                              |  273 +
 .../deploy_prequantized_tflite.py                  |    0
 .../autotvm_relay_x86.py                           |    0
 .../micro_tflite.ipynb                             |  169 +
 .../tune_network_mali.ipynb                        |    0
 .../tune_conv2d_layer_cuda.ipynb                   |    0
 .../intro_topi.ipynb                               |    0
 .../tune_relay_mobile_gpu.py                       |    0
 .../deploy_detection.py                            |    0
 .../deploy_detection.ipynb                         |    0
 .../tune_network_mali.py                           |    0
 .../tune_relay_x86.py                              |    0
 .../tuple_inputs.py                                |    0
 .../696dd37904ef92773435ca321ff41bfb/from_onnx.py  |  135 -
 .../tune_conv2d_cuda.py                            |    0
 .../tune_relay_mobile_gpu.ipynb                    |    0
 .../tune_alu_vta.py                                |    0
 .../scan.ipynb                                     |    0
 .../tune_conv2d_cuda.ipynb                         |    0
 .../opt_conv_tensorcore.py                         |    0
 .../opt_conv_tensorcore.ipynb                      |    0
 .../cross_compilation_and_rpc.py                   |    0
 .../from_darknet.py                                |    0
 .../deploy_object_detection_pytorch.py             |    0
 .../from_onnx.ipynb                                |  151 +
 .../deploy_quantized.py                            |    0
 .../micro_reference_vm.py                          |    0
 .../deploy_model_on_rasp.ipynb                     |    0
 .../micro_reference_vm.ipynb                       |    0
 .../use_pass_infra.ipynb                           |  241 +
 .../from_tensorflow.py                             |    0
 .../matrix_multiply_opt.py                         |    0
 .../build_gcn.ipynb                                |    0
 .../vta_get_started.ipynb                          |    0
 .../from_tensorflow.ipynb                          |    0
 .../extern_op.ipynb                                |    0
 .../opt_conv_cuda.ipynb                            |    0
 .../scan.py                                        |    0
 .../autotvm_matmul_x86.py                          |    0
 .../tune_relay_x86.ipynb                           |    0
 .../deploy_classification.ipynb                    |    0
 .../opt_gemm.py                                    |    0
 .../deploy_sparse.py                               |    0
 .../micro_autotune.py                              |  258 +
 .../deploy_classification.py                       |    0
 .../introduction.ipynb                             |    0
 .../use_pass_infra.py                              |  303 -
 .../tuple_inputs.ipynb                             |    0
 .../deploy_quantized.ipynb                         |    0
 .../from_paddle.ipynb                              |  144 +
 .../from_tflite.py                                 |    0
 .../tedd.ipynb                                     |    0
 .../from_coreml.ipynb                              |    0
 .../tune_network_x86.ipynb                         |    0
 .../tune_network_cuda.ipynb                        |    0
 .../bring_your_own_datatypes.ipynb                 |    0
 .../tune_relay_vta.ipynb                           |    0
 .../convolution_opt.ipynb                          |    0
 .../schedule_primitives.ipynb                      |    0
 .../tune_relay_arm.ipynb                           |    0
 .../deploy_prequantized.ipynb                      |    0
 .../from_keras.py                                  |    0
 .../tedd.py                                        |    0
 .../from_keras.ipynb                               |    0
 .../low_level_custom_pass.py                       |    0
 .../relay_quick_start.py                           |    0
 .../deploy_ssd_gluoncv.py                          |    0
 .../micro_tflite.ipynb                             |  169 -
 .../use_pass_instrument.py                         |    0
 .../tune_relay_cuda.ipynb                          |    0
 .../vta_get_started.py                             |    0
 .../low_level_custom_pass.ipynb                    |    0
 .../tune_relay_vta.py                              |    0
 .../using_external_lib.py                          |    0
 .../intrin_math.py                                 |    0
 .../deploy_ssd_gluoncv.ipynb                       |    0
 .../schedule_primitives.py                         |    0
 .../build_gcn.py                                   |    0
 .../matrix_multiply.py                             |    0
 .../tvmc_command_line_driver.ipynb                 |  141 -
 .../from_caffe2.py                                 |    0
 .../tune_conv2d_layer_cuda.py                      |    0
 .../tune_network_x86.py                            |    0
 .../from_onnx.ipynb                                |  151 -
 .../auto_scheduler_matmul_x86.py                   |    0
 .../tune_network_cuda.py                           |    0
 .../eb551cfff8900ec35fae9f15aa728e45/from_onnx.py  |  135 +
 .../using_external_lib.ipynb                       |    0
 .../bring_your_own_datatypes.py                    |    0
 .../deploy_model_on_android.ipynb                  |    0
 .../tvmc_command_line_driver.ipynb                 |  141 +
 .../cross_compilation_and_rpc.ipynb                |    0
 .../micro_autotune.py                              |  250 -
 .../use_pass_instrument.ipynb                      |    0
 .../micro_autotune.ipynb                           |  162 +
 .../from_pytorch.py                                |    0
 .../from_darknet.ipynb                             |    0
 .../deploy_prequantized.py                         |    0
 .../micro_tflite.py                                |  319 -
 docs/_images/sphx_glr_from_onnx_001.png            |  Bin 164343 -> 164348 bytes
 docs/_images/sphx_glr_from_onnx_thumb.png          |  Bin 65645 -> 65645 bytes
 docs/_images/sphx_glr_from_paddle_thumb.png        |  Bin 0 -> 26786 bytes
 docs/_sources/api/links.rst.txt                    |   25 -
 docs/_sources/{dev => arch}/benchmark.rst.txt      |    0
 docs/_sources/{dev => arch}/convert_layout.rst.txt |    0
 docs/_sources/{dev => arch}/debugger.rst.txt       |    0
 .../device_target_interactions.rst.txt             |    0
 .../{dev => arch}/frontend/tensorflow.rst.txt      |    0
 docs/_sources/{dev => arch}/hybrid_script.rst.txt  |    0
 docs/_sources/{dev => arch}/index.rst.txt          |    0
 docs/_sources/{dev => arch}/inferbound.rst.txt     |    0
 .../introduction_to_module_serialization.rst.txt   |    0
 docs/_sources/arch/microtvm_design.rst.txt         |  351 +
 .../{dev => arch}/model_library_format.rst.txt     |    0
 docs/_sources/{dev => arch}/pass_infra.rst.txt     |    0
 docs/_sources/{dev => arch}/relay_intro.rst.txt    |    0
 .../{dev => arch}/relay_op_strategy.rst.txt        |    0
 docs/_sources/{dev => arch}/runtime.rst.txt        |    0
 .../_sources/{dev => arch}/runtimes/vulkan.rst.txt |    0
 docs/_sources/{dev => arch}/security.rst.txt       |    0
 docs/_sources/arch/virtual_machine.rst.txt         |  410 +
 docs/_sources/contribute/document.rst.txt          |  177 +-
 docs/_sources/contribute/index.rst.txt             |    2 +-
 docs/_sources/deploy/index.rst.txt                 |  179 -
 docs/_sources/deploy/vitis_ai.rst.txt              |  709 --
 docs/_sources/dev/how_to.rst.txt                   |   32 -
 docs/_sources/dev/how_to/how_to.rst.txt            |   31 +
 .../pytest_target_parametrization.rst.txt          |    0
 .../_sources/dev/{ => how_to}/relay_add_op.rst.txt |    0
 .../dev/{ => how_to}/relay_add_pass.rst.txt        |    0
 .../relay_bring_your_own_codegen.rst.txt           |    0
 docs/_sources/dev/microtvm_design.rst.txt          |  349 -
 .../{ => tutorial}/codebase_walkthrough.rst.txt    |    0
 docs/_sources/dev/tutorial/index.rst.txt           |   29 +
 docs/_sources/dev/virtual_machine.rst.txt          |  409 -
 docs/_sources/errors.rst.txt                       |    4 +-
 .../how_to/compile_models/from_caffe2.rst.txt      |  220 +
 .../how_to/compile_models/from_coreml.rst.txt      |  193 +
 .../how_to/compile_models/from_darknet.rst.txt     |  318 +
 .../how_to/compile_models/from_keras.rst.txt       |  229 +
 .../how_to/compile_models/from_mxnet.rst.txt       |  246 +
 .../how_to/compile_models/from_onnx.rst.txt        |  222 +
 .../how_to/compile_models/from_paddle.rst.txt      |  208 +
 .../how_to/compile_models/from_pytorch.rst.txt     |  262 +
 .../how_to/compile_models/from_tensorflow.rst.txt  |  411 +
 .../how_to/compile_models/from_tflite.rst.txt      |  285 +
 docs/_sources/how_to/compile_models/index.rst.txt  |  226 +
 .../compile_models/sg_execution_times.rst.txt      |   19 +
 docs/_sources/{ => how_to}/deploy/android.rst.txt  |    0
 .../{ => how_to}/deploy/arm_compute_lib.rst.txt    |    0
 docs/_sources/{ => how_to}/deploy/bnns.rst.txt     |    0
 .../{ => how_to}/deploy/cpp_deploy.rst.txt         |    0
 docs/_sources/{ => how_to}/deploy/hls.rst.txt      |    0
 docs/_sources/how_to/deploy/index.rst.txt          |  189 +
 .../_sources/{ => how_to}/deploy/integrate.rst.txt |    0
 docs/_sources/{ => how_to}/deploy/tensorrt.rst.txt |    0
 docs/_sources/how_to/deploy/vitis_ai.rst.txt       |  482 ++
 .../deploy_models/deploy_model_on_android.rst.txt  |  451 +
 .../deploy_models/deploy_model_on_rasp.rst.txt     |  334 +
 .../deploy_object_detection_pytorch.rst.txt        |  278 +
 .../deploy_models/deploy_prequantized.rst.txt      |  405 +
 .../deploy_prequantized_tflite.rst.txt             |  417 +
 .../how_to/deploy_models/deploy_quantized.rst.txt  |  247 +
 .../how_to/deploy_models/deploy_sparse.rst.txt     |  460 ++
 .../deploy_models/deploy_ssd_gluoncv.rst.txt       |  231 +
 docs/_sources/how_to/deploy_models/index.rst.txt   |  185 +
 .../deploy_models/sg_execution_times.rst.txt       |   17 +
 .../extend_tvm/bring_your_own_datatypes.rst.txt    |  671 ++
 docs/_sources/how_to/extend_tvm/index.rst.txt      |  106 +
 .../extend_tvm/low_level_custom_pass.rst.txt       |  272 +
 .../how_to/extend_tvm/sg_execution_times.rst.txt   |   13 +
 .../how_to/extend_tvm/use_pass_infra.rst.txt       |  666 ++
 .../how_to/extend_tvm/use_pass_instrument.rst.txt  |  779 ++
 docs/_sources/how_to/index.rst.txt                 |   39 +
 .../how_to/optimize_operators/index.rst.txt        |   84 +
 .../optimize_operators/opt_conv_cuda.rst.txt       |  329 +
 .../optimize_operators/opt_conv_tensorcore.rst.txt |  652 ++
 .../how_to/optimize_operators/opt_gemm.rst.txt     |  832 ++
 .../optimize_operators/sg_execution_times.rst.txt  |   12 +
 docs/_sources/how_to/profile/index.rst.txt         |   24 +
 .../{profiling => how_to/profile}/papi.rst.txt     |    0
 .../how_to/tune_with_autoscheduler/index.rst.txt   |  145 +
 .../sg_execution_times.rst.txt                     |   15 +
 .../tune_conv2d_layer_cuda.rst.txt                 | 1377 +++
 .../tune_network_arm.rst.txt                       |  698 ++
 .../tune_network_cuda.rst.txt                      |  665 ++
 .../tune_network_mali.rst.txt                      |  620 ++
 .../tune_network_x86.rst.txt                       |  684 ++
 .../tune_sparse_x86.rst.txt                        |  504 ++
 .../how_to/tune_with_autotvm/index.rst.txt         |  128 +
 .../tune_with_autotvm/sg_execution_times.rst.txt   |   14 +
 .../tune_with_autotvm/tune_conv2d_cuda.rst.txt     |  347 +
 .../tune_with_autotvm/tune_relay_arm.rst.txt       |  473 ++
 .../tune_with_autotvm/tune_relay_cuda.rst.txt      |  450 +
 .../tune_relay_mobile_gpu.rst.txt                  |  470 ++
 .../tune_with_autotvm/tune_relay_x86.rst.txt       |  353 +
 .../how_to/work_with_microtvm/index.rst.txt        |   86 +
 .../work_with_microtvm/micro_autotune.rst.txt      |  367 +
 .../work_with_microtvm/micro_reference_vm.rst.txt  |  178 +
 .../how_to/work_with_microtvm/micro_tflite.rst.txt |  449 +
 .../work_with_microtvm/sg_execution_times.rst.txt  |   12 +
 .../how_to/work_with_relay/build_gcn.rst.txt       |  539 ++
 docs/_sources/how_to/work_with_relay/index.rst.txt |   61 +
 .../work_with_relay/sg_execution_times.rst.txt     |   11 +
 .../work_with_relay/using_external_lib.rst.txt     |  622 ++
 .../how_to/work_with_schedules/extern_op.rst.txt   |  211 +
 .../how_to/work_with_schedules/index.rst.txt       |  181 +
 .../how_to/work_with_schedules/intrin_math.rst.txt |  401 +
 .../how_to/work_with_schedules/reduction.rst.txt   |  519 ++
 .../how_to/work_with_schedules/scan.rst.txt        |  327 +
 .../schedule_primitives.rst.txt                    |  592 ++
 .../work_with_schedules/sg_execution_times.rst.txt |   17 +
 .../how_to/work_with_schedules/tedd.rst.txt        |  230 +
 .../how_to/work_with_schedules/tensorize.rst.txt   |  620 ++
 .../work_with_schedules/tuple_inputs.rst.txt       |  251 +
 docs/_sources/index.rst.txt                        |   81 +-
 docs/_sources/install/from_source.rst.txt          |   30 +-
 docs/_sources/install/index.rst.txt                |   20 +-
 docs/_sources/install/tlcpack.rst.txt              |   24 +
 docs/_sources/microtvm/index.rst.txt               |   73 -
 docs/_sources/profiling/index.rst.txt              |   24 -
 docs/_sources/reference/api/links.rst.txt          |   26 +
 .../api/python/auto_scheduler.rst.txt              |    0
 .../{ => reference}/api/python/autotvm.rst.txt     |    0
 .../{ => reference}/api/python/contrib.rst.txt     |    0
 .../{ => reference}/api/python/driver.rst.txt      |    0
 .../{ => reference}/api/python/error.rst.txt       |    0
 .../api/python/graph_executor.rst.txt              |    0
 .../{ => reference}/api/python/index.rst.txt       |    0
 .../_sources/{ => reference}/api/python/ir.rst.txt |    0
 .../{ => reference}/api/python/micro.rst.txt       |    0
 .../{ => reference}/api/python/ndarray.rst.txt     |    0
 .../api/python/relay/analysis.rst.txt              |    0
 .../api/python/relay/backend.rst.txt               |    0
 .../api/python/relay/dataflow_pattern.rst.txt      |    0
 .../api/python/relay/frontend.rst.txt              |    0
 .../{ => reference}/api/python/relay/image.rst.txt |    0
 .../{ => reference}/api/python/relay/index.rst.txt |    0
 .../{ => reference}/api/python/relay/nn.rst.txt    |    0
 .../api/python/relay/testing.rst.txt               |    0
 .../api/python/relay/transform.rst.txt             |    0
 .../api/python/relay/vision.rst.txt                |    0
 .../{ => reference}/api/python/rpc.rst.txt         |    0
 .../{ => reference}/api/python/runtime.rst.txt     |    0
 .../{ => reference}/api/python/target.rst.txt      |    0
 .../_sources/{ => reference}/api/python/te.rst.txt |    0
 .../{ => reference}/api/python/tir.rst.txt         |    0
 .../{ => reference}/api/python/topi.rst.txt        |    0
 .../{ => reference}/api/python/vta/index.rst.txt   |    0
 .../{ => reference}/langref/hybrid_script.rst.txt  |    0
 .../_sources/{ => reference}/langref/index.rst.txt |    0
 .../{ => reference}/langref/relay_adt.rst.txt      |    0
 .../{ => reference}/langref/relay_expr.rst.txt     |    0
 .../{ => reference}/langref/relay_op.rst.txt       |    0
 .../{ => reference}/langref/relay_pattern.rst.txt  |    0
 .../{ => reference}/langref/relay_type.rst.txt     |    0
 docs/_sources/reference/publications.rst.txt       |   31 +
 docs/_sources/topic/microtvm/index.rst.txt         |   73 +
 docs/_sources/{ => topic}/vta/dev/config.rst.txt   |    0
 docs/_sources/{ => topic}/vta/dev/hardware.rst.txt |    0
 docs/_sources/{ => topic}/vta/dev/index.rst.txt    |    0
 docs/_sources/topic/vta/index.rst.txt              |   55 +
 docs/_sources/{ => topic}/vta/install.rst.txt      |    0
 .../tutorials/autotvm/sg_execution_times.rst.txt   |   11 +
 .../vta/tutorials/autotvm/tune_alu_vta.rst.txt     |  393 +
 .../vta/tutorials/autotvm/tune_relay_vta.rst.txt   |  597 ++
 .../frontend/deploy_classification.rst.txt         |  407 +
 .../tutorials/frontend/deploy_detection.rst.txt    |  430 +
 .../tutorials/frontend/sg_execution_times.rst.txt  |   11 +
 docs/_sources/topic/vta/tutorials/index.rst.txt    |  221 +
 .../topic/vta/tutorials/matrix_multiply.rst.txt    |  736 ++
 .../vta/tutorials/optimize/convolution_opt.rst.txt |  875 ++
 .../tutorials/optimize/matrix_multiply_opt.rst.txt |  680 ++
 .../tutorials/optimize/sg_execution_times.rst.txt  |   11 +
 .../topic/vta/tutorials/sg_execution_times.rst.txt |   11 +
 .../topic/vta/tutorials/vta_get_started.rst.txt    |  636 ++
 .../tutorial/auto_scheduler_matmul_x86.rst.txt     |  435 +
 docs/_sources/tutorial/autotvm_matmul_x86.rst.txt  |  474 ++
 docs/_sources/tutorial/autotvm_relay_x86.rst.txt   |  683 ++
 .../tutorial/cross_compilation_and_rpc.rst.txt     |  342 +
 docs/_sources/tutorial/index.rst.txt               |  229 +
 docs/_sources/tutorial/install.rst.txt             |   67 +
 docs/_sources/tutorial/intro_topi.rst.txt          |  595 ++
 docs/_sources/tutorial/introduction.rst.txt        |  152 +
 docs/_sources/tutorial/relay_quick_start.rst.txt   |  352 +
 docs/_sources/tutorial/sg_execution_times.rst.txt  |   19 +
 .../tutorial/tensor_expr_get_started.rst.txt       | 1523 ++++
 .../tutorial/tvmc_command_line_driver.rst.txt      |  512 ++
 .../auto_scheduler/sg_execution_times.rst.txt      |   15 -
 .../auto_scheduler/tune_conv2d_layer_cuda.rst.txt  | 1377 ---
 .../auto_scheduler/tune_network_arm.rst.txt        |  698 --
 .../auto_scheduler/tune_network_cuda.rst.txt       |  665 --
 .../auto_scheduler/tune_network_mali.rst.txt       |  620 --
 .../auto_scheduler/tune_network_x86.rst.txt        |  684 --
 .../auto_scheduler/tune_sparse_x86.rst.txt         |  507 --
 .../tutorials/autotvm/sg_execution_times.rst.txt   |   14 -
 .../tutorials/autotvm/tune_conv2d_cuda.rst.txt     |  347 -
 .../tutorials/autotvm/tune_relay_arm.rst.txt       |  473 --
 .../tutorials/autotvm/tune_relay_cuda.rst.txt      |  450 -
 .../autotvm/tune_relay_mobile_gpu.rst.txt          |  470 --
 .../tutorials/autotvm/tune_relay_x86.rst.txt       |  353 -
 .../tutorials/dev/bring_your_own_datatypes.rst.txt |  671 --
 .../tutorials/dev/low_level_custom_pass.rst.txt    |  272 -
 .../tutorials/dev/sg_execution_times.rst.txt       |   13 -
 docs/_sources/tutorials/dev/use_pass_infra.rst.txt |  797 --
 .../tutorials/dev/use_pass_instrument.rst.txt      |  779 --
 docs/_sources/tutorials/frontend/build_gcn.rst.txt |  544 --
 .../frontend/deploy_model_on_android.rst.txt       |  451 -
 .../frontend/deploy_model_on_rasp.rst.txt          |  325 -
 .../deploy_object_detection_pytorch.rst.txt        |  271 -
 .../tutorials/frontend/deploy_prequantized.rst.txt |  414 -
 .../frontend/deploy_prequantized_tflite.rst.txt    |  417 -
 .../tutorials/frontend/deploy_quantized.rst.txt    |  243 -
 .../tutorials/frontend/deploy_sparse.rst.txt       |  460 --
 .../tutorials/frontend/deploy_ssd_gluoncv.rst.txt  |  233 -
 .../tutorials/frontend/from_caffe2.rst.txt         |  236 -
 .../tutorials/frontend/from_coreml.rst.txt         |  193 -
 .../tutorials/frontend/from_darknet.rst.txt        |  318 -
 .../_sources/tutorials/frontend/from_keras.rst.txt |  229 -
 .../_sources/tutorials/frontend/from_mxnet.rst.txt |  247 -
 docs/_sources/tutorials/frontend/from_onnx.rst.txt |  222 -
 .../tutorials/frontend/from_pytorch.rst.txt        |  271 -
 .../tutorials/frontend/from_tensorflow.rst.txt     |  411 -
 .../tutorials/frontend/from_tflite.rst.txt         |  285 -
 .../tutorials/frontend/sg_execution_times.rst.txt  |   28 -
 .../tutorials/frontend/using_external_lib.rst.txt  |  622 --
 .../get_started/auto_scheduler_matmul_x86.rst.txt  |  435 -
 .../get_started/autotvm_matmul_x86.rst.txt         |  474 --
 .../get_started/autotvm_relay_x86.rst.txt          |  685 --
 .../get_started/cross_compilation_and_rpc.rst.txt  |  342 -
 .../_sources/tutorials/get_started/install.rst.txt |   67 -
 .../tutorials/get_started/introduction.rst.txt     |  152 -
 .../get_started/relay_quick_start.rst.txt          |  352 -
 .../get_started/sg_execution_times.rst.txt         |   18 -
 .../get_started/tensor_expr_get_started.rst.txt    | 1523 ----
 .../get_started/tvmc_command_line_driver.rst.txt   |  511 --
 docs/_sources/tutorials/index.rst.txt              | 1295 ---
 docs/_sources/tutorials/language/extern_op.rst.txt |  211 -
 .../tutorials/language/intrin_math.rst.txt         |  401 -
 docs/_sources/tutorials/language/reduction.rst.txt |  519 --
 docs/_sources/tutorials/language/scan.rst.txt      |  327 -
 .../tutorials/language/schedule_primitives.rst.txt |  592 --
 .../tutorials/language/sg_execution_times.rst.txt  |   17 -
 docs/_sources/tutorials/language/tedd.rst.txt      |  230 -
 docs/_sources/tutorials/language/tensorize.rst.txt |  620 --
 .../tutorials/language/tuple_inputs.rst.txt        |  251 -
 .../tutorials/micro/micro_autotune.rst.txt         |  367 -
 .../tutorials/micro/micro_reference_vm.rst.txt     |  178 -
 docs/_sources/tutorials/micro/micro_tflite.rst.txt |  447 -
 .../tutorials/micro/sg_execution_times.rst.txt     |   12 -
 .../tutorials/optimize/opt_conv_cuda.rst.txt       |  329 -
 .../tutorials/optimize/opt_conv_tensorcore.rst.txt |  652 --
 docs/_sources/tutorials/optimize/opt_gemm.rst.txt  |  832 --
 .../tutorials/optimize/sg_execution_times.rst.txt  |   12 -
 docs/_sources/tutorials/topi/intro_topi.rst.txt    |  595 --
 .../tutorials/topi/sg_execution_times.rst.txt      |   10 -
 docs/_sources/vta/index.rst.txt                    |   55 -
 .../tutorials/autotvm/sg_execution_times.rst.txt   |   11 -
 .../vta/tutorials/autotvm/tune_alu_vta.rst.txt     |  393 -
 .../vta/tutorials/autotvm/tune_relay_vta.rst.txt   |  597 --
 .../frontend/deploy_classification.rst.txt         |  403 -
 .../tutorials/frontend/deploy_detection.rst.txt    |  428 -
 .../tutorials/frontend/sg_execution_times.rst.txt  |   11 -
 docs/_sources/vta/tutorials/index.rst.txt          |  221 -
 .../_sources/vta/tutorials/matrix_multiply.rst.txt |  736 --
 .../vta/tutorials/optimize/convolution_opt.rst.txt |  875 --
 .../tutorials/optimize/matrix_multiply_opt.rst.txt |  680 --
 .../tutorials/optimize/sg_execution_times.rst.txt  |   11 -
 .../vta/tutorials/sg_execution_times.rst.txt       |   11 -
 .../_sources/vta/tutorials/vta_get_started.rst.txt |  636 --
 docs/api/doxygen/affine__type_8h.html              |    2 +-
 docs/api/doxygen/affine__type_8h__incl.svg         | 1230 +--
 docs/api/doxygen/affine__type_8h_source.html       |    2 +-
 docs/api/doxygen/algorithm_8h__incl.svg            |  652 +-
 docs/api/doxygen/algorithm_8h_source.html          |    2 +-
 docs/api/doxygen/analyzer_8h.html                  |    2 +-
 docs/api/doxygen/analyzer_8h__dep__incl.svg        |  636 +-
 docs/api/doxygen/analyzer_8h__incl.svg             | 1530 ++--
 docs/api/doxygen/analyzer_8h_source.html           |    2 +-
 docs/api/doxygen/annotated.html                    | 1405 ++--
 docs/api/doxygen/annotation_8h.html                |    4 +-
 docs/api/doxygen/annotation_8h__incl.svg           | 1310 +--
 docs/api/doxygen/annotation_8h_source.html         |   30 +-
 docs/api/doxygen/arg__info_8h.html                 |  121 +
 docs/api/doxygen/arg__info_8h__dep__incl.svg       |   96 +
 docs/api/doxygen/arg__info_8h__incl.svg            | 1574 ++++
 docs/api/doxygen/arg__info_8h_source.html          |  103 +
 docs/api/doxygen/array_8h.html                     |    4 +-
 docs/api/doxygen/array_8h__dep__incl.svg           | 1670 ++--
 docs/api/doxygen/array_8h_source.html              |    2 +-
 docs/api/doxygen/array__utils_8h.html              |    2 +-
 docs/api/doxygen/array__utils_8h__dep__incl.svg    |   44 +-
 docs/api/doxygen/array__utils_8h__incl.svg         | 1578 ++--
 docs/api/doxygen/attr__registry__map_8h.html       |    4 +-
 .../doxygen/attr__registry__map_8h__dep__incl.svg  | 1294 ++-
 docs/api/doxygen/attr__registry__map_8h__incl.svg  |  286 +-
 .../api/doxygen/attr__registry__map_8h_source.html |    2 +-
 docs/api/doxygen/auto__schedule_8h__incl.svg       |  444 +-
 docs/api/doxygen/auto__schedule_8h_source.html     |    2 +-
 docs/api/doxygen/auto__scheduler_2feature_8h.html  |    2 +-
 .../doxygen/auto__scheduler_2feature_8h__incl.svg  | 1596 ++--
 docs/api/doxygen/autodiff_8h__incl.svg             | 1715 ++--
 docs/api/doxygen/autodiff_8h_source.html           |    2 +-
 docs/api/doxygen/bias__add_8h__incl.svg            |  700 +-
 docs/api/doxygen/bitserial_8h.html                 |    2 +-
 docs/api/doxygen/bitserial_8h__incl.svg            | 1593 ++--
 docs/api/doxygen/bitserial_8h_source.html          |    4 +-
 docs/api/doxygen/block__scope_8h.html              |    4 +-
 docs/api/doxygen/block__scope_8h__dep__incl.svg    |  118 +-
 docs/api/doxygen/block__scope_8h__incl.svg         | 1430 ++--
 docs/api/doxygen/block__scope_8h_source.html       |    2 +-
 docs/api/doxygen/bound_8h.html                     |    2 +-
 docs/api/doxygen/bound_8h__dep__incl.svg           |  628 +-
 docs/api/doxygen/bound_8h__incl.svg                | 1384 ++--
 docs/api/doxygen/broadcast_8h__dep__incl.svg       |   92 +-
 docs/api/doxygen/broadcast_8h__incl.svg            |  736 +-
 docs/api/doxygen/broadcast_8h_source.html          |    2 +-
 docs/api/doxygen/buffer_8h.html                    |    2 +-
 docs/api/doxygen/buffer_8h__dep__incl.svg          |  640 +-
 docs/api/doxygen/buffer_8h__incl.svg               | 1294 +--
 docs/api/doxygen/buffer_8h_source.html             |   25 +-
 docs/api/doxygen/builder_8h.html                   |  129 +
 docs/api/doxygen/builder_8h__dep__incl.svg         |   36 +
 docs/api/doxygen/builder_8h__incl.svg              | 1611 ++++
 docs/api/doxygen/builder_8h_source.html            |  110 +
 docs/api/doxygen/builtin_8h.html                   |    2 +-
 docs/api/doxygen/builtin_8h__dep__incl.svg         |  100 +-
 docs/api/doxygen/builtin_8h__incl.svg              | 1811 ++--
 docs/api/doxygen/bytecode_8h_source.html           |    2 +-
 docs/api/doxygen/c__backend__api_8h_source.html    |    4 +-
 docs/api/doxygen/c__runtime__api_8h.html           |    2 +-
 docs/api/doxygen/c__runtime__api_8h__dep__incl.svg | 1644 ++--
 docs/api/doxygen/c__runtime__api_8h_source.html    |    4 +-
 docs/api/doxygen/classes.html                      |  385 +-
 .../classtvm_1_1AttrFieldInfoNode__coll__graph.svg |   10 +-
 docs/api/doxygen/classtvm_1_1BaseAttrsNode.html    |   10 +-
 .../classtvm_1_1BaseAttrsNode__coll__graph.svg     |   16 +-
 .../classtvm_1_1ConstructorNode__coll__graph.svg   |   10 +-
 .../classtvm_1_1DiagnosticNode__coll__graph.svg    |   10 +-
 .../classtvm_1_1DictAttrsNode__coll__graph.svg     |    4 +-
 .../classtvm_1_1EnvFuncNode__coll__graph.svg       |   10 +-
 .../classtvm_1_1GlobalTypeVarNode__coll__graph.svg |   10 +-
 .../classtvm_1_1GlobalVarNode__coll__graph.svg     |   10 +-
 .../classtvm_1_1IRModuleNode__coll__graph.svg      |    8 +-
 .../doxygen/classtvm_1_1OpNode__coll__graph.svg    |   10 +-
 .../classtvm_1_1PointerTypeNode__coll__graph.svg   |   10 +-
 .../classtvm_1_1SourceNameNode__coll__graph.svg    |   10 +-
 .../classtvm_1_1TargetKindNode__coll__graph.svg    |   10 +-
 .../classtvm_1_1TargetNode__coll__graph.svg        |   14 +-
 .../classtvm_1_1TargetTagNode__coll__graph.svg     |   14 +-
 .../classtvm_1_1TypeVarNode__coll__graph.svg       |   10 +-
 ...1_1arith_1_1IntConstraintsNode__coll__graph.svg |    4 +-
 ...1_1IntConstraintsTransformNode__coll__graph.svg |    4 +-
 ...__scheduler_1_1BuildResultNode__coll__graph.svg |   10 +-
 ...scheduler_1_1CacheReadStepNode__coll__graph.svg |   10 +-
 ...cheduler_1_1CacheWriteStepNode__coll__graph.svg |   10 +-
 ...uto__scheduler_1_1IteratorNode__coll__graph.svg |   10 +-
 ..._scheduler_1_1LocalBuilderNode__coll__graph.svg |   10 +-
 ...scheduler_1_1MeasureResultNode__coll__graph.svg |   10 +-
 ...o__scheduler_1_1PragmaStepNode__coll__graph.svg |   10 +-
 ...r_1_1PreloadMeasuredStatesNode__coll__graph.svg |   10 +-
 ...to__scheduler_1_1RPCRunnerNode__coll__graph.svg |   10 +-
 ..._scheduler_1_1RecordReaderNode__coll__graph.svg |   10 +-
 ..._scheduler_1_1RecordToFileNode__coll__graph.svg |   10 +-
 ...o__scheduler_1_1SearchTaskNode__coll__graph.svg |   10 +-
 ...strument_1_1PassInstrumentNode__coll__graph.svg |   10 +-
 ...sstvm_1_1meta__schedule_1_1ArgInfo-members.html |  103 +
 .../classtvm_1_1meta__schedule_1_1ArgInfo.html     |  318 +
 ...m_1_1meta__schedule_1_1ArgInfoNode-members.html |  114 +
 .../classtvm_1_1meta__schedule_1_1ArgInfoNode.html |  312 +
 ...1meta__schedule_1_1ArgInfoNode__coll__graph.svg |   82 +
 ...ta__schedule_1_1ArgInfoNode__inherit__graph.svg |  100 +
 ...m_1_1meta__schedule_1_1ArgInfo__coll__graph.svg |   94 +
 ..._1meta__schedule_1_1ArgInfo__inherit__graph.svg |   87 +
 ...sstvm_1_1meta__schedule_1_1Builder-members.html |  101 +
 .../classtvm_1_1meta__schedule_1_1Builder.html     |  248 +
 ..._1_1meta__schedule_1_1BuilderInput-members.html |  101 +
 ...classtvm_1_1meta__schedule_1_1BuilderInput.html |  255 +
 ...meta__schedule_1_1BuilderInputNode-members.html |  115 +
 ...stvm_1_1meta__schedule_1_1BuilderInputNode.html |  319 +
 ...__schedule_1_1BuilderInputNode__coll__graph.svg |  208 +
 ...chedule_1_1BuilderInputNode__inherit__graph.svg |   77 +
 ...meta__schedule_1_1BuilderInput__coll__graph.svg |   91 +
 ...a__schedule_1_1BuilderInput__inherit__graph.svg |   61 +
 ...m_1_1meta__schedule_1_1BuilderNode-members.html |  115 +
 .../classtvm_1_1meta__schedule_1_1BuilderNode.html |  351 +
 ...1meta__schedule_1_1BuilderNode__coll__graph.svg |   82 +
 ...ta__schedule_1_1BuilderNode__inherit__graph.svg |   99 +
 ...1_1meta__schedule_1_1BuilderResult-members.html |  101 +
 ...lasstvm_1_1meta__schedule_1_1BuilderResult.html |  255 +
 ...eta__schedule_1_1BuilderResultNode-members.html |  115 +
 ...tvm_1_1meta__schedule_1_1BuilderResultNode.html |  319 +
 ..._schedule_1_1BuilderResultNode__coll__graph.svg |  178 +
 ...hedule_1_1BuilderResultNode__inherit__graph.svg |   77 +
 ...eta__schedule_1_1BuilderResult__coll__graph.svg |   91 +
 ...__schedule_1_1BuilderResult__inherit__graph.svg |   61 +
 ...m_1_1meta__schedule_1_1Builder__coll__graph.svg |   92 +
 ..._1meta__schedule_1_1Builder__inherit__graph.svg |   62 +
 ...stvm_1_1meta__schedule_1_1Database-members.html |  102 +
 .../classtvm_1_1meta__schedule_1_1Database.html    |  328 +
 ..._1_1meta__schedule_1_1DatabaseNode-members.html |  117 +
 ...classtvm_1_1meta__schedule_1_1DatabaseNode.html |  438 +
 ...meta__schedule_1_1DatabaseNode__coll__graph.svg |   85 +
 ...a__schedule_1_1DatabaseNode__inherit__graph.svg |  108 +
 ..._1_1meta__schedule_1_1Database__coll__graph.svg |   93 +
 ...1meta__schedule_1_1Database__inherit__graph.svg |   63 +
 ...meta__schedule_1_1MeasureCandidate-members.html |  101 +
 ...stvm_1_1meta__schedule_1_1MeasureCandidate.html |  247 +
 ...__schedule_1_1MeasureCandidateNode-members.html |  115 +
 ..._1_1meta__schedule_1_1MeasureCandidateNode.html |  319 +
 ...hedule_1_1MeasureCandidateNode__coll__graph.svg |  207 +
 ...ule_1_1MeasureCandidateNode__inherit__graph.svg |   77 +
 ...__schedule_1_1MeasureCandidate__coll__graph.svg |   91 +
 ...chedule_1_1MeasureCandidate__inherit__graph.svg |   61 +
 ...1_1meta__schedule_1_1PyBuilderNode-members.html |  118 +
 ...lasstvm_1_1meta__schedule_1_1PyBuilderNode.html |  353 +
 ...eta__schedule_1_1PyBuilderNode__coll__graph.svg |  105 +
 ...__schedule_1_1PyBuilderNode__inherit__graph.svg |   99 +
 ..._1meta__schedule_1_1PyDatabaseNode-members.html |  127 +
 ...asstvm_1_1meta__schedule_1_1PyDatabaseNode.html |  632 ++
 ...ta__schedule_1_1PyDatabaseNode__coll__graph.svg |  195 +
 ..._schedule_1_1PyDatabaseNode__inherit__graph.svg |  108 +
 ..._1_1meta__schedule_1_1PyRunnerNode-members.html |  118 +
 ...classtvm_1_1meta__schedule_1_1PyRunnerNode.html |  353 +
 ...meta__schedule_1_1PyRunnerNode__coll__graph.svg |  105 +
 ...a__schedule_1_1PyRunnerNode__inherit__graph.svg |   99 +
 ...__schedule_1_1PySearchStrategyNode-members.html |  130 +
 ..._1_1meta__schedule_1_1PySearchStrategyNode.html |  689 ++
 ...hedule_1_1PySearchStrategyNode__coll__graph.svg |  222 +
 ...ule_1_1PySearchStrategyNode__inherit__graph.svg |  113 +
 ...__schedule_1_1PySpaceGeneratorNode-members.html |  121 +
 ..._1_1meta__schedule_1_1PySpaceGeneratorNode.html |  464 ++
 ...hedule_1_1PySpaceGeneratorNode__coll__graph.svg |  151 +
 ...ule_1_1PySpaceGeneratorNode__inherit__graph.svg |  103 +
 ...a__schedule_1_1PyTaskSchedulerNode-members.html |  134 +
 ...m_1_1meta__schedule_1_1PyTaskSchedulerNode.html |  703 ++
 ...chedule_1_1PyTaskSchedulerNode__coll__graph.svg |  386 +
 ...dule_1_1PyTaskSchedulerNode__inherit__graph.svg |  116 +
 ...asstvm_1_1meta__schedule_1_1Runner-members.html |  102 +
 .../classtvm_1_1meta__schedule_1_1Runner.html      |  269 +
 ..._1_1meta__schedule_1_1RunnerFuture-members.html |  103 +
 ...classtvm_1_1meta__schedule_1_1RunnerFuture.html |  292 +
 ...meta__schedule_1_1RunnerFutureNode-members.html |  119 +
 ...stvm_1_1meta__schedule_1_1RunnerFutureNode.html |  427 +
 ...__schedule_1_1RunnerFutureNode__coll__graph.svg |  125 +
 ...chedule_1_1RunnerFutureNode__inherit__graph.svg |   79 +
 ...meta__schedule_1_1RunnerFuture__coll__graph.svg |   92 +
 ...a__schedule_1_1RunnerFuture__inherit__graph.svg |   62 +
 ...m_1_1meta__schedule_1_1RunnerInput-members.html |  101 +
 .../classtvm_1_1meta__schedule_1_1RunnerInput.html |  262 +
 ...1meta__schedule_1_1RunnerInputNode-members.html |  116 +
 ...sstvm_1_1meta__schedule_1_1RunnerInputNode.html |  338 +
 ...a__schedule_1_1RunnerInputNode__coll__graph.svg |  217 +
 ...schedule_1_1RunnerInputNode__inherit__graph.svg |   78 +
 ...1meta__schedule_1_1RunnerInput__coll__graph.svg |   91 +
 ...ta__schedule_1_1RunnerInput__inherit__graph.svg |   61 +
 ...vm_1_1meta__schedule_1_1RunnerNode-members.html |  115 +
 .../classtvm_1_1meta__schedule_1_1RunnerNode.html  |  352 +
 ..._1meta__schedule_1_1RunnerNode__coll__graph.svg |   82 +
 ...eta__schedule_1_1RunnerNode__inherit__graph.svg |   99 +
 ..._1_1meta__schedule_1_1RunnerResult-members.html |  101 +
 ...classtvm_1_1meta__schedule_1_1RunnerResult.html |  249 +
 ...meta__schedule_1_1RunnerResultNode-members.html |  115 +
 ...stvm_1_1meta__schedule_1_1RunnerResultNode.html |  319 +
 ...__schedule_1_1RunnerResultNode__coll__graph.svg |  215 +
 ...chedule_1_1RunnerResultNode__inherit__graph.svg |   77 +
 ...meta__schedule_1_1RunnerResult__coll__graph.svg |   91 +
 ...a__schedule_1_1RunnerResult__inherit__graph.svg |   61 +
 ...vm_1_1meta__schedule_1_1Runner__coll__graph.svg |   92 +
 ...1_1meta__schedule_1_1Runner__inherit__graph.svg |   62 +
 ..._1meta__schedule_1_1SearchStrategy-members.html |  102 +
 ...asstvm_1_1meta__schedule_1_1SearchStrategy.html |  328 +
 ...ta__schedule_1_1SearchStrategyNode-members.html |  118 +
 ...vm_1_1meta__schedule_1_1SearchStrategyNode.html |  466 ++
 ...schedule_1_1SearchStrategyNode__coll__graph.svg |   86 +
 ...edule_1_1SearchStrategyNode__inherit__graph.svg |  113 +
 ...ta__schedule_1_1SearchStrategy__coll__graph.svg |   92 +
 ..._schedule_1_1SearchStrategy__inherit__graph.svg |   62 +
 ..._1meta__schedule_1_1SpaceGenerator-members.html |  103 +
 ...asstvm_1_1meta__schedule_1_1SpaceGenerator.html |  329 +
 ...ta__schedule_1_1SpaceGeneratorNode-members.html |  115 +
 ...vm_1_1meta__schedule_1_1SpaceGeneratorNode.html |  361 +
 ...schedule_1_1SpaceGeneratorNode__coll__graph.svg |   83 +
 ...edule_1_1SpaceGeneratorNode__inherit__graph.svg |  103 +
 ...ta__schedule_1_1SpaceGenerator__coll__graph.svg |   94 +
 ..._schedule_1_1SpaceGenerator__inherit__graph.svg |   64 +
 ...1_1meta__schedule_1_1TaskScheduler-members.html |  102 +
 ...lasstvm_1_1meta__schedule_1_1TaskScheduler.html |  328 +
 ...eta__schedule_1_1TaskSchedulerNode-members.html |  123 +
 ...tvm_1_1meta__schedule_1_1TaskSchedulerNode.html |  572 ++
 ..._schedule_1_1TaskSchedulerNode__coll__graph.svg |  275 +
 ...hedule_1_1TaskSchedulerNode__inherit__graph.svg |  116 +
 ...eta__schedule_1_1TaskScheduler__coll__graph.svg |   93 +
 ...__schedule_1_1TaskScheduler__inherit__graph.svg |   63 +
 ...vm_1_1meta__schedule_1_1TensorInfo-members.html |  105 +
 .../classtvm_1_1meta__schedule_1_1TensorInfo.html  |  310 +
 ..._1meta__schedule_1_1TensorInfoNode-members.html |  118 +
 ...asstvm_1_1meta__schedule_1_1TensorInfoNode.html |  360 +
 ...ta__schedule_1_1TensorInfoNode__coll__graph.svg |  241 +
 ..._schedule_1_1TensorInfoNode__inherit__graph.svg |  100 +
 ..._1meta__schedule_1_1TensorInfo__coll__graph.svg |  117 +
 ...eta__schedule_1_1TensorInfo__inherit__graph.svg |   87 +
 ...m_1_1meta__schedule_1_1TuneContext-members.html |  101 +
 .../classtvm_1_1meta__schedule_1_1TuneContext.html |  290 +
 ...1meta__schedule_1_1TuneContextNode-members.html |  123 +
 ...sstvm_1_1meta__schedule_1_1TuneContextNode.html |  471 ++
 ...a__schedule_1_1TuneContextNode__coll__graph.svg |  406 +
 ...schedule_1_1TuneContextNode__inherit__graph.svg |   85 +
 ...1meta__schedule_1_1TuneContext__coll__graph.svg |   92 +
 ...ta__schedule_1_1TuneContext__inherit__graph.svg |   62 +
 ..._1_1meta__schedule_1_1TuningRecord-members.html |  102 +
 ...classtvm_1_1meta__schedule_1_1TuningRecord.html |  329 +
 ...meta__schedule_1_1TuningRecordNode-members.html |  119 +
 ...stvm_1_1meta__schedule_1_1TuningRecordNode.html |  399 +
 ...__schedule_1_1TuningRecordNode__coll__graph.svg |  311 +
 ...chedule_1_1TuningRecordNode__inherit__graph.svg |   81 +
 ...meta__schedule_1_1TuningRecord__coll__graph.svg |   92 +
 ...a__schedule_1_1TuningRecord__inherit__graph.svg |   62 +
 ...stvm_1_1meta__schedule_1_1Workload-members.html |  104 +
 .../classtvm_1_1meta__schedule_1_1Workload.html    |  355 +
 ..._1_1meta__schedule_1_1WorkloadNode-members.html |  117 +
 ...classtvm_1_1meta__schedule_1_1WorkloadNode.html |  366 +
 ...meta__schedule_1_1WorkloadNode__coll__graph.svg |  177 +
 ...a__schedule_1_1WorkloadNode__inherit__graph.svg |   78 +
 ..._1_1meta__schedule_1_1Workload__coll__graph.svg |   93 +
 ...1meta__schedule_1_1Workload__inherit__graph.svg |   63 +
 ...tvm_1_1parser_1_1SourceMapNode__coll__graph.svg |    4 +-
 ...asstvm_1_1parser_1_1SourceNode__coll__graph.svg |   10 +-
 .../classtvm_1_1relay_1_1IdNode__coll__graph.svg   |   10 +-
 ...relay_1_1InterpreterClosureObj__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1MixedModeVisitor.html     |    2 +-
 ...1relay_1_1OpImplementationNode__coll__graph.svg |   10 +-
 ...tvm_1_1relay_1_1VarPatternNode__coll__graph.svg |   10 +-
 docs/api/doxygen/classtvm_1_1runtime_1_1Array.html |    6 +-
 .../doxygen/classtvm_1_1runtime_1_1DeviceAPI.html  |   62 +-
 .../classtvm_1_1runtime_1_1InplaceArrayBase.html   |    4 +-
 .../classtvm_1_1runtime_1_1Map-members.html        |   53 +-
 docs/api/doxygen/classtvm_1_1runtime_1_1Map.html   |   31 +
 .../classtvm_1_1runtime_1_1Map__coll__graph.svg    |    2 +-
 .../classtvm_1_1runtime_1_1Map__inherit__graph.svg |    2 +-
 .../doxygen/classtvm_1_1runtime_1_1NDArray.html    |   14 +-
 ...lasstvm_1_1runtime_1_1NDArray_1_1Container.html |    4 +-
 .../api/doxygen/classtvm_1_1runtime_1_1Object.html |    2 +-
 .../doxygen/classtvm_1_1runtime_1_1ObjectRef.html  |    2 +-
 ...asstvm_1_1runtime_1_1ObjectRef__coll__graph.svg |   12 +-
 .../classtvm_1_1runtime_1_1Object__coll__graph.svg |    8 +-
 .../classtvm_1_1runtime_1_1SmallMapNode.html       |    2 +-
 .../classtvm_1_1runtime_1_1String-members.html     |    9 +-
 .../api/doxygen/classtvm_1_1runtime_1_1String.html |   37 +-
 .../classtvm_1_1runtime_1_1String__coll__graph.svg |   10 +-
 ...asstvm_1_1runtime_1_1String__inherit__graph.svg |   10 +-
 .../classtvm_1_1runtime_1_1TVMArgsSetter.html      |    4 +-
 .../classtvm_1_1runtime_1_1TVMPODValue__.html      |    2 +-
 docs/api/doxygen/classtvm_1_1runtime_1_1Timer.html |    6 +-
 ...m_1_1runtime_1_1profiling_1_1DeviceWrapper.html |    4 +-
 ...untime_1_1profiling_1_1MetricCollectorNode.html |    6 +-
 ...asstvm_1_1runtime_1_1profiling_1_1Profiler.html |   10 +-
 ...ime_1_1profiling_1_1ReportNode__coll__graph.svg |    4 +-
 .../classtvm_1_1runtime_1_1vm_1_1Allocator.html    |    4 +-
 ...classtvm_1_1runtime_1_1vm_1_1MemoryManager.html |    8 +-
 ...lasstvm_1_1runtime_1_1vm_1_1VirtualMachine.html |   12 +-
 ...upport_1_1LinearCongruentialEngine-members.html |   21 +-
 ...tvm_1_1support_1_1LinearCongruentialEngine.html |   33 +-
 ...rt_1_1LinearCongruentialEngine__coll__graph.svg |   29 +-
 ...tvm_1_1te_1_1BaseComputeOpNode__coll__graph.svg |    4 +-
 ...lasstvm_1_1te_1_1ComputeOpNode__coll__graph.svg |    4 +-
 ...classtvm_1_1te_1_1ExternOpNode__coll__graph.svg |    4 +-
 ...classtvm_1_1te_1_1HybridOpNode__coll__graph.svg |    4 +-
 ...lasstvm_1_1te_1_1OperationNode__coll__graph.svg |    4 +-
 ...tvm_1_1te_1_1PlaceholderOpNode__coll__graph.svg |    4 +-
 .../classtvm_1_1te_1_1ScanOpNode__coll__graph.svg  |    4 +-
 ...classtvm_1_1te_1_1ScheduleNode__coll__graph.svg |    4 +-
 .../classtvm_1_1te_1_1StageNode__coll__graph.svg   |    4 +-
 ...m_1_1te_1_1TensorComputeOpNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1Allocate-members.html       |    2 +-
 docs/api/doxygen/classtvm_1_1tir_1_1Allocate.html  |   14 +-
 .../classtvm_1_1tir_1_1AllocateNode-members.html   |   75 +-
 .../doxygen/classtvm_1_1tir_1_1AllocateNode.html   |   24 +-
 ...lasstvm_1_1tir_1_1AllocateNode__coll__graph.svg |  508 +-
 ...stvm_1_1tir_1_1AllocateNode__inherit__graph.svg |  127 +-
 ...lasstvm_1_1tir_1_1AttrStmtNode__coll__graph.svg |   10 +-
 docs/api/doxygen/classtvm_1_1tir_1_1BlockNode.html |    2 +-
 .../classtvm_1_1tir_1_1BlockNode__coll__graph.svg  |   14 +-
 .../classtvm_1_1tir_1_1BufferNode-members.html     |   59 +-
 .../api/doxygen/classtvm_1_1tir_1_1BufferNode.html |   28 +-
 .../classtvm_1_1tir_1_1BufferNode__coll__graph.svg |  399 +-
 ...asstvm_1_1tir_1_1BufferNode__inherit__graph.svg |  129 +-
 .../classtvm_1_1tir_1_1ForNode__coll__graph.svg    |    4 +-
 ..._1_1tir_1_1InstructionKindNode__coll__graph.svg |   10 +-
 ...classtvm_1_1tir_1_1IterVarNode__coll__graph.svg |   10 +-
 .../classtvm_1_1tir_1_1LayoutNode__coll__graph.svg |   10 +-
 ...lasstvm_1_1tir_1_1PrimFuncNode__coll__graph.svg |    4 +-
 ..._1_1tir_1_1ProducerRealizeNode__coll__graph.svg |   10 +-
 .../classtvm_1_1tir_1_1ScheduleNode-members.html   |  109 +-
 .../doxygen/classtvm_1_1tir_1_1ScheduleNode.html   |   54 +-
 ...lasstvm_1_1tir_1_1ScheduleNode__coll__graph.svg |    2 +-
 ...stvm_1_1tir_1_1ScheduleNode__inherit__graph.svg |    2 +-
 ...asstvm_1_1tir_1_1ScheduleStateNode-members.html |    3 +-
 .../classtvm_1_1tir_1_1ScheduleStateNode.html      |   27 +-
 ...vm_1_1tir_1_1ScheduleStateNode__coll__graph.svg |  217 +-
 ...1_1tir_1_1ScheduleStateNode__inherit__graph.svg |  109 +-
 ...classtvm_1_1tir_1_1SizeVarNode__coll__graph.svg |   10 +-
 ...classtvm_1_1tir_1_1StmtNode__inherit__graph.svg |   35 +-
 ...asstvm_1_1tir_1_1StringImmNode__coll__graph.svg |   10 +-
 .../classtvm_1_1tir_1_1TraceNode__coll__graph.svg  |    4 +-
 .../classtvm_1_1tir_1_1VarNode__coll__graph.svg    |   10 +-
 ..._1transform_1_1PassContextNode__coll__graph.svg |    4 +-
 ...m_1_1transform_1_1PassInfoNode__coll__graph.svg |   10 +-
 docs/api/doxygen/codegen_8h.html                   |    2 +-
 docs/api/doxygen/codegen_8h__incl.svg              | 2048 ++---
 docs/api/doxygen/compute__dag_8h.html              |    2 +-
 docs/api/doxygen/compute__dag_8h__dep__incl.svg    |   76 +-
 docs/api/doxygen/compute__dag_8h__incl.svg         | 1852 +++--
 docs/api/doxygen/compute__dag_8h_source.html       |    6 +-
 docs/api/doxygen/constant__utils_8h__dep__incl.svg |  168 +-
 docs/api/doxygen/constant__utils_8h__incl.svg      |  820 +-
 docs/api/doxygen/cost__model_8h.html               |    2 +-
 docs/api/doxygen/cost__model_8h__incl.svg          | 1478 ++--
 docs/api/doxygen/cost__model_8h_source.html        |    2 +-
 docs/api/doxygen/cublas_8h.html                    |    2 +-
 docs/api/doxygen/cublas_8h__dep__incl.svg          |   20 +-
 docs/api/doxygen/cublas_8h__incl.svg               | 1654 ++--
 docs/api/doxygen/cublas_8h_source.html             |    2 +-
 docs/api/doxygen/cuda_2dense_8h__dep__incl.svg     |   12 +-
 docs/api/doxygen/cuda_2dense_8h__incl.svg          |  788 +-
 docs/api/doxygen/cuda_2dense_8h_source.html        |    2 +-
 docs/api/doxygen/cuda_2injective_8h__dep__incl.svg |   12 +-
 docs/api/doxygen/cuda_2injective_8h__incl.svg      |  816 +-
 docs/api/doxygen/cuda_2injective_8h_source.html    |    2 +-
 docs/api/doxygen/cuda_2pooling_8h__dep__incl.svg   |   12 +-
 docs/api/doxygen/cuda_2pooling_8h__incl.svg        |  792 +-
 docs/api/doxygen/cuda_2pooling_8h_source.html      |    2 +-
 docs/api/doxygen/cuda_2reduction_8h__dep__incl.svg |   12 +-
 docs/api/doxygen/cuda_2reduction_8h__incl.svg      |  816 +-
 docs/api/doxygen/cuda_2reduction_8h_source.html    |    2 +-
 docs/api/doxygen/cuda_2softmax_8h__dep__incl.svg   |   12 +-
 docs/api/doxygen/cuda_2softmax_8h__incl.svg        |  816 +-
 docs/api/doxygen/cuda_2softmax_8h_source.html      |    2 +-
 docs/api/doxygen/data__layout_8h.html              |    2 +-
 docs/api/doxygen/data__layout_8h__dep__incl.svg    |  112 +-
 docs/api/doxygen/data__layout_8h__incl.svg         | 1744 ++--
 docs/api/doxygen/data__layout_8h_source.html       |    4 +-
 docs/api/doxygen/data__type_8h.html                |    2 +-
 docs/api/doxygen/data__type_8h__dep__incl.svg      | 1638 ++--
 docs/api/doxygen/database_8h.html                  |  135 +
 docs/api/doxygen/database_8h__dep__incl.svg        |   36 +
 docs/api/doxygen/database_8h__incl.svg             | 1641 ++++
 docs/api/doxygen/database_8h_source.html           |  127 +
 docs/api/doxygen/dataflow__matcher_8h__incl.svg    |  668 +-
 docs/api/doxygen/dataflow__matcher_8h_source.html  |    4 +-
 .../doxygen/dataflow__pattern_8h__dep__incl.svg    |   24 +-
 docs/api/doxygen/dataflow__pattern_8h__incl.svg    |  680 +-
 docs/api/doxygen/dataflow__pattern_8h_source.html  |    6 +-
 .../dataflow__pattern__functor_8h__dep__incl.svg   |   12 +-
 .../dataflow__pattern__functor_8h__incl.svg        |  680 +-
 docs/api/doxygen/debug_8h.html                     |    2 +-
 docs/api/doxygen/debug_8h__incl.svg                | 1358 +--
 docs/api/doxygen/debug_8h_source.html              |    2 +-
 docs/api/doxygen/detail_2broadcast_8h.html         |    2 +-
 .../doxygen/detail_2broadcast_8h__dep__incl.svg    |  104 +-
 docs/api/doxygen/detail_2broadcast_8h__incl.svg    | 2193 +++--
 docs/api/doxygen/detail_2broadcast_8h_source.html  |    2 +-
 docs/api/doxygen/detail_2extern_8h.html            |    2 +-
 docs/api/doxygen/detail_2extern_8h__dep__incl.svg  |   40 +-
 docs/api/doxygen/detail_2extern_8h__incl.svg       | 1985 +++--
 docs/api/doxygen/detail_2extern_8h_source.html     |    4 +-
 docs/api/doxygen/device__api_8h.html               |    2 +-
 docs/api/doxygen/device__api_8h__dep__incl.svg     |   20 +-
 docs/api/doxygen/device__api_8h__incl.svg          |  892 +-
 docs/api/doxygen/device__api_8h_source.html        |    6 +-
 docs/api/doxygen/device__copy_8h.html              |    2 +-
 docs/api/doxygen/device__copy_8h__incl.svg         | 1310 +--
 docs/api/doxygen/device__copy_8h_source.html       |    8 +-
 docs/api/doxygen/diagnostic_8h.html                |    2 +-
 docs/api/doxygen/diagnostic_8h__dep__incl.svg      |  624 +-
 docs/api/doxygen/diagnostic_8h__incl.svg           | 1732 ++--
 docs/api/doxygen/diagnostic_8h_source.html         |    4 +-
 docs/api/doxygen/dilate_8h.html                    |    2 +-
 docs/api/doxygen/dilate_8h__incl.svg               | 1646 ++--
 docs/api/doxygen/dilate_8h_source.html             |    2 +-
 ...r_000002_000021.html => dir_000002_000022.html} |    0
 ...r_000003_000014.html => dir_000003_000015.html} |    0
 docs/api/doxygen/dir_000003_000022.html            |   73 -
 docs/api/doxygen/dir_000003_000023.html            |    4 +-
 ...r_000003_000023.html => dir_000003_000024.html} |    0
 ...r_000004_000014.html => dir_000004_000015.html} |    0
 docs/api/doxygen/dir_000004_000022.html            |   73 -
 docs/api/doxygen/dir_000004_000023.html            |    4 +-
 ...r_000004_000023.html => dir_000004_000024.html} |    0
 docs/api/doxygen/dir_000005_000021.html            |   73 -
 docs/api/doxygen/dir_000005_000022.html            |    4 +-
 docs/api/doxygen/dir_000005_000023.html            |    4 +-
 ...r_000005_000023.html => dir_000005_000024.html} |    0
 docs/api/doxygen/dir_000006_000014.html            |   73 -
 docs/api/doxygen/dir_000006_000015.html            |    4 +-
 ...r_000006_000015.html => dir_000006_000016.html} |    0
 ...r_000006_000021.html => dir_000006_000022.html} |    0
 ...r_000010_000014.html => dir_000010_000015.html} |    0
 ...r_000010_000021.html => dir_000010_000022.html} |    0
 docs/api/doxygen/dir_000013_000022.html            |   73 -
 docs/api/doxygen/dir_000013_000023.html            |    4 +-
 ...r_000013_000023.html => dir_000013_000024.html} |    0
 docs/api/doxygen/dir_000014_000006.html            |   73 +
 docs/api/doxygen/dir_000014_000007.html            |    6 +-
 docs/api/doxygen/dir_000014_000010.html            |   73 +
 docs/api/doxygen/dir_000014_000015.html            |   73 +
 docs/api/doxygen/dir_000014_000022.html            |   73 +
 docs/api/doxygen/dir_000014_000023.html            |   73 +
 docs/api/doxygen/dir_000015_000006.html            |   73 -
 docs/api/doxygen/dir_000015_000007.html            |    6 +-
 docs/api/doxygen/dir_000016_000006.html            |   73 +
 ...r_000015_000007.html => dir_000016_000007.html} |    0
 docs/api/doxygen/dir_000016_000008.html            |   73 -
 docs/api/doxygen/dir_000017_000008.html            |    6 +-
 ...r_000017_000008.html => dir_000018_000008.html} |    0
 docs/api/doxygen/dir_000021_000007.html            |   73 -
 docs/api/doxygen/dir_000022_000007.html            |    6 +-
 docs/api/doxygen/dir_000022_000010.html            |   73 -
 ...r_000022_000006.html => dir_000023_000006.html} |    0
 docs/api/doxygen/dir_000023_000007.html            |    6 +-
 docs/api/doxygen/dir_000023_000010.html            |    6 +-
 ...r_000022_000014.html => dir_000023_000015.html} |    0
 ...r_000022_000021.html => dir_000023_000022.html} |    0
 ...r_000023_000002.html => dir_000024_000002.html} |    0
 ...r_000023_000007.html => dir_000024_000007.html} |    0
 ...r_000023_000010.html => dir_000024_000010.html} |    0
 ...r_000023_000021.html => dir_000024_000022.html} |    0
 ...r_000024_000006.html => dir_000025_000006.html} |    0
 ...r_000024_000014.html => dir_000025_000015.html} |    0
 ...r_000024_000021.html => dir_000025_000022.html} |    0
 ...r_000025_000002.html => dir_000026_000002.html} |    0
 ...r_000025_000010.html => dir_000026_000010.html} |    0
 ...r_000025_000023.html => dir_000026_000024.html} |    0
 docs/api/doxygen/dir_000026_000025.html            |   73 -
 docs/api/doxygen/dir_000027_000022.html            |   73 -
 ...r_000026_000023.html => dir_000027_000024.html} |    0
 docs/api/doxygen/dir_000027_000026.html            |    6 +-
 docs/api/doxygen/dir_000028_000023.html            |    6 +-
 ...r_000027_000023.html => dir_000028_000024.html} |    0
 docs/api/doxygen/dir_000028_000025.html            |   73 -
 ...r_000027_000025.html => dir_000028_000026.html} |    0
 ...r_000027_000026.html => dir_000028_000027.html} |    0
 ...r_000027_000028.html => dir_000028_000029.html} |    0
 ...r_000027_000030.html => dir_000028_000031.html} |    0
 ...r_000028_000002.html => dir_000029_000002.html} |    0
 docs/api/doxygen/dir_000029_000022.html            |   73 -
 ...r_000028_000023.html => dir_000029_000024.html} |    0
 docs/api/doxygen/dir_000029_000026.html            |    6 +-
 docs/api/doxygen/dir_000030_000022.html            |   73 -
 docs/api/doxygen/dir_000030_000023.html            |    6 +-
 ...r_000029_000023.html => dir_000030_000024.html} |    0
 ...r_000029_000025.html => dir_000030_000026.html} |    0
 ...r_000029_000026.html => dir_000030_000027.html} |    0
 ...r_000029_000027.html => dir_000030_000028.html} |    0
 ...r_000029_000028.html => dir_000030_000029.html} |    0
 ...r_000029_000030.html => dir_000030_000031.html} |    0
 docs/api/doxygen/dir_000031_000022.html            |   73 -
 docs/api/doxygen/dir_000031_000023.html            |    6 +-
 ...r_000030_000023.html => dir_000031_000024.html} |    0
 ...r_000030_000025.html => dir_000031_000026.html} |    0
 docs/api/doxygen/dir_000032_000023.html            |    6 +-
 ...r_000031_000023.html => dir_000032_000024.html} |    0
 ...r_000031_000025.html => dir_000032_000026.html} |    0
 ...r_000032_000023.html => dir_000033_000024.html} |    0
 ...r_000032_000025.html => dir_000033_000026.html} |    0
 .../dir_006b1f4ac353a18abb55f74cc4796db6_dep.svg   |   10 +-
 .../dir_02be2c9d68e402f80df60bd528724ee5_dep.svg   |   26 +-
 .../dir_194ecda214f05a38134392ac6a69b970_dep.svg   |    6 +-
 .../dir_1f1b12d204a071c9e67e47fcbb552b86_dep.svg   |   10 +-
 .../dir_2b0ef9f1c86b565a92e96353e1195b2c_dep.svg   |    8 +-
 .../dir_3a038e7bfa2370c6aee2a5aecd5d3ef1_dep.svg   |   12 +-
 .../dir_404558507ed35459f0d7a6d81d8c508d_dep.svg   |    4 +-
 .../dir_4378f18824ae7d4ad48f8d7785cd7ac8.html      |  103 +
 .../dir_4378f18824ae7d4ad48f8d7785cd7ac8_dep.svg   |  284 +
 .../dir_536029070df27a3ee03a4230630922c5_dep.svg   |    2 +-
 .../dir_54983dd6d74c59f67ee9e8e5a50aafc4_dep.svg   |   42 +-
 .../dir_5baffeed82c1190bfdf7a4f918ab5ac6_dep.svg   |    2 +-
 .../dir_5da96592f3a7c442b838b075c58254c2_dep.svg   |   22 +-
 .../dir_63946bee875c6d52bce55e72a67a86ad_dep.svg   |   24 +-
 .../dir_6cd4295f6ad5aa17e5b568d0e5b190e5_dep.svg   |    2 +-
 .../dir_72c2f11201cd7636dc7624de0754daa5_dep.svg   |   14 +-
 .../dir_8395ded0a3205c0748976a0d4487d38d_dep.svg   |    8 +-
 .../dir_8e4e25e66b8623d88c5b5dd2040bca97_dep.svg   |   70 +-
 .../dir_a98464176f1216e334ac3bbacd433085_dep.svg   |   14 +-
 .../dir_ac57496531ccbad72f774fa62e6de987_dep.svg   |   28 +-
 .../dir_b4c7d8e826c599ba55146c099a14beb5.html      |    4 +-
 .../dir_b4c7d8e826c599ba55146c099a14beb5_dep.svg   |  593 +-
 .../dir_d331277d4303e21ded95616eb56c1a9e_dep.svg   |    6 +-
 .../dir_d3953cf7eb33eca56fc6850c0e98447d_dep.svg   |    6 +-
 .../dir_dc867ff9a37cad1764f1670dc7eba6c1_dep.svg   |   18 +-
 .../dir_f97d855a3173728370e632aa77170e34_dep.svg   |   14 +-
 .../dir_fafc18f54a755f417c55c769623cbfef_dep.svg   |    8 +-
 .../dir_fb1b1bc11a768ab8cf63a96a73170118_dep.svg   |    2 +-
 docs/api/doxygen/driver__api_8h.html               |    2 +-
 docs/api/doxygen/driver__api_8h__incl.svg          | 2190 ++---
 docs/api/doxygen/einsum_8h__incl.svg               |  700 +-
 docs/api/doxygen/einsum_8h_source.html             |    2 +-
 docs/api/doxygen/elemwise_8h.html                  |    2 +-
 docs/api/doxygen/elemwise_8h__dep__incl.svg        |   48 +-
 docs/api/doxygen/elemwise_8h__incl.svg             | 1491 ++--
 docs/api/doxygen/elemwise_8h_source.html           |    2 +-
 docs/api/doxygen/env__func_8h.html                 |    2 +-
 docs/api/doxygen/env__func_8h__dep__incl.svg       |  584 +-
 docs/api/doxygen/env__func_8h__incl.svg            |  946 +--
 docs/api/doxygen/env__func_8h_source.html          |    2 +-
 docs/api/doxygen/error_8h.html                     |    2 +-
 docs/api/doxygen/error_8h__dep__incl.svg           |  232 +-
 docs/api/doxygen/error_8h__incl.svg                | 1842 +++--
 docs/api/doxygen/executable_8h.html                |    2 +-
 docs/api/doxygen/executable_8h__dep__incl.svg      |   12 +-
 docs/api/doxygen/executable_8h__incl.svg           | 1187 +--
 docs/api/doxygen/files.html                        |  389 +-
 docs/api/doxygen/flatten_8h.html                   |    2 +-
 docs/api/doxygen/flatten_8h__incl.svg              | 2201 +++--
 docs/api/doxygen/flatten_8h_source.html            |    2 +-
 docs/api/doxygen/functions_0x7e.html               |   21 +
 docs/api/doxygen/functions__.html                  |   23 +
 docs/api/doxygen/functions_a.html                  |   29 +-
 docs/api/doxygen/functions_b.html                  |    9 +
 docs/api/doxygen/functions_c.html                  |    8 +
 docs/api/doxygen/functions_d.html                  |   21 +-
 docs/api/doxygen/functions_e.html                  |   12 +-
 docs/api/doxygen/functions_f.html                  |  133 +-
 docs/api/doxygen/functions_func_0x7e.html          |   21 +
 docs/api/doxygen/functions_func_a.html             |   17 +-
 docs/api/doxygen/functions_func_b.html             |   10 +-
 docs/api/doxygen/functions_func_c.html             |   16 +-
 docs/api/doxygen/functions_func_d.html             |    8 +-
 docs/api/doxygen/functions_func_e.html             |    5 +-
 docs/api/doxygen/functions_func_f.html             |   14 +-
 docs/api/doxygen/functions_func_g.html             |   13 +
 docs/api/doxygen/functions_func_i.html             |   18 +-
 docs/api/doxygen/functions_func_j.html             |    7 +
 docs/api/doxygen/functions_func_m.html             |    3 +
 docs/api/doxygen/functions_func_n.html             |    8 +
 docs/api/doxygen/functions_func_o.html             |   24 +-
 docs/api/doxygen/functions_func_p.html             |   26 +
 docs/api/doxygen/functions_func_r.html             |   26 +-
 docs/api/doxygen/functions_func_s.html             |   24 +-
 docs/api/doxygen/functions_func_t.html             |   67 +-
 docs/api/doxygen/functions_func_u.html             |    3 +
 docs/api/doxygen/functions_func_v.html             |   41 +-
 docs/api/doxygen/functions_func_w.html             |    3 +
 docs/api/doxygen/functions_g.html                  |   17 +-
 docs/api/doxygen/functions_i.html                  |   20 +-
 docs/api/doxygen/functions_j.html                  |    7 +
 docs/api/doxygen/functions_m.html                  |   11 +
 docs/api/doxygen/functions_n.html                  |   14 +-
 docs/api/doxygen/functions_o.html                  |   22 +-
 docs/api/doxygen/functions_p.html                  |   32 +-
 docs/api/doxygen/functions_r.html                  |   39 +-
 docs/api/doxygen/functions_s.html                  |   41 +-
 docs/api/doxygen/functions_t.html                  |   83 +-
 docs/api/doxygen/functions_type.html               |   65 +
 docs/api/doxygen/functions_u.html                  |    3 +
 docs/api/doxygen/functions_v.html                  |   47 +-
 docs/api/doxygen/functions_vars.html               |   23 +
 docs/api/doxygen/functions_vars_a.html             |   12 +-
 docs/api/doxygen/functions_vars_b.html             |    1 +
 docs/api/doxygen/functions_vars_d.html             |    9 +-
 docs/api/doxygen/functions_vars_e.html             |    5 +
 docs/api/doxygen/functions_vars_f.html             |   58 +
 docs/api/doxygen/functions_vars_i.html             |    6 +
 docs/api/doxygen/functions_vars_m.html             |    8 +-
 docs/api/doxygen/functions_vars_n.html             |    6 +-
 docs/api/doxygen/functions_vars_p.html             |    2 +-
 docs/api/doxygen/functions_vars_r.html             |   11 +
 docs/api/doxygen/functions_vars_s.html             |   15 +-
 docs/api/doxygen/functions_vars_t.html             |   12 +
 docs/api/doxygen/functions_vars_w.html             |    3 +
 docs/api/doxygen/functions_w.html                  |    6 +
 docs/api/doxygen/functor_8h.html                   |    2 +-
 docs/api/doxygen/functor_8h__dep__incl.svg         | 1370 ++-
 docs/api/doxygen/fuse_8h.html                      |    2 +-
 docs/api/doxygen/fuse_8h__dep__incl.svg            |  156 +-
 docs/api/doxygen/fuse_8h__incl.svg                 | 1578 ++--
 docs/api/doxygen/generic_2default_8h__incl.svg     |  816 +-
 docs/api/doxygen/generic_2default_8h_source.html   |    2 +-
 docs/api/doxygen/generic_2extern_8h__dep__incl.svg |   24 +-
 docs/api/doxygen/generic_2extern_8h__incl.svg      |  808 +-
 docs/api/doxygen/generic_2extern_8h_source.html    |    2 +-
 .../doxygen/generic_2injective_8h__dep__incl.svg   |   32 +-
 docs/api/doxygen/generic_2injective_8h__incl.svg   |  816 +-
 docs/api/doxygen/generic_2injective_8h_source.html |    2 +-
 docs/api/doxygen/generic__func_8h.html             |    2 +-
 docs/api/doxygen/generic__func_8h__dep__incl.svg   |  196 +-
 docs/api/doxygen/generic__func_8h__incl.svg        | 1917 ++---
 docs/api/doxygen/hierarchy.html                    | 1368 +--
 docs/api/doxygen/image_8h.html                     |    2 +-
 docs/api/doxygen/image_8h__incl.svg                | 1593 ++--
 docs/api/doxygen/image_8h_source.html              |    6 +-
 docs/api/doxygen/inherit_graph_10.svg              |   16 +-
 docs/api/doxygen/inherit_graph_100.svg             |   30 +-
 docs/api/doxygen/inherit_graph_101.svg             | 8725 +++++++++++++++++++-
 docs/api/doxygen/inherit_graph_102.svg             |   12 +-
 docs/api/doxygen/inherit_graph_103.svg             |   15 +-
 docs/api/doxygen/inherit_graph_104.svg             |   15 +-
 docs/api/doxygen/inherit_graph_105.svg             |   15 +-
 docs/api/doxygen/inherit_graph_106.svg             |   15 +-
 docs/api/doxygen/inherit_graph_107.svg             | 4971 +----------
 docs/api/doxygen/inherit_graph_108.svg             |   15 +-
 docs/api/doxygen/inherit_graph_109.svg             | 5427 +++++++++++-
 docs/api/doxygen/inherit_graph_110.svg             |    4 +-
 docs/api/doxygen/inherit_graph_111.svg             |   15 +-
 docs/api/doxygen/inherit_graph_112.svg             |   17 +-
 docs/api/doxygen/inherit_graph_113.svg             |   15 +-
 docs/api/doxygen/inherit_graph_114.svg             |   17 +-
 docs/api/doxygen/inherit_graph_115.svg             |   12 +-
 docs/api/doxygen/inherit_graph_116.svg             |   12 +-
 docs/api/doxygen/inherit_graph_117.svg             |   17 +-
 docs/api/doxygen/inherit_graph_118.svg             |   14 +-
 docs/api/doxygen/inherit_graph_119.svg             |   17 +-
 docs/api/doxygen/inherit_graph_120.svg             |   15 +-
 docs/api/doxygen/inherit_graph_121.svg             |   14 +-
 docs/api/doxygen/inherit_graph_122.svg             |   16 +-
 docs/api/doxygen/inherit_graph_123.svg             |   14 +-
 docs/api/doxygen/inherit_graph_124.svg             |   17 +-
 docs/api/doxygen/inherit_graph_125.svg             |   15 +-
 docs/api/doxygen/inherit_graph_126.svg             |   15 +-
 docs/api/doxygen/inherit_graph_127.svg             |   15 +-
 docs/api/doxygen/inherit_graph_128.svg             |   60 +-
 docs/api/doxygen/inherit_graph_129.svg             |   17 +-
 docs/api/doxygen/inherit_graph_130.svg             |   65 +-
 docs/api/doxygen/inherit_graph_131.svg             |   20 +-
 docs/api/doxygen/inherit_graph_132.svg             |   20 +-
 docs/api/doxygen/inherit_graph_133.svg             |   20 +-
 docs/api/doxygen/inherit_graph_134.svg             |   17 +-
 docs/api/doxygen/inherit_graph_135.svg             |   22 +-
 docs/api/doxygen/inherit_graph_136.svg             |   19 +-
 docs/api/doxygen/inherit_graph_137.svg             |   12 +-
 docs/api/doxygen/inherit_graph_138.svg             |   12 +-
 docs/api/doxygen/inherit_graph_139.svg             |   15 +-
 docs/api/doxygen/inherit_graph_140.svg             |   15 +-
 docs/api/doxygen/inherit_graph_141.svg             |   16 +-
 docs/api/doxygen/inherit_graph_142.svg             |   16 +-
 docs/api/doxygen/inherit_graph_143.svg             |   14 +-
 docs/api/doxygen/inherit_graph_144.svg             |   15 +-
 docs/api/doxygen/inherit_graph_145.svg             |   20 +-
 docs/api/doxygen/inherit_graph_146.svg             |   19 +-
 docs/api/doxygen/inherit_graph_147.svg             |   15 +-
 docs/api/doxygen/inherit_graph_148.svg             |   17 +-
 docs/api/doxygen/inherit_graph_149.svg             |   17 +-
 docs/api/doxygen/inherit_graph_150.svg             |   15 +-
 docs/api/doxygen/inherit_graph_151.svg             |   15 +-
 docs/api/doxygen/inherit_graph_152.svg             |   15 +-
 docs/api/doxygen/inherit_graph_153.svg             |   15 +-
 docs/api/doxygen/inherit_graph_154.svg             |   15 +-
 docs/api/doxygen/inherit_graph_155.svg             |   15 +-
 docs/api/doxygen/inherit_graph_156.svg             |   15 +-
 docs/api/doxygen/inherit_graph_157.svg             |   16 +-
 docs/api/doxygen/inherit_graph_158.svg             |   15 +-
 docs/api/doxygen/inherit_graph_159.svg             |   12 +-
 docs/api/doxygen/inherit_graph_160.svg             |   14 +-
 docs/api/doxygen/inherit_graph_161.svg             |   15 +-
 docs/api/doxygen/inherit_graph_162.svg             |   16 +-
 docs/api/doxygen/inherit_graph_163.svg             |   79 +-
 docs/api/doxygen/inherit_graph_164.svg             |   78 +-
 docs/api/doxygen/inherit_graph_165.svg             |   19 +-
 docs/api/doxygen/inherit_graph_166.svg             |   14 +-
 docs/api/doxygen/inherit_graph_167.svg             |   12 +-
 docs/api/doxygen/inherit_graph_168.svg             |   15 +-
 docs/api/doxygen/inherit_graph_169.svg             |   30 +-
 docs/api/doxygen/inherit_graph_170.svg             |   30 +-
 docs/api/doxygen/inherit_graph_171.svg             |   12 +-
 docs/api/doxygen/inherit_graph_172.svg             |   12 +-
 docs/api/doxygen/inherit_graph_173.svg             |   15 +-
 docs/api/doxygen/inherit_graph_174.svg             |   16 +-
 docs/api/doxygen/inherit_graph_175.svg             |   15 +-
 docs/api/doxygen/inherit_graph_176.svg             |   12 +-
 docs/api/doxygen/inherit_graph_177.svg             |   15 +-
 docs/api/doxygen/inherit_graph_178.svg             |   15 +-
 docs/api/doxygen/inherit_graph_179.svg             |   16 +-
 docs/api/doxygen/inherit_graph_180.svg             |   78 +-
 docs/api/doxygen/inherit_graph_181.svg             |   78 +-
 docs/api/doxygen/inherit_graph_182.svg             |   18 +-
 ...inherit_graph_166.svg => inherit_graph_183.svg} |    0
 ...inherit_graph_167.svg => inherit_graph_184.svg} |    0
 ...inherit_graph_168.svg => inherit_graph_185.svg} |    0
 ...inherit_graph_169.svg => inherit_graph_186.svg} |    0
 ...inherit_graph_170.svg => inherit_graph_187.svg} |    0
 ...inherit_graph_171.svg => inherit_graph_188.svg} |    0
 ...inherit_graph_172.svg => inherit_graph_189.svg} |    0
 ...inherit_graph_173.svg => inherit_graph_190.svg} |    0
 ...inherit_graph_174.svg => inherit_graph_191.svg} |    0
 ...inherit_graph_175.svg => inherit_graph_192.svg} |    0
 ...inherit_graph_176.svg => inherit_graph_193.svg} |    0
 ...inherit_graph_177.svg => inherit_graph_194.svg} |    0
 ...inherit_graph_178.svg => inherit_graph_195.svg} |    0
 ...inherit_graph_179.svg => inherit_graph_196.svg} |    0
 ...inherit_graph_180.svg => inherit_graph_197.svg} |    0
 ...inherit_graph_181.svg => inherit_graph_198.svg} |    0
 ...inherit_graph_182.svg => inherit_graph_199.svg} |    0
 docs/api/doxygen/inherit_graph_39.svg              |   16 +-
 docs/api/doxygen/inherit_graph_42.svg              |    8 +-
 docs/api/doxygen/inherit_graph_43.svg              |    8 +-
 docs/api/doxygen/inherit_graph_62.svg              |   15 +-
 docs/api/doxygen/inherit_graph_63.svg              |   17 +-
 docs/api/doxygen/inherit_graph_64.svg              |   12 +-
 docs/api/doxygen/inherit_graph_65.svg              |   16 +-
 docs/api/doxygen/inherit_graph_66.svg              |   15 +-
 docs/api/doxygen/inherit_graph_67.svg              |   15 +-
 docs/api/doxygen/inherit_graph_68.svg              |   14 +-
 docs/api/doxygen/inherit_graph_69.svg              |   25 +-
 docs/api/doxygen/inherit_graph_70.svg              |   44 +-
 docs/api/doxygen/inherit_graph_71.svg              |   29 +-
 docs/api/doxygen/inherit_graph_72.svg              |   42 +-
 docs/api/doxygen/inherit_graph_73.svg              |   42 +-
 docs/api/doxygen/inherit_graph_74.svg              |   15 +-
 docs/api/doxygen/inherit_graph_75.svg              |   45 +-
 docs/api/doxygen/inherit_graph_76.svg              |   15 +-
 docs/api/doxygen/inherit_graph_77.svg              |   30 +-
 docs/api/doxygen/inherit_graph_78.svg              |   12 +-
 docs/api/doxygen/inherit_graph_79.svg              |   22 +-
 docs/api/doxygen/inherit_graph_80.svg              |   15 +-
 docs/api/doxygen/inherit_graph_81.svg              |   30 +-
 docs/api/doxygen/inherit_graph_82.svg              |   15 +-
 docs/api/doxygen/inherit_graph_83.svg              |   12 +-
 docs/api/doxygen/inherit_graph_84.svg              |   15 +-
 docs/api/doxygen/inherit_graph_85.svg              |   16 +-
 docs/api/doxygen/inherit_graph_86.svg              |   15 +-
 docs/api/doxygen/inherit_graph_87.svg              |   16 +-
 docs/api/doxygen/inherit_graph_88.svg              |   14 +-
 docs/api/doxygen/inherit_graph_89.svg              |   17 +-
 docs/api/doxygen/inherit_graph_90.svg              |   14 +-
 docs/api/doxygen/inherit_graph_91.svg              |   12 +-
 docs/api/doxygen/inherit_graph_92.svg              |    4 +-
 docs/api/doxygen/inherit_graph_93.svg              |   12 +-
 docs/api/doxygen/inherit_graph_94.svg              |    4 +-
 docs/api/doxygen/inherit_graph_95.svg              |   12 +-
 docs/api/doxygen/inherit_graph_96.svg              |   15 +-
 docs/api/doxygen/inherit_graph_97.svg              |   14 +-
 docs/api/doxygen/inherit_graph_98.svg              |   30 +-
 docs/api/doxygen/inherit_graph_99.svg              | 8296 +------------------
 docs/api/doxygen/inherits.html                     |  270 +-
 docs/api/doxygen/instruction_8h.html               |    4 +-
 docs/api/doxygen/instruction_8h__dep__incl.svg     |  142 +-
 docs/api/doxygen/instruction_8h__incl.svg          |  944 +--
 docs/api/doxygen/instruction_8h_source.html        |    4 +-
 docs/api/doxygen/instrument_8h.html                |    2 +-
 docs/api/doxygen/instrument_8h__dep__incl.svg      |  216 +-
 docs/api/doxygen/instrument_8h__incl.svg           |  954 +--
 docs/api/doxygen/instrument_8h_source.html         |    2 +-
 docs/api/doxygen/int__set_8h.html                  |    2 +-
 docs/api/doxygen/int__set_8h__dep__incl.svg        |  660 +-
 docs/api/doxygen/int__set_8h__incl.svg             | 1512 ++--
 docs/api/doxygen/int__set_8h_source.html           |    4 +-
 docs/api/doxygen/int__solver_8h.html               |    2 +-
 docs/api/doxygen/int__solver_8h__incl.svg          | 1623 ++--
 docs/api/doxygen/int__solver_8h_source.html        |    4 +-
 docs/api/doxygen/interpreter_8h.html               |    2 +-
 docs/api/doxygen/interpreter_8h__incl.svg          | 1888 +++--
 docs/api/doxygen/interpreter_8h_source.html        |    8 +-
 docs/api/doxygen/ir_2adt_8h.html                   |    4 +-
 docs/api/doxygen/ir_2adt_8h__dep__incl.svg         | 1334 +--
 docs/api/doxygen/ir_2adt_8h__incl.svg              | 1306 +--
 docs/api/doxygen/ir_2adt_8h_source.html            |    4 +-
 docs/api/doxygen/ir_2attrs_8h.html                 |    8 +-
 docs/api/doxygen/ir_2attrs_8h__dep__incl.svg       | 1538 ++--
 docs/api/doxygen/ir_2attrs_8h__incl.svg            | 1290 +--
 docs/api/doxygen/ir_2attrs_8h_source.html          |  151 +-
 docs/api/doxygen/ir_2expr_8h.html                  |    4 +-
 docs/api/doxygen/ir_2expr_8h__dep__incl.svg        | 1512 ++--
 docs/api/doxygen/ir_2expr_8h__incl.svg             | 1206 +--
 docs/api/doxygen/ir_2expr_8h_source.html           |    2 +-
 docs/api/doxygen/ir_2function_8h.html              |   10 +-
 docs/api/doxygen/ir_2function_8h__dep__incl.svg    | 1526 ++--
 docs/api/doxygen/ir_2function_8h__incl.svg         | 1346 +--
 docs/api/doxygen/ir_2function_8h_source.html       |    4 +-
 docs/api/doxygen/ir_2module_8h.html                |    4 +-
 docs/api/doxygen/ir_2module_8h__dep__incl.svg      | 1358 +--
 docs/api/doxygen/ir_2module_8h__incl.svg           | 1802 ++--
 docs/api/doxygen/ir_2module_8h_source.html         |    6 +-
 docs/api/doxygen/ir_2op_8h.html                    |    2 +-
 docs/api/doxygen/ir_2op_8h__dep__incl.svg          |  580 +-
 docs/api/doxygen/ir_2op_8h__incl.svg               | 1752 ++--
 docs/api/doxygen/ir_2op_8h_source.html             |    4 +-
 docs/api/doxygen/ir_2transform_8h.html             |    2 +-
 docs/api/doxygen/ir_2transform_8h__dep__incl.svg   |  208 +-
 docs/api/doxygen/ir_2transform_8h__incl.svg        | 1710 ++--
 docs/api/doxygen/ir_2transform_8h_source.html      |   10 +-
 docs/api/doxygen/ir_2type_8h.html                  |    4 +-
 docs/api/doxygen/ir_2type_8h__dep__incl.svg        | 1865 ++---
 docs/api/doxygen/ir_2type_8h__incl.svg             | 1100 +--
 docs/api/doxygen/ir_2type_8h_source.html           |    6 +-
 docs/api/doxygen/iter__affine__map_8h.html         |    2 +-
 docs/api/doxygen/iter__affine__map_8h__incl.svg    | 1519 ++--
 docs/api/doxygen/iter__affine__map_8h_source.html  |    4 +-
 docs/api/doxygen/local__response__norm_8h.html     |    2 +-
 .../api/doxygen/local__response__norm_8h__incl.svg | 1610 ++--
 .../doxygen/local__response__norm_8h_source.html   |    2 +-
 docs/api/doxygen/loop__state_8h.html               |    2 +-
 docs/api/doxygen/loop__state_8h__dep__incl.svg     |   88 +-
 docs/api/doxygen/loop__state_8h__incl.svg          | 1584 ++--
 docs/api/doxygen/loop__state_8h_source.html        |    4 +-
 docs/api/doxygen/map_8h.html                       |    5 +-
 docs/api/doxygen/map_8h__dep__incl.svg             | 1620 ++--
 docs/api/doxygen/map_8h__incl.svg                  |  207 +-
 docs/api/doxygen/map_8h_source.html                |  194 +-
 docs/api/doxygen/mapping_8h.html                   |    2 +-
 docs/api/doxygen/mapping_8h__incl.svg              | 1610 ++--
 docs/api/doxygen/measure_8h.html                   |    2 +-
 docs/api/doxygen/measure_8h__dep__incl.svg         |   48 +-
 docs/api/doxygen/measure_8h__incl.svg              | 1250 +--
 docs/api/doxygen/measure_8h_source.html            |    4 +-
 docs/api/doxygen/measure__record_8h.html           |    2 +-
 docs/api/doxygen/measure__record_8h__incl.svg      | 1260 ++-
 docs/api/doxygen/measure__record_8h_source.html    |    4 +-
 docs/api/doxygen/memory__manager_8h.html           |    2 +-
 docs/api/doxygen/memory__manager_8h__dep__incl.svg |   12 +-
 docs/api/doxygen/memory__manager_8h__incl.svg      |  552 +-
 docs/api/doxygen/memory__manager_8h_source.html    |    6 +-
 docs/api/doxygen/menudata.js                       |    1 +
 docs/api/doxygen/namespacemembers_c.html           |   11 +-
 docs/api/doxygen/namespacemembers_d.html           |    2 +-
 docs/api/doxygen/namespacemembers_func_c.html      |   11 +-
 docs/api/doxygen/namespacemembers_func_p.html      |   10 +-
 docs/api/doxygen/namespacemembers_func_r.html      |    7 +-
 docs/api/doxygen/namespacemembers_func_s.html      |    6 +-
 docs/api/doxygen/namespacemembers_func_w.html      |    3 +
 docs/api/doxygen/namespacemembers_k.html           |   14 +-
 docs/api/doxygen/namespacemembers_m.html           |   13 +-
 docs/api/doxygen/namespacemembers_p.html           |   13 +-
 docs/api/doxygen/namespacemembers_r.html           |    5 +-
 docs/api/doxygen/namespacemembers_s.html           |   10 +-
 docs/api/doxygen/namespacemembers_type.html        |    9 +-
 docs/api/doxygen/namespacemembers_vars.html        |   15 +
 docs/api/doxygen/namespacemembers_w.html           |    3 +
 docs/api/doxygen/namespaces.html                   |   55 +-
 docs/api/doxygen/namespacetvm.html                 |  638 +-
 docs/api/doxygen/namespacetvm_1_1attr.html         |   42 +
 .../doxygen/namespacetvm_1_1meta__schedule.html    |  208 +
 docs/api/doxygen/namespacetvm_1_1parser.html       |   43 +-
 docs/api/doxygen/namespacetvm_1_1relay.html        |  117 +-
 .../namespacetvm_1_1relay_1_1transform.html        |   56 +-
 docs/api/doxygen/namespacetvm_1_1runtime.html      |   55 +-
 .../namespacetvm_1_1runtime_1_1profiling.html      |    2 +-
 docs/api/doxygen/namespacetvm_1_1support.html      |   58 +-
 docs/api/doxygen/namespacetvm_1_1tir.html          |    4 +-
 docs/api/doxygen/namespacetvm_1_1tir_1_1attr.html  |   19 +
 .../doxygen/namespacetvm_1_1tir_1_1transform.html  |    4 +-
 docs/api/doxygen/ndarray_8h.html                   |   12 +-
 docs/api/doxygen/ndarray_8h__dep__incl.svg         | 1433 ++--
 docs/api/doxygen/ndarray_8h__incl.svg              |  484 +-
 docs/api/doxygen/ndarray_8h_source.html            |   56 +-
 docs/api/doxygen/nn_2bnn_8h__incl.svg              |  642 +-
 docs/api/doxygen/nn_2bnn_8h_source.html            |    2 +-
 docs/api/doxygen/nn_2dense_8h.html                 |    2 +-
 docs/api/doxygen/nn_2dense_8h__dep__incl.svg       |   24 +-
 docs/api/doxygen/nn_2dense_8h__incl.svg            | 1610 ++--
 docs/api/doxygen/nn_2pooling_8h__incl.svg          |  792 +-
 docs/api/doxygen/nn_2pooling_8h_source.html        |    2 +-
 docs/api/doxygen/nn_2softmax_8h__incl.svg          |  760 +-
 docs/api/doxygen/nn_2softmax_8h_source.html        |    6 +-
 docs/api/doxygen/node_8h.html                      |    4 +-
 docs/api/doxygen/node_8h__dep__incl.svg            | 1779 ++--
 docs/api/doxygen/node_8h__incl.svg                 | 1042 +--
 docs/api/doxygen/object_8h.html                    |    2 +-
 docs/api/doxygen/object_8h__dep__incl.svg          | 1704 ++--
 docs/api/doxygen/op__strategy_8h__incl.svg         |  824 +-
 docs/api/doxygen/op__strategy_8h_source.html       |    4 +-
 docs/api/doxygen/operation_8h.html                 |    2 +-
 docs/api/doxygen/operation_8h__dep__incl.svg       |  592 +-
 docs/api/doxygen/operation_8h__incl.svg            | 1687 ++--
 docs/api/doxygen/operation_8h_source.html          |    6 +-
 docs/api/doxygen/optional_8h.html                  |    2 +-
 docs/api/doxygen/optional_8h__dep__incl.svg        | 1671 ++--
 docs/api/doxygen/packed__func_8h.html              |    4 +-
 docs/api/doxygen/packed__func_8h__dep__incl.svg    | 1298 +--
 docs/api/doxygen/packed__func_8h__incl.svg         |  855 +-
 docs/api/doxygen/packed__func_8h_source.html       |   24 +-
 docs/api/doxygen/pad__utils_8h.html                |    2 +-
 docs/api/doxygen/pad__utils_8h__dep__incl.svg      |   12 +-
 docs/api/doxygen/pad__utils_8h__incl.svg           | 1701 ++--
 docs/api/doxygen/papi_8h.html                      |    2 +-
 docs/api/doxygen/papi_8h__incl.svg                 | 1157 +--
 docs/api/doxygen/papi_8h_source.html               |    4 +-
 docs/api/doxygen/parallel__for_8h.html             |    3 +
 docs/api/doxygen/parallel__for_8h_source.html      |    3 +-
 docs/api/doxygen/parser_8h.html                    |   15 +-
 docs/api/doxygen/parser_8h__incl.svg               | 1949 +++--
 docs/api/doxygen/parser_8h_source.html             |    7 +-
 docs/api/doxygen/pattern_8h.html                   |    2 +-
 docs/api/doxygen/pattern_8h__incl.svg              | 1494 ++--
 docs/api/doxygen/pattern__functor_8h__incl.svg     |  656 +-
 docs/api/doxygen/profiling_8h.html                 |    2 +-
 docs/api/doxygen/profiling_8h__dep__incl.svg       |   12 +-
 docs/api/doxygen/profiling_8h__incl.svg            | 1024 +--
 docs/api/doxygen/profiling_8h_source.html          |   10 +-
 docs/api/doxygen/random_8h.html                    |    2 +-
 docs/api/doxygen/random_8h__incl.svg               | 1300 +--
 docs/api/doxygen/random_8h_source.html             |    4 +-
 docs/api/doxygen/random__engine_8h.html            |    2 +-
 docs/api/doxygen/random__engine_8h__dep__incl.svg  |   96 +-
 docs/api/doxygen/random__engine_8h_source.html     |    5 +-
 docs/api/doxygen/ravel__unravel_8h.html            |    2 +-
 docs/api/doxygen/ravel__unravel_8h__dep__incl.svg  |   84 +-
 docs/api/doxygen/ravel__unravel_8h__incl.svg       | 1582 ++--
 docs/api/doxygen/reduce_8h.html                    |    2 +-
 docs/api/doxygen/reduce_8h__incl.svg               | 1310 +--
 docs/api/doxygen/reduce_8h_source.html             |    4 +-
 docs/api/doxygen/reduction_8h__dep__incl.svg       |   40 +-
 docs/api/doxygen/reduction_8h__incl.svg            |  812 +-
 docs/api/doxygen/reduction_8h_source.html          |    6 +-
 docs/api/doxygen/reflection_8h.html                |    8 +-
 docs/api/doxygen/reflection_8h__dep__incl.svg      | 1719 ++--
 docs/api/doxygen/reflection_8h__incl.svg           |  928 ++-
 docs/api/doxygen/reflection_8h_source.html         |    8 +-
 docs/api/doxygen/registry_8h.html                  |    4 +-
 docs/api/doxygen/registry_8h__dep__incl.svg        | 1544 ++--
 docs/api/doxygen/registry_8h__incl.svg             |  883 +-
 docs/api/doxygen/relay_2adt_8h.html                |    2 +-
 docs/api/doxygen/relay_2adt_8h__dep__incl.svg      |   36 +-
 docs/api/doxygen/relay_2adt_8h__incl.svg           | 2185 +++--
 docs/api/doxygen/relay_2adt_8h_source.html         |    2 +-
 docs/api/doxygen/relay_2analysis_8h.html           |   11 +-
 docs/api/doxygen/relay_2analysis_8h__incl.svg      | 2106 +++--
 docs/api/doxygen/relay_2analysis_8h_source.html    |    8 +-
 docs/api/doxygen/relay_2attrs_2memory_8h__incl.svg |  656 +-
 .../doxygen/relay_2attrs_2memory_8h_source.html    |    4 +-
 docs/api/doxygen/relay_2attrs_2nn_8h.html          |    2 +-
 docs/api/doxygen/relay_2attrs_2nn_8h__incl.svg     | 1591 ++--
 docs/api/doxygen/relay_2attrs_2nn_8h_source.html   |    6 +-
 docs/api/doxygen/relay_2attrs_2transform_8h.html   |    6 +
 .../relay_2attrs_2transform_8h__dep__incl.svg      |   20 +-
 .../doxygen/relay_2attrs_2transform_8h__incl.svg   |  652 +-
 .../doxygen/relay_2attrs_2transform_8h_source.html |  274 +-
 docs/api/doxygen/relay_2attrs_2vm_8h.html          |    2 +-
 docs/api/doxygen/relay_2attrs_2vm_8h__incl.svg     | 1298 +--
 docs/api/doxygen/relay_2attrs_2vm_8h_source.html   |    4 +-
 docs/api/doxygen/relay_2base_8h.html               |    2 +-
 docs/api/doxygen/relay_2base_8h__dep__incl.svg     |  296 +-
 docs/api/doxygen/relay_2base_8h__incl.svg          | 1534 ++--
 docs/api/doxygen/relay_2base_8h_source.html        |    2 +-
 docs/api/doxygen/relay_2expr_8h__dep__incl.svg     |  212 +-
 docs/api/doxygen/relay_2expr_8h__incl.svg          |  628 +-
 docs/api/doxygen/relay_2expr_8h_source.html        |    6 +-
 docs/api/doxygen/relay_2expr__functor_8h__incl.svg |  652 +-
 .../doxygen/relay_2expr__functor_8h_source.html    |  138 +-
 docs/api/doxygen/relay_2feature_8h.html            |    2 +-
 docs/api/doxygen/relay_2feature_8h__incl.svg       | 1918 +++--
 docs/api/doxygen/relay_2feature_8h_source.html     |    2 +-
 docs/api/doxygen/relay_2function_8h.html           |    2 +-
 docs/api/doxygen/relay_2function_8h__dep__incl.svg |   36 +-
 docs/api/doxygen/relay_2function_8h__incl.svg      | 2113 +++--
 docs/api/doxygen/relay_2function_8h_source.html    |    2 +-
 docs/api/doxygen/relay_2op_8h__dep__incl.svg       |   36 +-
 docs/api/doxygen/relay_2op_8h__incl.svg            |  676 +-
 .../relay_2op__attr__types_8h__dep__incl.svg       |   28 +-
 .../doxygen/relay_2op__attr__types_8h__incl.svg    |  804 +-
 .../doxygen/relay_2op__attr__types_8h_source.html  |    2 +-
 docs/api/doxygen/relay_2qnn_2attrs_8h.html         |    2 +-
 docs/api/doxygen/relay_2qnn_2attrs_8h__incl.svg    | 1310 +--
 docs/api/doxygen/relay_2qnn_2attrs_8h_source.html  |    2 +-
 .../api/doxygen/relay_2qnn_2transform_8h__incl.svg |  618 +-
 docs/api/doxygen/relay_2transform_8h.html          |    8 +-
 .../api/doxygen/relay_2transform_8h__dep__incl.svg |   12 +-
 docs/api/doxygen/relay_2transform_8h__incl.svg     | 1906 +++--
 docs/api/doxygen/relay_2transform_8h_source.html   |   10 +-
 docs/api/doxygen/relay_2type_8h__dep__incl.svg     |  240 +-
 docs/api/doxygen/relay_2type_8h__incl.svg          |  618 +-
 docs/api/doxygen/relay_2type_8h_source.html        |    4 +-
 docs/api/doxygen/reorg_8h__incl.svg                |  848 +-
 docs/api/doxygen/reorg_8h_source.html              |    2 +-
 docs/api/doxygen/repr__printer_8h.html             |    2 +-
 docs/api/doxygen/repr__printer_8h__dep__incl.svg   | 1621 ++--
 docs/api/doxygen/rocblas_8h.html                   |    2 +-
 docs/api/doxygen/rocblas_8h__dep__incl.svg         |   12 +-
 docs/api/doxygen/rocblas_8h__incl.svg              | 1654 ++--
 docs/api/doxygen/rocblas_8h_source.html            |    2 +-
 docs/api/doxygen/rocm_2dense_8h__incl.svg          |  784 +-
 docs/api/doxygen/rocm_2dense_8h_source.html        |    2 +-
 docs/api/doxygen/rocm_2injective_8h__incl.svg      |  812 +-
 docs/api/doxygen/rocm_2injective_8h_source.html    |    2 +-
 docs/api/doxygen/rocm_2pooling_8h__incl.svg        |  796 +-
 docs/api/doxygen/rocm_2pooling_8h_source.html      |    2 +-
 docs/api/doxygen/rocm_2reduction_8h__incl.svg      |  812 +-
 docs/api/doxygen/rocm_2reduction_8h_source.html    |    2 +-
 docs/api/doxygen/rocm_2softmax_8h__incl.svg        |  812 +-
 docs/api/doxygen/rocm_2softmax_8h_source.html      |    2 +-
 docs/api/doxygen/runner_8h.html                    |  135 +
 docs/api/doxygen/runner_8h__dep__incl.svg          |   52 +
 docs/api/doxygen/runner_8h__incl.svg               | 1539 ++++
 docs/api/doxygen/runner_8h_source.html             |  119 +
 docs/api/doxygen/runtime_2container_2adt_8h.html   |    2 +-
 .../runtime_2container_2adt_8h__dep__incl.svg      |  926 ++-
 docs/api/doxygen/runtime_2container_2base_8h.html  |    2 +-
 .../runtime_2container_2base_8h__dep__incl.svg     | 1737 ++--
 .../runtime_2container_2base_8h_source.html        |    2 +-
 docs/api/doxygen/runtime_2memory_8h.html           |    2 +-
 docs/api/doxygen/runtime_2memory_8h__dep__incl.svg | 1577 ++--
 docs/api/doxygen/runtime_2module_8h.html           |    4 +-
 docs/api/doxygen/runtime_2module_8h__dep__incl.svg | 1300 +--
 docs/api/doxygen/runtime_2module_8h__incl.svg      |  789 +-
 docs/api/doxygen/runtime_2vm_2vm_8h.html           |    2 +-
 docs/api/doxygen/runtime_2vm_2vm_8h__incl.svg      | 1181 +--
 docs/api/doxygen/runtime_2vm_2vm_8h_source.html    |   10 +-
 docs/api/doxygen/schedule__pass_8h.html            |    2 +-
 docs/api/doxygen/schedule__pass_8h__dep__incl.svg  |  136 +-
 docs/api/doxygen/schedule__pass_8h__incl.svg       | 1594 ++--
 docs/api/doxygen/search/all_1.js                   |    2 +-
 docs/api/doxygen/search/all_10.js                  |   10 +-
 docs/api/doxygen/search/all_11.js                  |   25 +-
 docs/api/doxygen/search/all_13.js                  |   26 +-
 docs/api/doxygen/search/all_14.js                  |   34 +-
 docs/api/doxygen/search/all_15.js                  |   46 +-
 docs/api/doxygen/search/all_16.js                  |    1 +
 docs/api/doxygen/search/all_17.js                  |    8 +-
 docs/api/doxygen/search/all_18.js                  |    5 +
 docs/api/doxygen/search/all_1b.js                  |    7 +
 docs/api/doxygen/search/all_2.js                   |   16 +-
 docs/api/doxygen/search/all_3.js                   |   12 +-
 docs/api/doxygen/search/all_4.js                   |    9 +-
 docs/api/doxygen/search/all_5.js                   |   12 +-
 docs/api/doxygen/search/all_6.js                   |    9 +-
 docs/api/doxygen/search/all_7.js                   |   47 +-
 docs/api/doxygen/search/all_8.js                   |    5 +-
 docs/api/doxygen/search/all_9.js                   |    2 +-
 docs/api/doxygen/search/all_a.js                   |    4 +
 docs/api/doxygen/search/all_b.js                   |    4 +-
 docs/api/doxygen/search/all_c.js                   |    4 +
 docs/api/doxygen/search/all_e.js                   |   10 +-
 docs/api/doxygen/search/all_f.js                   |    5 +-
 docs/api/doxygen/search/classes_0.js               |    7 +
 docs/api/doxygen/search/classes_1.js               |    6 +
 docs/api/doxygen/search/classes_10.js              |    8 +-
 docs/api/doxygen/search/classes_11.js              |   23 +
 docs/api/doxygen/search/classes_13.js              |    4 +-
 docs/api/doxygen/search/classes_14.js              |    4 +
 docs/api/doxygen/search/classes_3.js               |    5 +-
 docs/api/doxygen/search/classes_4.js               |    5 +-
 docs/api/doxygen/search/classes_7.js               |    2 +-
 docs/api/doxygen/search/classes_a.js               |    2 +
 docs/api/doxygen/search/classes_c.js               |    8 +
 docs/api/doxygen/search/classes_d.js               |    6 +
 docs/api/doxygen/search/classes_f.js               |   12 +-
 docs/api/doxygen/search/files_0.js                 |    1 +
 docs/api/doxygen/search/files_1.js                 |    1 +
 docs/api/doxygen/search/files_3.js                 |    1 +
 docs/api/doxygen/search/files_d.js                 |    3 +-
 docs/api/doxygen/search/files_e.js                 |    2 +
 docs/api/doxygen/search/files_f.js                 |    2 +
 docs/api/doxygen/search/functions_1.js             |    5 +-
 docs/api/doxygen/search/functions_10.js            |   14 +-
 docs/api/doxygen/search/functions_12.js            |   13 +-
 docs/api/doxygen/search/functions_13.js            |    9 +-
 docs/api/doxygen/search/functions_14.js            |   18 +-
 docs/api/doxygen/search/functions_15.js            |    1 +
 docs/api/doxygen/search/functions_16.js            |    4 +-
 docs/api/doxygen/search/functions_17.js            |    2 +
 docs/api/doxygen/search/functions_19.js            |    7 +
 docs/api/doxygen/search/functions_2.js             |    6 +-
 docs/api/doxygen/search/functions_3.js             |    7 +-
 docs/api/doxygen/search/functions_4.js             |    2 +
 docs/api/doxygen/search/functions_5.js             |    1 +
 docs/api/doxygen/search/functions_6.js             |    7 +-
 docs/api/doxygen/search/functions_7.js             |    5 +-
 docs/api/doxygen/search/functions_9.js             |    2 +
 docs/api/doxygen/search/functions_a.js             |    4 +-
 docs/api/doxygen/search/functions_d.js             |    7 +-
 docs/api/doxygen/search/functions_e.js             |    2 +
 docs/api/doxygen/search/functions_f.js             |    2 +-
 docs/api/doxygen/search/namespaces_2.js            |    1 +
 docs/api/doxygen/search/typedefs_3.js              |    2 +-
 docs/api/doxygen/search/typedefs_5.js              |   19 +
 docs/api/doxygen/search/typedefs_9.js              |    1 +
 docs/api/doxygen/search/typedefs_e.js              |    1 +
 docs/api/doxygen/search/variables_0.js             |    2 +-
 docs/api/doxygen/search/variables_1.js             |    4 +-
 docs/api/doxygen/search/variables_10.js            |    5 +-
 docs/api/doxygen/search/variables_11.js            |    6 +-
 docs/api/doxygen/search/variables_12.js            |    5 +-
 docs/api/doxygen/search/variables_15.js            |    1 +
 docs/api/doxygen/search/variables_2.js             |    2 +-
 docs/api/doxygen/search/variables_4.js             |    5 +-
 docs/api/doxygen/search/variables_5.js             |    3 +-
 docs/api/doxygen/search/variables_6.js             |   19 +
 docs/api/doxygen/search/variables_9.js             |    2 +
 docs/api/doxygen/search/variables_a.js             |    4 +
 docs/api/doxygen/search/variables_c.js             |    3 +-
 docs/api/doxygen/search/variables_d.js             |    3 +-
 docs/api/doxygen/search/variables_f.js             |    3 +-
 docs/api/doxygen/search__policy_8h__dep__incl.svg  |   12 +-
 docs/api/doxygen/search__policy_8h__incl.svg       |  416 +-
 docs/api/doxygen/search__policy_8h_source.html     |    4 +-
 docs/api/doxygen/search__strategy_8h.html          |  118 +
 docs/api/doxygen/search__strategy_8h__incl.svg     | 1503 ++++
 docs/api/doxygen/search__strategy_8h_source.html   |  113 +
 docs/api/doxygen/search__task_8h.html              |    2 +-
 docs/api/doxygen/search__task_8h__dep__incl.svg    |   60 +-
 docs/api/doxygen/search__task_8h__incl.svg         | 1543 ++--
 docs/api/doxygen/search__task_8h_source.html       |    4 +-
 docs/api/doxygen/serializer_8h.html                |    4 +-
 docs/api/doxygen/serializer_8h__dep__incl.svg      | 1431 ++--
 docs/api/doxygen/serializer_8h__incl.svg           |  442 +-
 docs/api/doxygen/serializer_8h_source.html         |    2 +-
 docs/api/doxygen/shape__tuple_8h.html              |    2 +-
 docs/api/doxygen/shape__tuple_8h__dep__incl.svg    | 1638 ++--
 docs/api/doxygen/source__map_8h.html               |    4 +-
 docs/api/doxygen/source__map_8h__dep__incl.svg     | 1344 +--
 docs/api/doxygen/source__map_8h__incl.svg          | 1174 +--
 docs/api/doxygen/source__map_8h_source.html        |    4 +-
 docs/api/doxygen/space__generator_8h.html          |  117 +
 .../api/doxygen/space__generator_8h__dep__incl.svg |   52 +
 docs/api/doxygen/space__generator_8h__incl.svg     | 1453 ++++
 docs/api/doxygen/space__generator_8h_source.html   |  103 +
 docs/api/doxygen/span_8h.html                      |    4 +-
 docs/api/doxygen/span_8h__dep__incl.svg            | 1855 ++---
 docs/api/doxygen/span_8h__incl.svg                 | 1062 +--
 docs/api/doxygen/span_8h_source.html               |    4 +-
 docs/api/doxygen/state_8h.html                     |    4 +-
 docs/api/doxygen/state_8h__dep__incl.svg           |  100 +-
 docs/api/doxygen/state_8h__incl.svg                | 2359 +++---
 docs/api/doxygen/state_8h_source.html              |   14 +-
 docs/api/doxygen/stmt_8h.html                      |    7 +-
 docs/api/doxygen/stmt_8h__dep__incl.svg            | 1620 ++--
 docs/api/doxygen/stmt_8h__incl.svg                 | 1468 ++--
 docs/api/doxygen/stmt_8h_source.html               |  288 +-
 docs/api/doxygen/stmt__functor_8h.html             |    2 +-
 docs/api/doxygen/stmt__functor_8h__incl.svg        | 1354 +--
 docs/api/doxygen/stmt__functor_8h_source.html      |   24 +-
 docs/api/doxygen/strided__slice_8h.html            |    2 +-
 docs/api/doxygen/strided__slice_8h__dep__incl.svg  |   72 +-
 docs/api/doxygen/strided__slice_8h__incl.svg       | 1714 ++--
 docs/api/doxygen/strided__slice_8h_source.html     |    2 +-
 docs/api/doxygen/string_8h.html                    |    5 +-
 docs/api/doxygen/string_8h__dep__incl.svg          | 1737 ++--
 docs/api/doxygen/string_8h__incl.svg               |  134 +-
 docs/api/doxygen/string_8h_source.html             |   55 +-
 ...1_1meta__schedule_1_1WorkloadEqual-members.html |   81 +
 ...ructtvm_1_1meta__schedule_1_1WorkloadEqual.html |  139 +
 ...eta__schedule_1_1WorkloadEqual__coll__graph.svg |   24 +
 ..._1_1meta__schedule_1_1WorkloadHash-members.html |   81 +
 ...tructtvm_1_1meta__schedule_1_1WorkloadHash.html |  129 +
 ...meta__schedule_1_1WorkloadHash__coll__graph.svg |   24 +
 ...tvm_1_1relay_1_1AvgPool2DAttrs__coll__graph.svg |   10 +-
 ...m_1_1relay_1_1BatchMatmulAttrs__coll__graph.svg |   10 +-
 ...ucttvm_1_1relay_1_1Conv2DAttrs__coll__graph.svg |   10 +-
 ..._1relay_1_1Conv2DWinogradAttrs__coll__graph.svg |   10 +-
 ...ucttvm_1_1relay_1_1Conv3DAttrs__coll__graph.svg |   10 +-
 ...m_1_1relay_1_1CorrelationAttrs__coll__graph.svg |   10 +-
 ...ructtvm_1_1relay_1_1DenseAttrs__coll__graph.svg |   10 +-
 ...tvm_1_1relay_1_1DensePackAttrs__coll__graph.svg |   10 +-
 ...tvm_1_1relay_1_1DynExpandDimsAttrs-members.html |  125 +
 .../structtvm_1_1relay_1_1DynExpandDimsAttrs.html  |  290 +
 ...1_1relay_1_1DynExpandDimsAttrs__coll__graph.svg |  135 +
 ...relay_1_1DynExpandDimsAttrs__inherit__graph.svg |  129 +
 .../structtvm_1_1relay_1_1EinsumAttrs-members.html |  125 +
 .../doxygen/structtvm_1_1relay_1_1EinsumAttrs.html |  290 +
 ...ucttvm_1_1relay_1_1EinsumAttrs__coll__graph.svg |  230 +
 ...tvm_1_1relay_1_1EinsumAttrs__inherit__graph.svg |  127 +
 ..._1_1relay_1_1GlobalPool2DAttrs__coll__graph.svg |   10 +-
 ...vm_1_1relay_1_1GridSampleAttrs__coll__graph.svg |   10 +-
 ...ucttvm_1_1relay_1_1MatmulAttrs__coll__graph.svg |   10 +-
 ...tvm_1_1relay_1_1MaxPool2DAttrs__coll__graph.svg |   10 +-
 ...tructtvm_1_1relay_1_1OnDeviceAttrs-members.html |   53 +-
 .../structtvm_1_1relay_1_1OnDeviceAttrs.html       |   38 +-
 ...ttvm_1_1relay_1_1OnDeviceAttrs__coll__graph.svg |  159 +-
 ...m_1_1relay_1_1OnDeviceAttrs__inherit__graph.svg |  155 +-
 ...tvm_1_1relay_1_1ScatterNDAttrs__coll__graph.svg |   10 +-
 ...cttvm_1_1relay_1_1TIRCallAttrs__coll__graph.svg |    4 +-
 ...vm_1_1relay_1_1UpSamplingAttrs__coll__graph.svg |   10 +-
 .../doxygen/structtvm_1_1runtime_1_1TypeIndex.html |    2 +-
 ...cttvm_1_1runtime_1_1profiling_1_1CallFrame.html |    4 +-
 ...time_1_1profiling_1_1CallFrame__coll__graph.svg |   10 +-
 ...1runtime_1_1profiling_1_1DeviceWrapperNode.html |    8 +-
 .../structtvm_1_1runtime_1_1vm_1_1Buffer.html      |    4 +-
 ...tvm_1_1runtime_1_1vm_1_1VMFunction-members.html |    4 +-
 .../structtvm_1_1runtime_1_1vm_1_1VMFunction.html  |   22 +-
 docs/api/doxygen/structural__equal_8h.html         |    2 +-
 .../doxygen/structural__equal_8h__dep__incl.svg    | 1392 ++--
 docs/api/doxygen/structural__equal_8h_source.html  |    2 +-
 docs/api/doxygen/structural__hash_8h.html          |    2 +-
 .../api/doxygen/structural__hash_8h__dep__incl.svg | 1392 ++--
 docs/api/doxygen/tag_8h.html                       |    2 +-
 docs/api/doxygen/tag_8h__incl.svg                  | 1908 +++--
 docs/api/doxygen/tag_8h_source.html                |    4 +-
 docs/api/doxygen/target_8h.html                    |    4 +-
 docs/api/doxygen/target_8h__dep__incl.svg          |  886 +-
 docs/api/doxygen/target_8h__incl.svg               | 1932 ++---
 docs/api/doxygen/target_8h_source.html             |   10 +-
 docs/api/doxygen/target__info_8h.html              |    2 +-
 docs/api/doxygen/target__info_8h__incl.svg         | 1226 +--
 docs/api/doxygen/target__kind_8h.html              |    4 +-
 docs/api/doxygen/target__kind_8h__dep__incl.svg    |  904 +-
 docs/api/doxygen/target__kind_8h__incl.svg         | 1472 ++--
 docs/api/doxygen/target__kind_8h_source.html       |    6 +-
 docs/api/doxygen/task__scheduler_8h.html           |  113 +
 docs/api/doxygen/task__scheduler_8h__incl.svg      | 1450 ++++
 docs/api/doxygen/task__scheduler_8h_source.html    |  119 +
 docs/api/doxygen/te_2schedule_8h.html              |    2 +-
 docs/api/doxygen/te_2schedule_8h__dep__incl.svg    |  648 +-
 docs/api/doxygen/te_2schedule_8h__incl.svg         | 1581 ++--
 docs/api/doxygen/te_2schedule_8h_source.html       |    4 +-
 docs/api/doxygen/tensor_8h.html                    |    2 +-
 docs/api/doxygen/tensor_8h__dep__incl.svg          |  664 +-
 docs/api/doxygen/tensor_8h__incl.svg               | 1845 ++---
 docs/api/doxygen/tensor_8h_source.html             |    8 +-
 docs/api/doxygen/tensor__intrin_8h.html            |    2 +-
 docs/api/doxygen/tensor__intrin_8h__dep__incl.svg  |  640 +-
 docs/api/doxygen/tensor__intrin_8h__incl.svg       | 1756 ++--
 docs/api/doxygen/tensor__intrin_8h_source.html     |    2 +-
 docs/api/doxygen/tensor__type_8h.html              |    2 +-
 docs/api/doxygen/tensor__type_8h__dep__incl.svg    |  248 +-
 docs/api/doxygen/tensor__type_8h__incl.svg         | 1230 +--
 docs/api/doxygen/tensor__type_8h_source.html       |    2 +-
 docs/api/doxygen/tensor__utils_8h.html             |    2 +-
 docs/api/doxygen/tensor__utils_8h__dep__incl.svg   |   80 +-
 docs/api/doxygen/tensor__utils_8h__incl.svg        | 1582 ++--
 docs/api/doxygen/tir_2analysis_8h.html             |    2 +-
 docs/api/doxygen/tir_2analysis_8h__dep__incl.svg   |  176 +-
 docs/api/doxygen/tir_2analysis_8h__incl.svg        | 2038 ++---
 docs/api/doxygen/tir_2analysis_8h_source.html      |    6 +-
 docs/api/doxygen/tir_2expr_8h.html                 |    2 +-
 docs/api/doxygen/tir_2expr_8h__dep__incl.svg       |  608 +-
 docs/api/doxygen/tir_2expr_8h__incl.svg            | 1436 ++--
 docs/api/doxygen/tir_2expr_8h_source.html          |   76 +-
 .../doxygen/tir_2expr__functor_8h__dep__incl.svg   |   12 +-
 docs/api/doxygen/tir_2expr__functor_8h__incl.svg   | 1458 ++--
 docs/api/doxygen/tir_2expr__functor_8h_source.html |    4 +-
 docs/api/doxygen/tir_2function_8h.html             |    4 +-
 docs/api/doxygen/tir_2function_8h__dep__incl.svg   | 1070 +--
 docs/api/doxygen/tir_2function_8h__incl.svg        | 1559 ++--
 docs/api/doxygen/tir_2function_8h_source.html      |    6 +-
 docs/api/doxygen/tir_2op_8h.html                   |    2 +-
 docs/api/doxygen/tir_2op_8h__dep__incl.svg         |  660 +-
 docs/api/doxygen/tir_2op_8h__incl.svg              | 1804 ++--
 docs/api/doxygen/tir_2op_8h_source.html            |    6 +-
 docs/api/doxygen/tir_2op__attr__types_8h.html      |    2 +-
 .../doxygen/tir_2op__attr__types_8h__dep__incl.svg |  184 +-
 docs/api/doxygen/tir_2op__attr__types_8h__incl.svg | 1228 +--
 .../doxygen/tir_2op__attr__types_8h_source.html    |    2 +-
 docs/api/doxygen/tir_2schedule_2schedule_8h.html   |    8 +-
 .../tir_2schedule_2schedule_8h__dep__incl.svg      |   84 +
 .../doxygen/tir_2schedule_2schedule_8h__incl.svg   | 1785 ++--
 .../doxygen/tir_2schedule_2schedule_8h_source.html |   14 +-
 docs/api/doxygen/tir_2transform_8h.html            |    2 +-
 docs/api/doxygen/tir_2transform_8h__incl.svg       | 1588 ++--
 docs/api/doxygen/tir_2transform_8h_source.html     |    2 +-
 docs/api/doxygen/topi_2nn_8h__dep__incl.svg        |   12 +-
 docs/api/doxygen/topi_2nn_8h__incl.svg             |  788 +-
 docs/api/doxygen/topi_2nn_8h_source.html           |    2 +-
 docs/api/doxygen/topi_2transform_8h__dep__incl.svg |   64 +-
 docs/api/doxygen/topi_2transform_8h__incl.svg      |  764 +-
 docs/api/doxygen/topi_2transform_8h_source.html    |    4 +-
 docs/api/doxygen/trace_8h.html                     |    4 +-
 docs/api/doxygen/trace_8h__dep__incl.svg           |  124 +-
 docs/api/doxygen/trace_8h__incl.svg                |  952 +--
 docs/api/doxygen/trace_8h_source.html              |    6 +-
 docs/api/doxygen/transform__step_8h.html           |    2 +-
 docs/api/doxygen/transform__step_8h__dep__incl.svg |   96 +-
 docs/api/doxygen/transform__step_8h__incl.svg      | 1554 ++--
 docs/api/doxygen/transform__step_8h_source.html    |    6 +-
 docs/api/doxygen/tune__context_8h.html             |  116 +
 docs/api/doxygen/tune__context_8h__dep__incl.svg   |   36 +
 docs/api/doxygen/tune__context_8h__incl.svg        | 1510 ++++
 docs/api/doxygen/tune__context_8h_source.html      |  103 +
 docs/api/doxygen/type__functor_8h__incl.svg        |  628 +-
 docs/api/doxygen/type__functor_8h_source.html      |    4 +-
 docs/api/doxygen/type__relation_8h.html            |    2 +-
 docs/api/doxygen/type__relation_8h__dep__incl.svg  |  584 +-
 docs/api/doxygen/type__relation_8h__incl.svg       | 1914 ++---
 docs/api/doxygen/type__relation_8h_source.html     |    2 +-
 docs/api/doxygen/utils_8h.html                     |    2 +-
 docs/api/doxygen/utils_8h__incl.svg                | 1224 +--
 docs/api/doxygen/utils_8h_source.html              |    2 +-
 docs/api/doxygen/var_8h.html                       |    2 +-
 docs/api/doxygen/var_8h__dep__incl.svg             |  616 +-
 docs/api/doxygen/var_8h__incl.svg                  | 1236 +--
 docs/api/doxygen/var_8h_source.html                |    4 +-
 docs/api/doxygen/vision_8h.html                    |    2 +-
 docs/api/doxygen/vision_8h__incl.svg               | 1593 ++--
 docs/api/doxygen/vision_8h_source.html             |    4 +-
 docs/api/doxygen/with_8h.html                      |    2 +-
 docs/api/doxygen/with_8h__dep__incl.svg            | 1252 ++-
 docs/api/doxygen/x86_2bnn_8h__incl.svg             |  776 +-
 docs/api/doxygen/x86_2bnn_8h_source.html           |    2 +-
 docs/api/doxygen/x86_2default_8h__incl.svg         |  816 +-
 docs/api/doxygen/x86_2default_8h_source.html       |    2 +-
 docs/api/doxygen/x86_2injective_8h__incl.svg       |  776 +-
 docs/api/doxygen/x86_2injective_8h_source.html     |    2 +-
 .../javadoc/org/apache/tvm/class-use/Function.html |    8 +-
 docs/api/links.html                                |  391 -
 docs/api/python/auto_scheduler.html                | 2092 -----
 docs/api/python/autotvm.html                       | 2652 ------
 docs/api/python/contrib.html                       | 1724 ----
 docs/api/python/driver.html                        |  513 --
 docs/api/python/error.html                         |  596 --
 docs/api/python/graph_executor.html                |  708 --
 docs/api/python/index.html                         |  493 --
 docs/api/python/ir.html                            | 2350 ------
 docs/api/python/micro.html                         |  792 --
 docs/api/python/ndarray.html                       |  574 --
 docs/api/python/relay/analysis.html                | 1155 ---
 docs/api/python/relay/backend.html                 |  865 --
 docs/api/python/relay/dataflow_pattern.html        | 1453 ----
 docs/api/python/relay/frontend.html                |  814 --
 docs/api/python/relay/image.html                   |  694 --
 docs/api/python/relay/index.html                   | 5153 ------------
 docs/api/python/relay/nn.html                      | 3167 -------
 docs/api/python/relay/testing.html                 | 1177 ---
 docs/api/python/relay/transform.html               | 1778 ----
 docs/api/python/relay/vision.html                  |  740 --
 docs/api/python/rpc.html                           |  998 ---
 docs/api/python/runtime.html                       | 1650 ----
 docs/api/python/target.html                        |  947 ---
 docs/api/python/te.html                            | 3036 -------
 docs/api/python/tir.html                           | 6846 ---------------
 docs/api/python/topi.html                          | 7601 -----------------
 docs/api/python/vta/index.html                     |  558 --
 docs/api/typedoc/classes/bytestreamreader.html     |   12 +-
 docs/api/typedoc/classes/cachedcallstack.html      |   34 +-
 docs/api/typedoc/classes/dldatatype.html           |   12 +-
 docs/api/typedoc/classes/dldevice.html             |   10 +-
 docs/api/typedoc/classes/environment.html          |   12 +-
 docs/api/typedoc/classes/ffilibrary.html           |   20 +-
 docs/api/typedoc/classes/graphexecutor.html        |   16 +-
 docs/api/typedoc/classes/instance.html             |   40 +-
 docs/api/typedoc/classes/memory.html               |   34 +-
 docs/api/typedoc/classes/module.html               |   10 +-
 docs/api/typedoc/classes/ndarray.html              |   22 +-
 docs/api/typedoc/classes/packedfunccell.html       |    6 +-
 docs/api/typedoc/classes/rpcserver.html            |   14 +-
 docs/api/typedoc/classes/scalar.html               |    6 +-
 docs/api/typedoc/classes/webgpucontext.html        |   12 +-
 docs/api/typedoc/enums/argtypecode.html            |   30 +-
 docs/api/typedoc/enums/aynccallbackcode.html       |    4 +-
 docs/api/typedoc/enums/dldatatypecode.html         |    8 +-
 docs/api/typedoc/enums/rpcserverstate.html         |   12 +-
 docs/api/typedoc/enums/sizeof.html                 |   18 +-
 docs/api/typedoc/index.html                        |  112 +-
 docs/api/typedoc/interfaces/disposable.html        |    2 +-
 docs/api/typedoc/interfaces/functioninfo.html      |    6 +-
 docs/api/typedoc/interfaces/libraryprovider.html   |    4 +-
 docs/arch/benchmark.html                           |  586 ++
 docs/arch/convert_layout.html                      |  626 ++
 docs/arch/debugger.html                            |  571 ++
 docs/arch/device_target_interactions.html          |  607 ++
 docs/arch/frontend/tensorflow.html                 |  629 ++
 docs/arch/hybrid_script.html                       |  471 ++
 docs/arch/index.html                               |  780 ++
 docs/arch/inferbound.html                          | 1000 +++
 .../arch/introduction_to_module_serialization.html |  589 ++
 docs/arch/microtvm_design.html                     |  743 ++
 docs/arch/model_library_format.html                |  571 ++
 docs/arch/pass_infra.html                          | 1044 +++
 docs/arch/relay_intro.html                         |  565 ++
 docs/arch/relay_op_strategy.html                   |  628 ++
 docs/arch/runtime.html                             |  643 ++
 docs/arch/runtimes/vulkan.html                     |  615 ++
 docs/arch/security.html                            |  421 +
 docs/arch/virtual_machine.html                     |  738 ++
 docs/contribute/code_guide.html                    |   54 +-
 docs/contribute/code_review.html                   |   50 +-
 docs/contribute/committer_guide.html               |   54 +-
 docs/contribute/community.html                     |   54 +-
 docs/contribute/document.html                      |  237 +-
 docs/contribute/error_handling.html                |   56 +-
 docs/contribute/git_howto.html                     |   50 +-
 docs/contribute/index.html                         |   68 +-
 docs/contribute/pull_request.html                  |   52 +-
 docs/contribute/release_process.html               |   54 +-
 docs/deploy/android.html                           |  425 -
 docs/deploy/arm_compute_lib.html                   |  673 --
 docs/deploy/bnns.html                              |  564 --
 docs/deploy/cpp_deploy.html                        |  435 -
 docs/deploy/hls.html                               |  565 --
 docs/deploy/index.html                             |  584 --
 docs/deploy/integrate.html                         |  450 -
 docs/deploy/tensorrt.html                          |  746 --
 docs/deploy/vitis_ai.html                          | 1127 ---
 docs/dev/benchmark.html                            |  594 --
 docs/dev/codebase_walkthrough.html                 |  553 --
 docs/dev/convert_layout.html                       |  634 --
 docs/dev/debugger.html                             |  579 --
 docs/dev/device_target_interactions.html           |  615 --
 docs/dev/frontend/tensorflow.html                  |  637 --
 docs/dev/how_to.html                               |  403 -
 docs/dev/how_to/how_to.html                        |  393 +
 docs/dev/how_to/pytest_target_parametrization.html |  628 ++
 docs/dev/how_to/relay_add_op.html                  |  823 ++
 docs/dev/how_to/relay_add_pass.html                |  726 ++
 docs/dev/how_to/relay_bring_your_own_codegen.html  | 1212 +++
 docs/dev/hybrid_script.html                        |  479 --
 docs/dev/index.html                                |  788 --
 docs/dev/inferbound.html                           | 1008 ---
 docs/dev/introduction_to_module_serialization.html |  597 --
 docs/dev/microtvm_design.html                      |  751 --
 docs/dev/model_library_format.html                 |  579 --
 docs/dev/pass_infra.html                           | 1052 ---
 docs/dev/pytest_target_parametrization.html        |  637 --
 docs/dev/relay_add_op.html                         |  832 --
 docs/dev/relay_add_pass.html                       |  735 --
 docs/dev/relay_bring_your_own_codegen.html         | 1221 ---
 docs/dev/relay_intro.html                          |  573 --
 docs/dev/relay_op_strategy.html                    |  636 --
 docs/dev/runtime.html                              |  651 --
 docs/dev/runtimes/vulkan.html                      |  623 --
 docs/dev/security.html                             |  429 -
 docs/dev/tutorial/codebase_walkthrough.html        |  541 ++
 docs/dev/tutorial/index.html                       |  387 +
 docs/dev/virtual_machine.html                      |  745 --
 docs/errors.html                                   |   80 +-
 docs/faq.html                                      |   94 +-
 docs/genindex.html                                 | 3134 ++++---
 docs/how_to/compile_models/from_caffe2.html        |  557 ++
 docs/how_to/compile_models/from_coreml.html        |  525 ++
 docs/how_to/compile_models/from_darknet.html       |  635 ++
 docs/how_to/compile_models/from_keras.html         |  553 ++
 docs/how_to/compile_models/from_mxnet.html         |  559 ++
 docs/how_to/compile_models/from_onnx.html          |  550 ++
 docs/how_to/compile_models/from_paddle.html        |  534 ++
 docs/how_to/compile_models/from_pytorch.html       |  584 ++
 docs/how_to/compile_models/from_tensorflow.html    |  697 ++
 docs/how_to/compile_models/from_tflite.html        |  604 ++
 docs/how_to/compile_models/index.html              |  468 ++
 docs/how_to/compile_models/sg_execution_times.html |  379 +
 docs/how_to/deploy/android.html                    |  430 +
 docs/how_to/deploy/arm_compute_lib.html            |  673 ++
 docs/how_to/deploy/bnns.html                       |  565 ++
 docs/how_to/deploy/cpp_deploy.html                 |  440 +
 docs/how_to/deploy/hls.html                        |  568 ++
 docs/how_to/deploy/index.html                      |  608 ++
 docs/how_to/deploy/integrate.html                  |  454 +
 docs/how_to/deploy/tensorrt.html                   |  745 ++
 docs/how_to/deploy/vitis_ai.html                   |  896 ++
 .../deploy_models/deploy_model_on_android.html     |  732 ++
 .../how_to/deploy_models/deploy_model_on_rasp.html |  622 ++
 .../deploy_object_detection_pytorch.html           |  580 ++
 docs/how_to/deploy_models/deploy_prequantized.html |  656 ++
 .../deploy_models/deploy_prequantized_tflite.html  |  653 ++
 docs/how_to/deploy_models/deploy_quantized.html    |  565 ++
 docs/how_to/deploy_models/deploy_sparse.html       |  758 ++
 docs/how_to/deploy_models/deploy_ssd_gluoncv.html  |  537 ++
 docs/how_to/deploy_models/index.html               |  457 +
 docs/how_to/deploy_models/sg_execution_times.html  |  377 +
 .../extend_tvm/bring_your_own_datatypes.html       |  828 ++
 docs/how_to/extend_tvm/index.html                  |  428 +
 docs/how_to/extend_tvm/low_level_custom_pass.html  |  587 ++
 docs/how_to/extend_tvm/sg_execution_times.html     |  373 +
 docs/how_to/extend_tvm/use_pass_infra.html         |  886 ++
 docs/how_to/extend_tvm/use_pass_instrument.html    |  949 +++
 docs/how_to/index.html                             |  410 +
 docs/how_to/optimize_operators/index.html          |  419 +
 docs/how_to/optimize_operators/opt_conv_cuda.html  |  622 ++
 .../optimize_operators/opt_conv_tensorcore.html    |  956 +++
 docs/how_to/optimize_operators/opt_gemm.html       | 1003 +++
 .../optimize_operators/sg_execution_times.html     |  372 +
 docs/how_to/profile/index.html                     |  401 +
 docs/how_to/profile/papi.html                      |  482 ++
 docs/how_to/tune_with_autoscheduler/index.html     |  441 +
 .../sg_execution_times.html                        |  375 +
 .../tune_conv2d_layer_cuda.html                    | 1630 ++++
 .../tune_with_autoscheduler/tune_network_arm.html  | 1011 +++
 .../tune_with_autoscheduler/tune_network_cuda.html |  983 +++
 .../tune_with_autoscheduler/tune_network_mali.html |  946 +++
 .../tune_with_autoscheduler/tune_network_x86.html  | 1002 +++
 .../tune_with_autoscheduler/tune_sparse_x86.html   |  783 ++
 docs/how_to/tune_with_autotvm/index.html           |  435 +
 .../tune_with_autotvm/sg_execution_times.html      |  374 +
 .../how_to/tune_with_autotvm/tune_conv2d_cuda.html |  671 ++
 docs/how_to/tune_with_autotvm/tune_relay_arm.html  |  784 ++
 docs/how_to/tune_with_autotvm/tune_relay_cuda.html |  749 ++
 .../tune_with_autotvm/tune_relay_mobile_gpu.html   |  780 ++
 docs/how_to/tune_with_autotvm/tune_relay_x86.html  |  686 ++
 docs/how_to/work_with_microtvm/index.html          |  420 +
 docs/how_to/work_with_microtvm/micro_autotune.html |  682 ++
 .../work_with_microtvm/micro_reference_vm.html     |  530 ++
 docs/how_to/work_with_microtvm/micro_tflite.html   |  738 ++
 .../work_with_microtvm/sg_execution_times.html     |  372 +
 docs/how_to/work_with_relay/build_gcn.html         |  812 ++
 docs/how_to/work_with_relay/index.html             |  410 +
 .../how_to/work_with_relay/sg_execution_times.html |  371 +
 .../how_to/work_with_relay/using_external_lib.html |  948 +++
 docs/how_to/work_with_schedules/extern_op.html     |  545 ++
 docs/how_to/work_with_schedules/index.html         |  452 +
 docs/how_to/work_with_schedules/intrin_math.html   |  684 ++
 docs/how_to/work_with_schedules/reduction.html     |  755 ++
 docs/how_to/work_with_schedules/scan.html          |  627 ++
 .../work_with_schedules/schedule_primitives.html   |  801 ++
 .../work_with_schedules/sg_execution_times.html    |  377 +
 docs/how_to/work_with_schedules/tedd.html          |  538 ++
 docs/how_to/work_with_schedules/tensorize.html     |  863 ++
 docs/how_to/work_with_schedules/tuple_inputs.html  |  580 ++
 docs/index.html                                    |  115 +-
 docs/install/docker.html                           |   53 +-
 docs/install/from_source.html                      |   55 +-
 docs/install/index.html                            |   73 +-
 docs/install/nnpack.html                           |   49 +-
 docs/install/tlcpack.html                          |  386 +
 docs/langref/hybrid_script.html                    |  576 --
 docs/langref/index.html                            |  485 --
 docs/langref/relay_adt.html                        |  855 --
 docs/langref/relay_expr.html                       |  969 ---
 docs/langref/relay_op.html                         |  901 --
 docs/langref/relay_pattern.html                    |  858 --
 docs/langref/relay_type.html                       |  707 --
 docs/microtvm/index.html                           |  435 -
 docs/objects.inv                                   |  Bin 19926 -> 20607 bytes
 docs/profiling/index.html                          |  393 -
 docs/profiling/papi.html                           |  474 --
 docs/py-modindex.html                              |  194 +-
 docs/reference/api/links.html                      |  384 +
 docs/reference/api/python/auto_scheduler.html      | 2084 +++++
 docs/reference/api/python/autotvm.html             | 2644 ++++++
 docs/reference/api/python/contrib.html             | 1657 ++++
 docs/reference/api/python/driver.html              |  505 ++
 docs/reference/api/python/error.html               |  588 ++
 docs/reference/api/python/graph_executor.html      |  700 ++
 docs/reference/api/python/index.html               |  485 ++
 docs/reference/api/python/ir.html                  | 2365 ++++++
 docs/reference/api/python/micro.html               |  784 ++
 docs/reference/api/python/ndarray.html             |  566 ++
 docs/reference/api/python/relay/analysis.html      | 1109 +++
 docs/reference/api/python/relay/backend.html       |  857 ++
 .../api/python/relay/dataflow_pattern.html         | 1445 ++++
 docs/reference/api/python/relay/frontend.html      |  814 ++
 docs/reference/api/python/relay/image.html         |  686 ++
 docs/reference/api/python/relay/index.html         | 5168 ++++++++++++
 docs/reference/api/python/relay/nn.html            | 3159 +++++++
 docs/reference/api/python/relay/testing.html       | 1169 +++
 docs/reference/api/python/relay/transform.html     | 1757 ++++
 docs/reference/api/python/relay/vision.html        |  732 ++
 docs/reference/api/python/rpc.html                 |  990 +++
 docs/reference/api/python/runtime.html             | 1653 ++++
 docs/reference/api/python/target.html              |  939 +++
 docs/reference/api/python/te.html                  | 3031 +++++++
 docs/reference/api/python/tir.html                 | 6957 ++++++++++++++++
 docs/reference/api/python/topi.html                | 7593 +++++++++++++++++
 docs/reference/api/python/vta/index.html           |  550 ++
 docs/reference/langref/hybrid_script.html          |  568 ++
 docs/reference/langref/index.html                  |  477 ++
 docs/reference/langref/relay_adt.html              |  847 ++
 docs/reference/langref/relay_expr.html             |  961 +++
 docs/reference/langref/relay_op.html               |  893 ++
 docs/reference/langref/relay_pattern.html          |  850 ++
 docs/reference/langref/relay_type.html             |  699 ++
 docs/reference/publications.html                   |  387 +
 docs/search.html                                   |   46 +-
 docs/searchindex.js                                |    2 +-
 docs/topic/microtvm/index.html                     |  427 +
 docs/topic/vta/dev/config.html                     |  482 ++
 docs/topic/vta/dev/hardware.html                   |  658 ++
 docs/topic/vta/dev/index.html                      |  406 +
 docs/topic/vta/index.html                          |  408 +
 docs/topic/vta/install.html                        |  794 ++
 .../vta/tutorials/autotvm/sg_execution_times.html  |  371 +
 docs/topic/vta/tutorials/autotvm/tune_alu_vta.html |  716 ++
 .../vta/tutorials/autotvm/tune_relay_vta.html      |  880 ++
 .../tutorials/frontend/deploy_classification.html  |  721 ++
 .../vta/tutorials/frontend/deploy_detection.html   |  727 ++
 .../vta/tutorials/frontend/sg_execution_times.html |  371 +
 docs/topic/vta/tutorials/index.html                |  465 ++
 docs/topic/vta/tutorials/matrix_multiply.html      |  967 +++
 .../vta/tutorials/optimize/convolution_opt.html    | 1135 +++
 .../tutorials/optimize/matrix_multiply_opt.html    |  953 +++
 .../vta/tutorials/optimize/sg_execution_times.html |  371 +
 docs/topic/vta/tutorials/sg_execution_times.html   |  371 +
 docs/topic/vta/tutorials/vta_get_started.html      |  839 ++
 docs/tutorial/auto_scheduler_matmul_x86.html       |  695 ++
 docs/tutorial/autotvm_matmul_x86.html              |  755 ++
 docs/tutorial/autotvm_relay_x86.html               |  996 +++
 docs/tutorial/cross_compilation_and_rpc.html       |  643 ++
 docs/tutorial/index.html                           |  458 +
 docs/tutorial/install.html                         |  436 +
 docs/tutorial/intro_topi.html                      |  838 ++
 docs/tutorial/introduction.html                    |  516 ++
 docs/tutorial/relay_quick_start.html               |  646 ++
 docs/tutorial/sg_execution_times.html              |  379 +
 docs/tutorial/tensor_expr_get_started.html         | 1553 ++++
 docs/tutorial/tvmc_command_line_driver.html        |  833 ++
 .../auto_scheduler/sg_execution_times.html         |  383 -
 .../auto_scheduler/tune_conv2d_layer_cuda.html     | 1622 ----
 .../tutorials/auto_scheduler/tune_network_arm.html | 1003 ---
 .../auto_scheduler/tune_network_cuda.html          |  975 ---
 .../auto_scheduler/tune_network_mali.html          |  938 ---
 .../tutorials/auto_scheduler/tune_network_x86.html |  994 ---
 docs/tutorials/auto_scheduler/tune_sparse_x86.html |  778 --
 docs/tutorials/autotvm/sg_execution_times.html     |  382 -
 docs/tutorials/autotvm/tune_conv2d_cuda.html       |  663 --
 docs/tutorials/autotvm/tune_relay_arm.html         |  776 --
 docs/tutorials/autotvm/tune_relay_cuda.html        |  741 --
 docs/tutorials/autotvm/tune_relay_mobile_gpu.html  |  772 --
 docs/tutorials/autotvm/tune_relay_x86.html         |  678 --
 docs/tutorials/dev/bring_your_own_datatypes.html   |  820 --
 docs/tutorials/dev/low_level_custom_pass.html      |  583 --
 docs/tutorials/dev/sg_execution_times.html         |  381 -
 docs/tutorials/dev/use_pass_infra.html             |  985 ---
 docs/tutorials/dev/use_pass_instrument.html        |  941 ---
 docs/tutorials/frontend/build_gcn.html             |  826 --
 .../frontend/deploy_model_on_android.html          |  743 --
 docs/tutorials/frontend/deploy_model_on_rasp.html  |  625 --
 .../frontend/deploy_object_detection_pytorch.html  |  628 --
 docs/tutorials/frontend/deploy_prequantized.html   |  677 --
 .../frontend/deploy_prequantized_tflite.html       |  666 --
 docs/tutorials/frontend/deploy_quantized.html      |  568 --
 docs/tutorials/frontend/deploy_sparse.html         |  769 --
 docs/tutorials/frontend/deploy_ssd_gluoncv.html    |  566 --
 docs/tutorials/frontend/from_caffe2.html           |  569 --
 docs/tutorials/frontend/from_coreml.html           |  526 --
 docs/tutorials/frontend/from_darknet.html          |  636 --
 docs/tutorials/frontend/from_keras.html            |  554 --
 docs/tutorials/frontend/from_mxnet.html            |  561 --
 docs/tutorials/frontend/from_onnx.html             |  551 --
 docs/tutorials/frontend/from_pytorch.html          |  594 --
 docs/tutorials/frontend/from_tensorflow.html       |  698 --
 docs/tutorials/frontend/from_tflite.html           |  605 --
 docs/tutorials/frontend/sg_execution_times.html    |  396 -
 docs/tutorials/frontend/using_external_lib.html    |  957 ---
 .../get_started/auto_scheduler_matmul_x86.html     |  702 --
 docs/tutorials/get_started/autotvm_matmul_x86.html |  762 --
 docs/tutorials/get_started/autotvm_relay_x86.html  | 1004 ---
 .../get_started/cross_compilation_and_rpc.html     |  650 --
 docs/tutorials/get_started/install.html            |  443 -
 docs/tutorials/get_started/introduction.html       |  523 --
 docs/tutorials/get_started/relay_quick_start.html  |  653 --
 docs/tutorials/get_started/sg_execution_times.html |  386 -
 .../get_started/tensor_expr_get_started.html       | 1560 ----
 .../get_started/tvmc_command_line_driver.html      |  839 --
 docs/tutorials/index.html                          |  835 --
 docs/tutorials/language/extern_op.html             |  537 --
 docs/tutorials/language/intrin_math.html           |  676 --
 docs/tutorials/language/reduction.html             |  747 --
 docs/tutorials/language/scan.html                  |  619 --
 docs/tutorials/language/schedule_primitives.html   |  793 --
 docs/tutorials/language/sg_execution_times.html    |  385 -
 docs/tutorials/language/tedd.html                  |  530 --
 docs/tutorials/language/tensorize.html             |  855 --
 docs/tutorials/language/tuple_inputs.html          |  572 --
 docs/tutorials/micro/micro_autotune.html           |  680 --
 docs/tutorials/micro/micro_reference_vm.html       |  529 --
 docs/tutorials/micro/micro_tflite.html             |  734 --
 docs/tutorials/micro/sg_execution_times.html       |  380 -
 docs/tutorials/optimize/opt_conv_cuda.html         |  614 --
 docs/tutorials/optimize/opt_conv_tensorcore.html   |  948 ---
 docs/tutorials/optimize/opt_gemm.html              |  995 ---
 docs/tutorials/optimize/sg_execution_times.html    |  380 -
 docs/tutorials/topi/intro_topi.html                |  836 --
 docs/tutorials/topi/sg_execution_times.html        |  378 -
 docs/vta/dev/config.html                           |  490 --
 docs/vta/dev/hardware.html                         |  666 --
 docs/vta/dev/index.html                            |  414 -
 docs/vta/index.html                                |  416 -
 docs/vta/install.html                              |  802 --
 docs/vta/tutorials/autotvm/sg_execution_times.html |  379 -
 docs/vta/tutorials/autotvm/tune_alu_vta.html       |  724 --
 docs/vta/tutorials/autotvm/tune_relay_vta.html     |  888 --
 .../tutorials/frontend/deploy_classification.html  |  725 --
 docs/vta/tutorials/frontend/deploy_detection.html  |  733 --
 .../vta/tutorials/frontend/sg_execution_times.html |  379 -
 docs/vta/tutorials/index.html                      |  473 --
 docs/vta/tutorials/matrix_multiply.html            |  975 ---
 docs/vta/tutorials/optimize/convolution_opt.html   | 1143 ---
 .../tutorials/optimize/matrix_multiply_opt.html    |  961 ---
 .../vta/tutorials/optimize/sg_execution_times.html |  379 -
 docs/vta/tutorials/sg_execution_times.html         |  379 -
 docs/vta/tutorials/vta_get_started.html            |  847 --
 2101 files changed, 387772 insertions(+), 333724 deletions(-)

diff --git a/docs/_downloads/272a5a893d007658546dc0eaf0a7aeed/tune_relay_cuda.py b/docs/_downloads/0387f07dee851b2b8c6b73e3e88c3140/tune_relay_cuda.py
similarity index 100%
rename from docs/_downloads/272a5a893d007658546dc0eaf0a7aeed/tune_relay_cuda.py
rename to docs/_downloads/0387f07dee851b2b8c6b73e3e88c3140/tune_relay_cuda.py
diff --git a/docs/_downloads/95f64205f29091c5f31071f9072f3236/install.py b/docs/_downloads/067cf39a44d9f315a39f8a7547c556d8/install.py
similarity index 100%
rename from docs/_downloads/95f64205f29091c5f31071f9072f3236/install.py
rename to docs/_downloads/067cf39a44d9f315a39f8a7547c556d8/install.py
diff --git a/docs/_downloads/15c94550bd86853c42df8e5d139d700a/tune_sparse_x86.py b/docs/_downloads/07733b6b2cc4df026fce525285e8f538/tune_sparse_x86.py
similarity index 100%
rename from docs/_downloads/15c94550bd86853c42df8e5d139d700a/tune_sparse_x86.py
rename to docs/_downloads/07733b6b2cc4df026fce525285e8f538/tune_sparse_x86.py
diff --git a/docs/_downloads/87b9e8307245d848689e4cdc3e6fa9bf/deploy_sparse.ipynb b/docs/_downloads/0b60295044fd20226a0d5adc52b50b2f/deploy_sparse.ipynb
similarity index 100%
rename from docs/_downloads/87b9e8307245d848689e4cdc3e6fa9bf/deploy_sparse.ipynb
rename to docs/_downloads/0b60295044fd20226a0d5adc52b50b2f/deploy_sparse.ipynb
diff --git a/docs/_downloads/ea0c81cab71096d16b825a33fd276c58/from_mxnet.py b/docs/_downloads/0e2f38fcb1a1fb3e636e5953aa600dee/from_mxnet.py
similarity index 100%
rename from docs/_downloads/ea0c81cab71096d16b825a33fd276c58/from_mxnet.py
rename to docs/_downloads/0e2f38fcb1a1fb3e636e5953aa600dee/from_mxnet.py
diff --git a/docs/_downloads/440add54bfa6dfb4fa9ed5037187aa4c/opt_gemm.ipynb b/docs/_downloads/0f8d36b3ffd04a5a08089dc671eb788e/opt_gemm.ipynb
similarity index 100%
rename from docs/_downloads/440add54bfa6dfb4fa9ed5037187aa4c/opt_gemm.ipynb
rename to docs/_downloads/0f8d36b3ffd04a5a08089dc671eb788e/opt_gemm.ipynb
diff --git a/docs/_downloads/109bfb3877299cad725a4180ee2685d9/micro_autotune.ipynb b/docs/_downloads/109bfb3877299cad725a4180ee2685d9/micro_autotune.ipynb
deleted file mode 100644
index 40f8461..0000000
--- a/docs/_downloads/109bfb3877299cad725a4180ee2685d9/micro_autotune.ipynb
+++ /dev/null
@@ -1,162 +0,0 @@
-{
-  "cells": [
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "%matplotlib inline"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "\n\nAutotuning with micro TVM\n=========================\n**Author**: `Andrew Reusch <https://github.com/areusch>`_, `Mehrdad Hessar <https://github.com/mehrdadh>`\n\nThis tutorial explains how to autotune a model using the C runtime.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "import numpy as np\nimport subprocess\nimport pathlib\n\nimport tvm"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Defining the model\n###################\n\n To begin with, define a model in Relay to be executed on-device. Then create an IRModule from relay model and\n fill parameters with random numbers.\n\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "data_shape = (1, 3, 10, 10)\nweight_shape = (6, 3, 5, 5)\n\ndata = tvm.relay.var(\"data\", tvm.relay.TensorType(data_shape, \"float32\"))\nweight = tvm.relay.var(\"weight\", tvm.relay.TensorType(weight_shape, \"float32\"))\n\ny = tvm.relay.nn.conv2d(\n    data,\n    weight,\n    padding=(2, 2),\n    kernel_size=(5, 5),\n    kernel_layout=\"OIHW\",\n    out_dtype=\"float32\",\n)\nf = tvm.relay.Function([data, weight], y)\n\nrelay_mod = tvm.IRModule.from_expr(f)\nrelay_mod = tvm.r [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Defining the target #\n######################\n Now we define the TVM target that describes the execution environment. This looks very similar\n to target definitions from other microTVM tutorials.\n\n When running on physical hardware, choose a target and a board that\n describe the hardware. There are multiple hardware targets that could be selected from\n PLATFORM list in this tutorial. You can chose the platform by passing --platform argument when running\n this tutorial.\n\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "TARGET = tvm.target.target.micro(\"host\")\n\n# Compiling for physical hardware\n# --------------------------------------------------------------------------\n#  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The\n#  STM32L4R5ZI Nucleo target and board is chosen in the example below.\n#\n#    TARGET = tvm.target.target.micro(\"stm32l4r5zi\")\n#    BOARD = \"nucleo_l4r5zi\""
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Extracting tuning tasks\n########################\n Not all operators in the Relay program printed above can be tuned. Some are so trivial that only\n a single implementation is defined; others don't make sense as tuning tasks. Using\n `extract_from_program`, you can produce a list of tunable tasks.\n\n Because task extraction involves running the compiler, we first configure the compiler's\n transformation passes; we'll apply the same configuration later on during autotuning.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "pass_context = tvm.transform.PassContext(opt_level=3, config={\"tir.disable_vectorize\": True})\nwith pass_context:\n    tasks = tvm.autotvm.task.extract_from_program(relay_mod[\"main\"], {}, TARGET)\nassert len(tasks) > 0"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Configuring microTVM\n#####################\n Before autotuning, we need to define a module loader and then pass that to\n a `tvm.autotvm.LocalBuilder`. Then we create a `tvm.autotvm.LocalRunner` and use\n both builder and runner to generates multiple measurements for auto tunner.\n\n In this tutorial, we have the option to use x86 host as an example or use different targets\n from Zephyr RTOS. If you choose pass `--platform=host` to this tutorial it will uses x86. You can\n cho [...]
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "repo_root = pathlib.Path(\n    subprocess.check_output([\"git\", \"rev-parse\", \"--show-toplevel\"], encoding=\"utf-8\").strip()\n)\n\nmodule_loader = tvm.micro.AutoTvmModuleLoader(\n    template_project_dir=repo_root / \"src\" / \"runtime\" / \"crt\" / \"host\",\n    project_options={},\n)\nbuilder = tvm.autotvm.LocalBuilder(\n    n_parallel=1,\n    build_kwargs={\"build_option\": {\"tir.disable_vectorize\": True}},\n    do_fork=True,\n    build_func=tvm.micro.autotvm_build_fu [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Timing the untuned program\n###########################\n For comparison, let's compile and run the graph without imposing any autotuning schedules. TVM\n will select a randomly-tuned implementation for each operator, which should not perform as well as\n the tuned operator.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "with pass_context:\n    lowered = tvm.relay.build(relay_mod, target=TARGET, params=params)\n\ntemp_dir = tvm.contrib.utils.tempdir()\n\nproject = tvm.micro.generate_project(\n    str(repo_root / \"src\" / \"runtime\" / \"crt\" / \"host\"), lowered, temp_dir / \"project\"\n)\n\n# Compiling for physical hardware\n# --------------------------------------------------------------------------\n#    project = tvm.micro.generate_project(\n#        str(repo_root / \"apps\" / \"microtvm\" [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Timing the tuned program\n#########################\n Once autotuning completes, you can time execution of the entire program using the Debug Runtime:\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "with tvm.autotvm.apply_history_best(\"microtvm_autotune.log.txt\"):\n    with pass_context:\n        lowered_tuned = tvm.relay.build(relay_mod, target=TARGET, params=params)\n\ntemp_dir = tvm.contrib.utils.tempdir()\n\nproject = tvm.micro.generate_project(\n    str(repo_root / \"src\" / \"runtime\" / \"crt\" / \"host\"), lowered_tuned, temp_dir / \"project\"\n)\n\n# Compiling for physical hardware\n# --------------------------------------------------------------------------\n#   [...]
-      ]
-    }
-  ],
-  "metadata": {
-    "kernelspec": {
-      "display_name": "Python 3",
-      "language": "python",
-      "name": "python3"
-    },
-    "language_info": {
-      "codemirror_mode": {
-        "name": "ipython",
-        "version": 3
-      },
-      "file_extension": ".py",
-      "mimetype": "text/x-python",
-      "name": "python",
-      "nbconvert_exporter": "python",
-      "pygments_lexer": "ipython3",
-      "version": "3.6.9"
-    }
-  },
-  "nbformat": 4,
-  "nbformat_minor": 0
-}
\ No newline at end of file
diff --git a/docs/_downloads/ea430ddc44893f3ac69585718b79c09c/reduction.ipynb b/docs/_downloads/10d831d158490a9ee3abd1901806fc11/reduction.ipynb
similarity index 100%
rename from docs/_downloads/ea430ddc44893f3ac69585718b79c09c/reduction.ipynb
rename to docs/_downloads/10d831d158490a9ee3abd1901806fc11/reduction.ipynb
diff --git a/docs/_downloads/13509e02380dbdb802e80921620e9b5c/use_pass_infra.ipynb b/docs/_downloads/13509e02380dbdb802e80921620e9b5c/use_pass_infra.ipynb
deleted file mode 100644
index 013615c..0000000
--- a/docs/_downloads/13509e02380dbdb802e80921620e9b5c/use_pass_infra.ipynb
+++ /dev/null
@@ -1,277 +0,0 @@
-{
-  "cells": [
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "%matplotlib inline"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "\n\nHow to Use TVM Pass Infra\n=========================\n**Author**: `Zhi Chen <https://github.com/zhiics>`_\n\nAs the number of optimization passes increases in Relay/tir, it becomes intractable to\nexecute them and maintain their dependencies manually. Therefore, we have\nintroduced an infrastructure to manage the optimization passes and make it\napplicable to different layers of the IR in the TVM stack.\n\nThe optimizations of a Relay/tir program could be applied at various  [...]
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "import numpy as np\nimport tvm\nfrom tvm import te\nimport tvm.relay as relay"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Create An Example Relay Program\n-------------------------------\nFirst of all, we create a simple Relay program for the tutorial. This program\nwill be used by various optimizations of the examples in this tutorial.\nSimilarly, users can write a tir primitive function and apply the tir passes.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "def example():\n    shape = (1, 64, 54, 54)\n    c_data = np.empty(shape).astype(\"float32\")\n    c = relay.const(c_data)\n    weight = relay.var(\"weight\", shape=(64, 64, 3, 3))\n    x = relay.var(\"x\", relay.TensorType((1, 64, 56, 56), \"float32\"))\n    conv = relay.nn.conv2d(x, weight)\n    y = relay.add(c, c)\n    y = relay.multiply(y, relay.const(2, \"float32\"))\n    y = relay.add(conv, y)\n    z = relay.add(y, c)\n    z1 = relay.add(y, c)\n    z2 = relay.add(z, z1)\n  [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Let us register layout alteration for a conv2d op so that we can apply the\nlayout alteration pass on the example. How alter layout pass works is out\nthe scope of this tutorial.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "@relay.op.register_alter_op_layout(\"nn.conv2d\", level=101)\ndef alter_conv2d(attrs, inputs, tinfos, out_type):\n    data, weight = inputs\n    new_attrs = dict(attrs)\n    new_attrs[\"data_layout\"] = \"NCHW16c\"\n    return relay.nn.conv2d(data, weight, **new_attrs)"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Optimize the Program\n--------------------\nNow we would like to optimize the program. Relay features a host of\noptimizations. We will select some of them to apply on this example program.\n\nThere are multiple ways to optimize a Relay program. Below we will provide\nexamples for each of them.\n\nManually Apply Optimization Passes\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "# Let's first create a relay Module which contains one or multiple Relay\n# functions for optimization.\nf = example()\nmod = tvm.IRModule.from_expr(f)\n\n# Now we can apply constant folding on the module.\n# fold_const here is a callback that doesn't take any parameters.\nfold_const = relay.transform.FoldConstant()\n# Then, we can invoke the pass on the given module. Note that the constant\n# folding pass works at the function-level. That being said, each function in\n# the mod [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "More optimizations can be applied in the similar manner. For instance, we can\neliminate the common expressions that used by `z` and `z1`.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "mod = relay.transform.EliminateCommonSubexpr()(mod)\nprint(mod)"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Some optimizations, such as fusion, are parameteric as well. For example,\nopt level 0 will not allow operators to be fused together. Users can pass the\n`fuse_opt_level` to enable this.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "mod = relay.transform.FuseOps(fuse_opt_level=0)(mod)\n\n# We can observe that the optimized module contains functions that only have\n# a signle primitive op.\nprint(mod)"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Use Sequential to Apply a Sequence of Passes\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nApplying passes as above is actually tedious and it may require users to have\nbetter understanding about the dependencies between them. For example, fusion\ncurrently doesn't work well on let bindings. Therefore, we would not be able\nto fuse operators that were fusable if :py:func:`relay.transform.ToANormalForm` is applied before\nfusion, as this pass generates let bindings for each exp [...]
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "# Now let's execute some passes through :py:class:`tvm.transform.Sequential`\nf = example()\nmod = tvm.IRModule.from_expr(f)\n# Glob the interested passes.\nseq = tvm.transform.Sequential(\n    [\n        relay.transform.FoldConstant(),\n        relay.transform.EliminateCommonSubexpr(),\n        relay.transform.FuseOps(fuse_opt_level=2),\n    ]\n)\nmod1 = seq(mod)\nprint(mod1)"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "From the transformed Relay program, we can see that there are still two\nidentical addition operations. This is because ``EliminateCommonSubexpr``\nwas not actually performed. The reason is because only the passes that have\noptimization level less or equal to 2 will be executed by default under\n:py:class:`tvm.transform.Sequential`. The pass infra,\nhowever, provides a configuration interface\nfor users to customize the optimization level that they want to execute.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "with tvm.transform.PassContext(opt_level=3):\n    mod2 = seq(mod)\nprint(mod2)"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Now we can see that only one of the two identical additions is kept.\n\nIn addition, users can selectively disable some passes using the\n`disabled_pass` config, which is similar to the `-fno-xxx` option used the\ngeneral purpose compilers, such as Clang and GCC. For example, we can disable\nEliminateCommonSubexpr as following. The printed module will again show two\nidentical addition operations.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "with tvm.transform.PassContext(opt_level=3, disabled_pass=[\"EliminateCommonSubexpr\"]):\n    mod3 = seq(mod)\nprint(mod3)"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "The passes applied so far are target independent. The pass infra also\nprovides a means to make pass target-aware. For example, the layout\nalteration pass falls in such category.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "with tvm.transform.PassContext(opt_level=3):\n    mod4 = seq(mod)\nprint(mod4)\n\nseq1 = tvm.transform.Sequential([relay.transform.AlterOpLayout()])\nwith tvm.transform.PassContext(opt_level=3):\n    with tvm.target.Target(\"llvm\"):\n        mod5 = seq1(mod)\nprint(mod5)"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Implement a Pass Using Python Decorator\n------------------------------------------\nThe next example illustrates how we can orchestrate a customized optimization\npipeline through the pass infra using Python decorators. This functionality\ngreatly eases the implementation of passes. For example, users can simply\ndefine a decorated class to do function-level optimizations as the following\nexample shows. `transform_function` wraps a class to replace all constants\nwith a multip [...]
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "@relay.transform.function_pass(opt_level=1)\nclass CustomPipeline:\n    \"\"\"Simple test function to replace one argument to another.\"\"\"\n\n    def __init__(self, multiplier):\n        self.multiplier = multiplier\n\n    # This function can define a pass.\n    def transform_function(self, func, mod, ctx):\n        obj = self\n\n        class ReplaceConstant(tvm.relay.ExprMutator):\n            def visit_constant(self, c):\n                return relay.multiply(obj.multiplier [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Debug a Pass\n------------\nTVM provides users a plug-and-play style debugging pass that print the IR\nafter a certain pass is done through a special pass (``PrintIR``) to dump the IR of the\nwhole module. A slightly modified version of the sequential pass example\ncould be like the following to enable IR dumping for ``FoldConstant`` optimization.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "f = example()\nmod = tvm.IRModule.from_expr(f)\nseq = tvm.transform.Sequential(\n    [\n        relay.transform.FoldConstant(),\n        tvm.transform.PrintIR(),\n        relay.transform.EliminateCommonSubexpr(),\n        relay.transform.FuseOps(),\n        relay.transform.AlterOpLayout(),\n    ]\n)"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "By inserting the ``PrintIR`` pass after ``FoldConstant``, the pass infra will\ndump out the module IR when ``FoldConstant`` is done. Users can plug in this\npass after any pass they want to debug for viewing the optimization effect.\n\nThere is a more flexible debugging mechanism. One can implement a ``PassInstrument``\nclass to execute arbitrary code not only before and/or after each pass but also\nat entering/exiting ``PassContext``. See `pass_instrument_cpp_backend`\nfor more [...]
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "@tvm.instrument.pass_instrument\nclass PrintIR:\n    \"\"\"Print the name of the pass, the IR, only before passes execute.\"\"\"\n\n    def run_before_pass(self, mod, info):\n        print(\"Running pass: {}\", info)\n        print(mod)\n\n\nwith tvm.transform.PassContext(opt_level=3, instruments=[PrintIR()]):\n    with tvm.target.Target(\"llvm\"):\n        # Perform the optimizations.\n        mod = seq(mod)\nprint(mod)\n\nprint(\"done\")"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Summary\n-------\nThis tutorial has covered how we can write and invoke passes in TVM more\nconveniently using the pass infra. Different ways of invoking a pass are also\ndisucssed. Using :py:class:`tvm.transform.Sequential` can largely help\nusers to ease the work of handling multiple optimization passes and their\ndependencies. In addition, an example is provided to illustrate\nhow we can debug a pass using the ``PrintIR`` and tracing.\n\n"
-      ]
-    }
-  ],
-  "metadata": {
-    "kernelspec": {
-      "display_name": "Python 3",
-      "language": "python",
-      "name": "python3"
-    },
-    "language_info": {
-      "codemirror_mode": {
-        "name": "ipython",
-        "version": 3
-      },
-      "file_extension": ".py",
-      "mimetype": "text/x-python",
-      "name": "python",
-      "nbconvert_exporter": "python",
-      "pygments_lexer": "ipython3",
-      "version": "3.6.9"
-    }
-  },
-  "nbformat": 4,
-  "nbformat_minor": 0
-}
\ No newline at end of file
diff --git a/docs/_downloads/cbbaae24e5c894dda1ebeded6fded2c3/convolution_opt.py b/docs/_downloads/13ef71e33eaef0855c6e883d9ec5d632/convolution_opt.py
similarity index 100%
rename from docs/_downloads/cbbaae24e5c894dda1ebeded6fded2c3/convolution_opt.py
rename to docs/_downloads/13ef71e33eaef0855c6e883d9ec5d632/convolution_opt.py
diff --git a/docs/_downloads/16269b77359771348d507395692524cf/from_paddle.py b/docs/_downloads/16269b77359771348d507395692524cf/from_paddle.py
new file mode 100644
index 0000000..9d67cbc
--- /dev/null
+++ b/docs/_downloads/16269b77359771348d507395692524cf/from_paddle.py
@@ -0,0 +1,117 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""
+Compile PaddlePaddle Models
+===========================
+**Author**: `Ziyuan Ma <https://github.com/ZiyuanMa/>`_
+
+This article is an introductory tutorial to deploy PaddlePaddle models with Relay.
+For us to begin with, PaddlePaddle>=2.1.3 is required to be installed.
+A quick solution is
+
+.. code-block:: bash
+
+    pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
+
+or please refer to official site.
+https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html
+"""
+import tarfile
+import paddle
+import numpy as np
+import tvm
+from tvm import relay
+from tvm.contrib.download import download_testdata
+
+######################################################################
+# Load pretrained ResNet50 model
+# ---------------------------------------------
+# We load a pretrained ResNet50 provided by PaddlePaddle.
+url = "https://bj.bcebos.com/x2paddle/models/paddle_resnet50.tar"
+model_path = download_testdata(url, "paddle_resnet50.tar", module="model")
+
+with tarfile.open(model_path) as tar:
+    names = tar.getnames()
+    for name in names:
+        tar.extract(name, "./")
+
+model = paddle.jit.load("./paddle_resnet50/model")
+
+######################################################################
+# Load a test image
+# ---------------------------------------------
+# A single cat dominates the examples!
+
+from PIL import Image
+import paddle.vision.transforms as T
+
+
+transforms = T.Compose(
+    [
+        T.Resize((256, 256)),
+        T.CenterCrop(224),
+        T.ToTensor(),
+        T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
+    ]
+)
+
+img_url = "https://github.com/dmlc/mxnet.js/blob/main/data/cat.png?raw=true"
+img_path = download_testdata(img_url, "cat.png", module="data")
+img = Image.open(img_path).resize((224, 224))
+
+img = transforms(img)
+img = np.expand_dims(img, axis=0)
+
+######################################################################
+# Compile the model with relay
+# ---------------------------------------------
+
+target = "llvm"
+shape_dict = {"inputs": img.shape}
+mod, params = relay.frontend.from_paddle(model, shape_dict)
+
+with tvm.transform.PassContext(opt_level=3):
+    executor = relay.build_module.create_executor(
+        "graph", mod, tvm.cpu(0), target, params
+    ).evaluate()
+
+######################################################################
+# Execute on TVM
+# ---------------------------------------------
+dtype = "float32"
+tvm_output = executor(tvm.nd.array(img.astype(dtype))).numpy()
+
+######################################################################
+# Look up synset name
+# ---------------------------------------------
+# Look up prediction top 1 index in 1000 class synset.
+
+synset_url = "".join(
+    [
+        "https://gist.githubusercontent.com/zhreshold/",
+        "4d0b62f3d01426887599d4f7ede23ee5/raw/",
+        "596b27d23537e5a1b5751d2b0481ef172f58b539/",
+        "imagenet1000_clsid_to_human.txt",
+    ]
+)
+synset_name = "imagenet1000_clsid_to_human.txt"
+synset_path = download_testdata(synset_url, synset_name, module="data")
+with open(synset_path) as f:
+    synset = f.readlines()
+
+top1 = np.argmax(tvm_output[0])
+print(f"TVM prediction top-1 id: {top1}, class name: {synset[top1]}")
diff --git a/docs/_downloads/b0c0a2fae1de180332b18254ddc2c5b9/tune_alu_vta.ipynb b/docs/_downloads/178b6f23dffc01ac92f2cf95f41a5679/tune_alu_vta.ipynb
similarity index 100%
rename from docs/_downloads/b0c0a2fae1de180332b18254ddc2c5b9/tune_alu_vta.ipynb
rename to docs/_downloads/178b6f23dffc01ac92f2cf95f41a5679/tune_alu_vta.ipynb
diff --git a/docs/_downloads/fb88afbf9be39a834109b9b842f12fd0/tune_network_arm.py b/docs/_downloads/17b139d609f9480c7eeda2da1f90f28c/tune_network_arm.py
similarity index 100%
rename from docs/_downloads/fb88afbf9be39a834109b9b842f12fd0/tune_network_arm.py
rename to docs/_downloads/17b139d609f9480c7eeda2da1f90f28c/tune_network_arm.py
diff --git a/docs/_downloads/18fb1ab3ed0a0c9f304520f2beaf4fd6/tvmc_command_line_driver.py b/docs/_downloads/18fb1ab3ed0a0c9f304520f2beaf4fd6/tvmc_command_line_driver.py
deleted file mode 100644
index c729b86..0000000
--- a/docs/_downloads/18fb1ab3ed0a0c9f304520f2beaf4fd6/tvmc_command_line_driver.py
+++ /dev/null
@@ -1,511 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-"""
-Compiling and Optimizing a Model with TVMC
-==========================================
-**Authors**:
-`Leandro Nunes <https://github.com/leandron>`_,
-`Matthew Barrett <https://github.com/mbaret>`_,
-`Chris Hoge <https://github.com/hogepodge>`_
-
-In this section, we will work with TVMC, the TVM command line driver. TVMC is a
-tool that exposes TVM features such as auto-tuning, compiling, profiling and
-execution of models through a command line interface.
-
-Upon completion of this section, we will have used TVMC to accomplish the
-following tasks:
-
-* Compile a pre-trained ResNet 50 v2 model for the TVM runtime.
-* Run a real image through the compiled model, and interpret the output and
-  model performance.
-* Tune the model on a CPU using TVM.
-* Re-compile an optimized model using the tuning data collected by TVM.
-* Run the image through the optimized model, and compare the output and model
-  performance.
-
-The goal of this section is to give you an overview of TVM and TVMC's
-capabilities, and set the stage for understanding how TVM works.
-"""
-
-################################################################################
-# Using TVMC
-# ----------
-#
-# TVMC is a Python application, part of the TVM Python package.
-# When you install TVM using a Python package, you will get TVMC as
-# as a command line application called ``tvmc``. The location of this command
-# will vary depending on your platform and installation method.
-#
-# Alternatively, if you have TVM as a Python module on your
-# ``$PYTHONPATH``,you can access the command line driver functionality
-# via the executable python module, ``python -m tvm.driver.tvmc``.
-#
-# For simplicity, this tutorial will mention TVMC command line using
-# ``tvmc <options>``, but the same results can be obtained with
-# ``python -m tvm.driver.tvmc <options>``.
-#
-# You can check the help page using:
-#
-# .. code-block:: bash
-#
-#   tvmc --help
-#
-# The main features of TVM available to ``tvmc`` are from subcommands
-# ``compile``, and ``run``, and ``tune``.  To read about specific options under
-# a given subcommand, use ``tvmc <subcommand> --help``. We will cover each of
-# these commands in this tutorial, but first we need to download a pre-trained
-# model to work with.
-#
-
-
-################################################################################
-# Obtaining the Model
-# -------------------
-#
-# For this tutorial, we will be working with ResNet-50 v2. ResNet-50 is a
-# convolutional neural network that is 50-layers deep and designed to classify
-# images. The model we will be using has been pre-trained on more than a
-# million images with 1000 different classifications. The network has an input
-# image size of 224x224. If you are interested exploring more of how the
-# ResNet-50 model is structured, we recommend downloading `Netron
-# <https://netron.app>`, a freely available ML model viewer.
-#
-# For this tutorial we will be using the model in ONNX format.
-#
-# .. code-block:: bash
-#
-#   wget https://github.com/onnx/models/raw/master/vision/classification/resnet/model/resnet50-v2-7.onnx
-#
-
-
-################################################################################
-# .. note:: Supported model formats
-#
-#   TVMC supports models created with Keras, ONNX, TensorFlow, TFLite
-#   and Torch. Use the option``--model-format`` if you need to
-#   explicitly provide the model format you are using. See ``tvmc
-#   compile --help`` for more information.
-#
-
-################################################################################
-# .. note:: Adding ONNX Support to TVM
-#
-#    TVM relies on the ONNX python library being available on your system. You
-#    can install ONNX using the command ``pip3 install --user onnx``. You may
-#    remove the ``--user`` option if you have root access and want to install
-#    ONNX globally.
-#
-
-################################################################################
-# Compiling an ONNX Model to the TVM Runtime
-# ------------------------------------------
-#
-# Once we've downloaded the ResNet-50 model, the next step is to compile it. To
-# accomplish that, we are going to use ``tvmc compile``. The output we get from
-# the compilation process is a TAR package of the model compiled to a dynamic
-# library for our target platform. We can run that model on our target device
-# using the TVM runtime.
-#
-# .. code-block:: bash
-#
-#   tvmc compile \
-#   --target "llvm" \
-#   --output resnet50-v2-7-tvm.tar \
-#   resnet50-v2-7.onnx
-#
-# Let's take a look at the files that ``tvmc compile`` creates in the module:
-#
-# .. code-block:: bash
-#
-# 	mkdir model
-# 	tar -xvf resnet50-v2-7-tvm.tar -C model
-# 	ls model
-#
-# You will see three files listed.
-#
-# * ``mod.so`` is the model, represented as a C++ library, that can be loaded
-#   by the TVM runtime.
-# * ``mod.json`` is a text representation of the TVM Relay computation graph.
-# * ``mod.params`` is a file containing the parameters for the pre-trained
-#   model.
-#
-# This module can be directly loaded by your application, and the model can be
-# run via the TVM runtime APIs.
-
-
-################################################################################
-# .. note:: Defining the Correct Target
-#
-#   Specifying the correct target (option ``--target``) can have a huge
-#   impact on the performance of the compiled module, as it can take
-#   advantage of hardware features available on the target. For more
-#   information, please refer to `Auto-tuning a convolutional network
-#   for x86 CPU <https://tvm.apache.org/docs/tutorials/autotvm/tune_relay_x86.html#define-network>`_.
-#   We recommend identifying which CPU you are running, along with optional features,
-#   and set the target appropriately.
-#
-
-################################################################################
-# Running the Model from The Compiled Module with TVMC
-# ----------------------------------------------------
-#
-# Now that we've compiled the model to this module, we can use the TVM runtime
-# to make predictions with it. TVMC has the TVM runtime built in to it,
-# allowing you to run compiled TVM models. To use TVMC to run the model and
-# make predictions, we need two things:
-#
-# - The compiled module, which we just produced.
-# - Valid input to the model to make predictions on.
-#
-# Each model is particular when it comes to expected tensor shapes, formats and
-# data types. For this reason, most models require some pre and
-# post-processing, to ensure the input is valid and to interpret the output.
-# TVMC has adopted NumPy's ``.npz`` format for both input and output data. This
-# is a well-supported NumPy format to serialize multiple arrays into a file
-#
-# As input for this tutorial, we will use the image of a cat, but you can feel
-# free to substitute image for any of your choosing.
-#
-# .. image:: https://s3.amazonaws.com/model-server/inputs/kitten.jpg
-#    :height: 224px
-#    :width: 224px
-#    :align: center
-
-
-################################################################################
-# Input pre-processing
-# ~~~~~~~~~~~~~~~~~~~~
-#
-# For our ResNet 50 V2 model, the input is expected to be in ImageNet format.
-# Here is an example of a script to pre-process an image for ResNet 50 V2.
-#
-# You will need to have a supported version of the Python Image Library
-# installed. You can use ``pip3 install --user pillow`` to satisfy this
-# requirement for the script.
-#
-# .. code-block:: python
-#    :caption: preprocess.py
-#    :name: preprocess.py
-#
-#     #!python ./preprocess.py
-#     from tvm.contrib.download import download_testdata
-#     from PIL import Image
-#     import numpy as np
-#
-#     img_url = "https://s3.amazonaws.com/model-server/inputs/kitten.jpg"
-#     img_path = download_testdata(img_url, "imagenet_cat.png", module="data")
-#
-#     # Resize it to 224x224
-#     resized_image = Image.open(img_path).resize((224, 224))
-#     img_data = np.asarray(resized_image).astype("float32")
-#
-#     # ONNX expects NCHW input, so convert the array
-#     img_data = np.transpose(img_data, (2, 0, 1))
-#
-#     # Normalize according to ImageNet
-#     imagenet_mean = np.array([0.485, 0.456, 0.406])
-#     imagenet_stddev = np.array([0.229, 0.224, 0.225])
-#     norm_img_data = np.zeros(img_data.shape).astype("float32")
-#     for i in range(img_data.shape[0]):
-#    	    norm_img_data[i, :, :] = (img_data[i, :, :] / 255 - imagenet_mean[i]) / imagenet_stddev[i]
-#
-#     # Add batch dimension
-#     img_data = np.expand_dims(norm_img_data, axis=0)
-#
-#     # Save to .npz (outputs imagenet_cat.npz)
-#     np.savez("imagenet_cat", data=img_data)
-#
-
-################################################################################
-# Running the Compiled Module
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~
-#
-# With both the model and input data in hand, we can now run TVMC to make a
-# prediction:
-#
-# .. code-block:: bash
-#
-#     tvmc run \
-#     --inputs imagenet_cat.npz \
-#     --output predictions.npz \
-#     resnet50-v2-7-tvm.tar
-#
-# Recall that the `.tar` model file includes a C++ library, a description of
-# the Relay model, and the parameters for the model. TVMC includes the TVM
-# runtime, which can load the model and make predictions against input. When
-# running the above command, TVMC outputs a new file, ``predictions.npz``, that
-# contains the model output tensors in NumPy format.
-#
-# In this example, we are running the model on the same machine that we used
-# for compilation. In some cases we might want to run it remotely via an RPC
-# Tracker. To read more about these options please check ``tvmc run --help``.
-
-################################################################################
-# Output Post-Processing
-# ~~~~~~~~~~~~~~~~~~~~~~
-#
-# As previously mentioned, each model will have its own particular way of
-# providing output tensors.
-#
-# In our case, we need to run some post-processing to render the outputs from
-# ResNet 50 V2 into a more human-readable form, using the lookup-table provided
-# for the model.
-#
-# The script below shows an example of the post-processing to extract labels
-# from the output of our compiled module.
-#
-# .. code-block:: python
-#     :caption: postprocess.py
-#     :name: postprocess.py
-#
-#     #!python ./postprocess.py
-#     import os.path
-#     import numpy as np
-#
-#     from scipy.special import softmax
-#
-#     from tvm.contrib.download import download_testdata
-#
-#     # Download a list of labels
-#     labels_url = "https://s3.amazonaws.com/onnx-model-zoo/synset.txt"
-#     labels_path = download_testdata(labels_url, "synset.txt", module="data")
-#
-#     with open(labels_path, "r") as f:
-#         labels = [l.rstrip() for l in f]
-#
-#     output_file = "predictions.npz"
-#
-#     # Open the output and read the output tensor
-#     if os.path.exists(output_file):
-#         with np.load(output_file) as data:
-#             scores = softmax(data["output_0"])
-#             scores = np.squeeze(scores)
-#             ranks = np.argsort(scores)[::-1]
-#
-#             for rank in ranks[0:5]:
-#                 print("class='%s' with probability=%f" % (labels[rank], scores[rank]))
-#
-# Running this script should produce the following output:
-#
-# .. code-block:: bash
-#
-#     python postprocess.py
-#
-#     # class='n02123045 tabby, tabby cat' with probability=0.610553
-#     # class='n02123159 tiger cat' with probability=0.367179
-#     # class='n02124075 Egyptian cat' with probability=0.019365
-#     # class='n02129604 tiger, Panthera tigris' with probability=0.001273
-#     # class='n04040759 radiator' with probability=0.000261
-#
-# Try replacing the cat image with other images, and see what sort of
-# predictions the ResNet model makes.
-
-################################################################################
-# Automatically Tuning the ResNet Model
-# -------------------------------------
-#
-# The previous model was compiled to work on the TVM runtime, but did not
-# include any platform specific optimization. In this section, we will show you
-# how to build an optimized model using TVMC to target your working platform.
-#
-# In some cases, we might not get the expected performance when running
-# inferences using our compiled module.  In cases like this, we can make use of
-# the auto-tuner, to find a better configuration for our model and get a boost
-# in performance. Tuning in TVM refers to the process by which a model is
-# optimized to run faster on a given target. This differs from training or
-# fine-tuning in that it does not affect the accuracy of the model, but only
-# the runtime performance. As part of the tuning process, TVM will try running
-# many different operator implementation variants to see which perform best.
-# The results of these runs are stored in a tuning records file, which is
-# ultimately the output of the ``tune`` subcommand.
-#
-# In the simplest form, tuning requires you to provide three things:
-#
-# - the target specification of the device you intend to run this model on
-# - the path to an output file in which the tuning records will be stored, and
-#   finally
-# - a path to the model to be tuned.
-#
-# The example below demonstrates how that works in practice:
-#
-# .. code-block:: bash
-#
-#     tvmc tune \
-#     --target "llvm" \
-#     --output resnet50-v2-7-autotuner_records.json \
-#     resnet50-v2-7.onnx
-#
-# In this example, you will see better results if you indicate a more specific
-# target for the `--target` flag.  For example, on an Intel i7 processor you
-# could use `--target llvm -mcpu=skylake`. For this tuning example, we are
-# tuning locally on the CPU using LLVM as the compiler for the specified
-# achitecture.
-#
-# TVMC will perform a search against the parameter space for the model, trying
-# out different configurations for operators and choosing the one that runs
-# fastest on your platform. Although this is a guided search based on the CPU
-# and model operations, it can still take several hours to complete the search.
-# The output of this search will be saved to the
-# `resnet50-v2-7-autotuner_records.json` file, which will later be used to
-# compile an optimized model.
-#
-# .. note:: Defining the Tuning Search Algorithm
-#
-#   By default this search is guided using an `XGBoost Grid` algorithm.
-#   Depending on your model complexity and amount of time avilable, you might
-#   want to choose a different algorithm. A full list is available by
-#   consulting ``tvmc tune --help``.
-#
-# The output will look something like this for a consumer-level Skylake CPU:
-#
-# .. code-block:: bash
-#
-#   tvmc tune   --target "llvm -mcpu=broadwell"   --output resnet50-v2-7-autotuner_records.json   resnet50-v2-7.onnx
-#   # [Task  1/24]  Current/Best:    9.65/  23.16 GFLOPS | Progress: (60/1000) | 130.74 s Done.
-#   # [Task  1/24]  Current/Best:    3.56/  23.16 GFLOPS | Progress: (192/1000) | 381.32 s Done.
-#   # [Task  2/24]  Current/Best:   13.13/  58.61 GFLOPS | Progress: (960/1000) | 1190.59 s Done.
-#   # [Task  3/24]  Current/Best:   31.93/  59.52 GFLOPS | Progress: (800/1000) | 727.85 s Done.
-#   # [Task  4/24]  Current/Best:   16.42/  57.80 GFLOPS | Progress: (960/1000) | 559.74 s Done.
-#   # [Task  5/24]  Current/Best:   12.42/  57.92 GFLOPS | Progress: (800/1000) | 766.63 s Done.
-#   # [Task  6/24]  Current/Best:   20.66/  59.25 GFLOPS | Progress: (1000/1000) | 673.61 s Done.
-#   # [Task  7/24]  Current/Best:   15.48/  59.60 GFLOPS | Progress: (1000/1000) | 953.04 s Done.
-#   # [Task  8/24]  Current/Best:   31.97/  59.33 GFLOPS | Progress: (972/1000) | 559.57 s Done.
-#   # [Task  9/24]  Current/Best:   34.14/  60.09 GFLOPS | Progress: (1000/1000) | 479.32 s Done.
-#   # [Task 10/24]  Current/Best:   12.53/  58.97 GFLOPS | Progress: (972/1000) | 642.34 s Done.
-#   # [Task 11/24]  Current/Best:   30.94/  58.47 GFLOPS | Progress: (1000/1000) | 648.26 s Done.
-#   # [Task 12/24]  Current/Best:   23.66/  58.63 GFLOPS | Progress: (1000/1000) | 851.59 s Done.
-#   # [Task 13/24]  Current/Best:   25.44/  59.76 GFLOPS | Progress: (1000/1000) | 534.58 s Done.
-#   # [Task 14/24]  Current/Best:   26.83/  58.51 GFLOPS | Progress: (1000/1000) | 491.67 s Done.
-#   # [Task 15/24]  Current/Best:   33.64/  58.55 GFLOPS | Progress: (1000/1000) | 529.85 s Done.
-#   # [Task 16/24]  Current/Best:   14.93/  57.94 GFLOPS | Progress: (1000/1000) | 645.55 s Done.
-#   # [Task 17/24]  Current/Best:   28.70/  58.19 GFLOPS | Progress: (1000/1000) | 756.88 s Done.
-#   # [Task 18/24]  Current/Best:   19.01/  60.43 GFLOPS | Progress: (980/1000) | 514.69 s Done.
-#   # [Task 19/24]  Current/Best:   14.61/  57.30 GFLOPS | Progress: (1000/1000) | 614.44 s Done.
-#   # [Task 20/24]  Current/Best:   10.47/  57.68 GFLOPS | Progress: (980/1000) | 479.80 s Done.
-#   # [Task 21/24]  Current/Best:   34.37/  58.28 GFLOPS | Progress: (308/1000) | 225.37 s Done.
-#   # [Task 22/24]  Current/Best:   15.75/  57.71 GFLOPS | Progress: (1000/1000) | 1024.05 s Done.
-#   # [Task 23/24]  Current/Best:   23.23/  58.92 GFLOPS | Progress: (1000/1000) | 999.34 s Done.
-#   # [Task 24/24]  Current/Best:   17.27/  55.25 GFLOPS | Progress: (1000/1000) | 1428.74 s Done.
-#
-# Tuning sessions can take a long time, so ``tvmc tune`` offers many options to customize your tuning
-# process, in terms of number of repetitions (``--repeat`` and ``--number``, for example), the tuning
-# algorithm to be used, and so on. Check ``tvmc tune --help`` for more information.
-#
-
-################################################################################
-# Compiling an Optimized Model with Tuning Data
-# ----------------------------------------------
-#
-# As an output of the tuning process above, we obtained the tuning records
-# stored in ``resnet50-v2-7-autotuner_records.json``. This file can be used in
-# two ways:
-#
-# - As input to further tuning (via ``tvmc tune --tuning-records``).
-# - As input to the compiler
-#
-# The compiler will use the results to generate high performance code for the
-# model on your specified target. To do that we can use ``tvmc compile
-# --tuning-records``. Check ``tvmc compile --help`` for more information.
-#
-# Now that tuning data for the model has been collected, we can re-compile the
-# model using optimized operators to speed up our computations.
-#
-# .. code-block:: bash
-#
-#   tvmc compile \
-#   --target "llvm" \
-#   --tuning-records resnet50-v2-7-autotuner_records.json  \
-#   --output resnet50-v2-7-tvm_autotuned.tar \
-#   resnet50-v2-7.onnx
-#
-# Verify that the optimized model runs and produces the same results:
-#
-# .. code-block:: bash
-#
-#   tvmc run \
-#   --inputs imagenet_cat.npz \
-#   --output predictions.npz \
-#   resnet50-v2-7-tvm_autotuned.tar
-#
-#   python postprocess.py
-#
-# Verifying that the predictions are the same:
-#
-# .. code-block:: bash
-#
-#   # class='n02123045 tabby, tabby cat' with probability=0.610550
-#   # class='n02123159 tiger cat' with probability=0.367181
-#   # class='n02124075 Egyptian cat' with probability=0.019365
-#   # class='n02129604 tiger, Panthera tigris' with probability=0.001273
-#   # class='n04040759 radiator' with probability=0.000261
-
-################################################################################
-# Comparing the Tuned and Untuned Models
-# --------------------------------------
-#
-# TVMC gives you tools for basic performance benchmarking between the models.
-# You can specify a number of repetitions and that TVMC report on the model run
-# time (independent of runtime startup). We can get a rough idea of how much
-# tuning has improved the model performance. For example, on a test Intel i7
-# system, we see that the tuned model runs 47% faster than the untuned model:
-#
-# .. code-block:: bash
-#
-#   tvmc run \
-#   --inputs imagenet_cat.npz \
-#   --output predictions.npz  \
-#   --print-time \
-#   --repeat 100 \
-#   resnet50-v2-7-tvm_autotuned.tar
-#
-#   # Execution time summary:
-#   # mean (ms)   max (ms)    min (ms)    std (ms)
-#   #     92.19     115.73       89.85        3.15
-#
-#   tvmc run \
-#   --inputs imagenet_cat.npz \
-#   --output predictions.npz  \
-#   --print-time \
-#   --repeat 100 \
-#   resnet50-v2-7-tvm.tar
-#
-#   # Execution time summary:
-#   # mean (ms)   max (ms)    min (ms)    std (ms)
-#   #    193.32     219.97      185.04        7.11
-#
-
-
-################################################################################
-# Final Remarks
-# -------------
-#
-# In this tutorial, we presented TVMC, a command line driver for TVM. We
-# demonstrated how to compile, run, and tune a model. We also discussed the
-# need for pre and post-processing of inputs and outputs. After the tuning
-# process, we demonstrated how to compare the performance of the unoptimized
-# and optimize models.
-#
-# Here we presented a simple example using ResNet 50 V2 locally. However, TVMC
-# supports many more features including cross-compilation, remote execution and
-# profiling/benchmarking.
-#
-# To see what other options are available, please have a look at ``tvmc
-# --help``.
-#
-# In the next tutorial, `Compiling and Optimizing a Model with the Python
-# Interface <auto_tuning_with_pyton>`_, we will cover the same compilation
-# and optimization steps using the Python interface.
diff --git a/docs/_downloads/1604460dde2b82fb9db809bb388890f8/deploy_prequantized_tflite.ipynb b/docs/_downloads/1a26d790f7b98309d730181290dae3ee/deploy_prequantized_tflite.ipynb
similarity index 100%
rename from docs/_downloads/1604460dde2b82fb9db809bb388890f8/deploy_prequantized_tflite.ipynb
rename to docs/_downloads/1a26d790f7b98309d730181290dae3ee/deploy_prequantized_tflite.ipynb
diff --git a/docs/_downloads/5df1a8bfe653027789c10728e74a65c0/intrin_math.ipynb b/docs/_downloads/1e482ba1190961191e3a0bdbd0585faa/intrin_math.ipynb
similarity index 100%
rename from docs/_downloads/5df1a8bfe653027789c10728e74a65c0/intrin_math.ipynb
rename to docs/_downloads/1e482ba1190961191e3a0bdbd0585faa/intrin_math.ipynb
diff --git a/docs/_downloads/d37aecc420f8b90ce29faee4df5d0bcd/matrix_multiply.ipynb b/docs/_downloads/1ee0b869c5082223c5dfbb0fe4574252/matrix_multiply.ipynb
similarity index 100%
rename from docs/_downloads/d37aecc420f8b90ce29faee4df5d0bcd/matrix_multiply.ipynb
rename to docs/_downloads/1ee0b869c5082223c5dfbb0fe4574252/matrix_multiply.ipynb
diff --git a/docs/_downloads/6c8a9d3bc4c689f8680a968349965ee5/from_pytorch.ipynb b/docs/_downloads/1f4943aed1aa607b2775c18b1d71db10/from_pytorch.ipynb
similarity index 100%
rename from docs/_downloads/6c8a9d3bc4c689f8680a968349965ee5/from_pytorch.ipynb
rename to docs/_downloads/1f4943aed1aa607b2775c18b1d71db10/from_pytorch.ipynb
diff --git a/docs/_downloads/3961fdfa7abff1b6dc996faa43b4c40f/deploy_model_on_android.py b/docs/_downloads/21a9dd883b196be58ca1c5cd02700274/deploy_model_on_android.py
similarity index 100%
rename from docs/_downloads/3961fdfa7abff1b6dc996faa43b4c40f/deploy_model_on_android.py
rename to docs/_downloads/21a9dd883b196be58ca1c5cd02700274/deploy_model_on_android.py
diff --git a/docs/_downloads/233ceda3a682ae5df93b4ce0bcfbf870/tvmc_command_line_driver.py b/docs/_downloads/233ceda3a682ae5df93b4ce0bcfbf870/tvmc_command_line_driver.py
new file mode 100644
index 0000000..ea32540
--- /dev/null
+++ b/docs/_downloads/233ceda3a682ae5df93b4ce0bcfbf870/tvmc_command_line_driver.py
@@ -0,0 +1,512 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""
+Compiling and Optimizing a Model with TVMC
+==========================================
+**Authors**:
+`Leandro Nunes <https://github.com/leandron>`_,
+`Matthew Barrett <https://github.com/mbaret>`_,
+`Chris Hoge <https://github.com/hogepodge>`_
+
+In this section, we will work with TVMC, the TVM command line driver. TVMC is a
+tool that exposes TVM features such as auto-tuning, compiling, profiling and
+execution of models through a command line interface.
+
+Upon completion of this section, we will have used TVMC to accomplish the
+following tasks:
+
+* Compile a pre-trained ResNet 50 v2 model for the TVM runtime.
+* Run a real image through the compiled model, and interpret the output and
+  model performance.
+* Tune the model on a CPU using TVM.
+* Re-compile an optimized model using the tuning data collected by TVM.
+* Run the image through the optimized model, and compare the output and model
+  performance.
+
+The goal of this section is to give you an overview of TVM and TVMC's
+capabilities, and set the stage for understanding how TVM works.
+"""
+
+################################################################################
+# Using TVMC
+# ----------
+#
+# TVMC is a Python application, part of the TVM Python package.
+# When you install TVM using a Python package, you will get TVMC as
+# as a command line application called ``tvmc``. The location of this command
+# will vary depending on your platform and installation method.
+#
+# Alternatively, if you have TVM as a Python module on your
+# ``$PYTHONPATH``,you can access the command line driver functionality
+# via the executable python module, ``python -m tvm.driver.tvmc``.
+#
+# For simplicity, this tutorial will mention TVMC command line using
+# ``tvmc <options>``, but the same results can be obtained with
+# ``python -m tvm.driver.tvmc <options>``.
+#
+# You can check the help page using:
+#
+# .. code-block:: bash
+#
+#   tvmc --help
+#
+# The main features of TVM available to ``tvmc`` are from subcommands
+# ``compile``, and ``run``, and ``tune``.  To read about specific options under
+# a given subcommand, use ``tvmc <subcommand> --help``. We will cover each of
+# these commands in this tutorial, but first we need to download a pre-trained
+# model to work with.
+#
+
+
+################################################################################
+# Obtaining the Model
+# -------------------
+#
+# For this tutorial, we will be working with ResNet-50 v2. ResNet-50 is a
+# convolutional neural network that is 50-layers deep and designed to classify
+# images. The model we will be using has been pre-trained on more than a
+# million images with 1000 different classifications. The network has an input
+# image size of 224x224. If you are interested exploring more of how the
+# ResNet-50 model is structured, we recommend downloading `Netron
+# <https://netron.app>`, a freely available ML model viewer.
+#
+# For this tutorial we will be using the model in ONNX format.
+#
+# .. code-block:: bash
+#
+#   wget https://github.com/onnx/models/raw/master/vision/classification/resnet/model/resnet50-v2-7.onnx
+#
+
+
+################################################################################
+# .. note:: Supported model formats
+#
+#   TVMC supports models created with Keras, ONNX, TensorFlow, TFLite
+#   and Torch. Use the option``--model-format`` if you need to
+#   explicitly provide the model format you are using. See ``tvmc
+#   compile --help`` for more information.
+#
+
+################################################################################
+# .. note:: Adding ONNX Support to TVM
+#
+#    TVM relies on the ONNX python library being available on your system. You can
+#    install ONNX using the command ``pip3 install --user onnx onnxoptimizer``. You
+#    may remove the ``--user`` option if you have root access and want to install
+#    ONNX globally.  The ``onnxoptimizer`` dependency is optional, and is only used
+#    for ``onnx>=1.9``.
+#
+
+################################################################################
+# Compiling an ONNX Model to the TVM Runtime
+# ------------------------------------------
+#
+# Once we've downloaded the ResNet-50 model, the next step is to compile it. To
+# accomplish that, we are going to use ``tvmc compile``. The output we get from
+# the compilation process is a TAR package of the model compiled to a dynamic
+# library for our target platform. We can run that model on our target device
+# using the TVM runtime.
+#
+# .. code-block:: bash
+#
+#   tvmc compile \
+#   --target "llvm" \
+#   --output resnet50-v2-7-tvm.tar \
+#   resnet50-v2-7.onnx
+#
+# Let's take a look at the files that ``tvmc compile`` creates in the module:
+#
+# .. code-block:: bash
+#
+# 	mkdir model
+# 	tar -xvf resnet50-v2-7-tvm.tar -C model
+# 	ls model
+#
+# You will see three files listed.
+#
+# * ``mod.so`` is the model, represented as a C++ library, that can be loaded
+#   by the TVM runtime.
+# * ``mod.json`` is a text representation of the TVM Relay computation graph.
+# * ``mod.params`` is a file containing the parameters for the pre-trained
+#   model.
+#
+# This module can be directly loaded by your application, and the model can be
+# run via the TVM runtime APIs.
+
+
+################################################################################
+# .. note:: Defining the Correct Target
+#
+#   Specifying the correct target (option ``--target``) can have a huge
+#   impact on the performance of the compiled module, as it can take
+#   advantage of hardware features available on the target. For more
+#   information, please refer to `Auto-tuning a convolutional network
+#   for x86 CPU <https://tvm.apache.org/docs/tutorials/autotvm/tune_relay_x86.html#define-network>`_.
+#   We recommend identifying which CPU you are running, along with optional features,
+#   and set the target appropriately.
+#
+
+################################################################################
+# Running the Model from The Compiled Module with TVMC
+# ----------------------------------------------------
+#
+# Now that we've compiled the model to this module, we can use the TVM runtime
+# to make predictions with it. TVMC has the TVM runtime built in to it,
+# allowing you to run compiled TVM models. To use TVMC to run the model and
+# make predictions, we need two things:
+#
+# - The compiled module, which we just produced.
+# - Valid input to the model to make predictions on.
+#
+# Each model is particular when it comes to expected tensor shapes, formats and
+# data types. For this reason, most models require some pre and
+# post-processing, to ensure the input is valid and to interpret the output.
+# TVMC has adopted NumPy's ``.npz`` format for both input and output data. This
+# is a well-supported NumPy format to serialize multiple arrays into a file
+#
+# As input for this tutorial, we will use the image of a cat, but you can feel
+# free to substitute image for any of your choosing.
+#
+# .. image:: https://s3.amazonaws.com/model-server/inputs/kitten.jpg
+#    :height: 224px
+#    :width: 224px
+#    :align: center
+
+
+################################################################################
+# Input pre-processing
+# ~~~~~~~~~~~~~~~~~~~~
+#
+# For our ResNet 50 V2 model, the input is expected to be in ImageNet format.
+# Here is an example of a script to pre-process an image for ResNet 50 V2.
+#
+# You will need to have a supported version of the Python Image Library
+# installed. You can use ``pip3 install --user pillow`` to satisfy this
+# requirement for the script.
+#
+# .. code-block:: python
+#    :caption: preprocess.py
+#    :name: preprocess.py
+#
+#     #!python ./preprocess.py
+#     from tvm.contrib.download import download_testdata
+#     from PIL import Image
+#     import numpy as np
+#
+#     img_url = "https://s3.amazonaws.com/model-server/inputs/kitten.jpg"
+#     img_path = download_testdata(img_url, "imagenet_cat.png", module="data")
+#
+#     # Resize it to 224x224
+#     resized_image = Image.open(img_path).resize((224, 224))
+#     img_data = np.asarray(resized_image).astype("float32")
+#
+#     # ONNX expects NCHW input, so convert the array
+#     img_data = np.transpose(img_data, (2, 0, 1))
+#
+#     # Normalize according to ImageNet
+#     imagenet_mean = np.array([0.485, 0.456, 0.406])
+#     imagenet_stddev = np.array([0.229, 0.224, 0.225])
+#     norm_img_data = np.zeros(img_data.shape).astype("float32")
+#     for i in range(img_data.shape[0]):
+#    	    norm_img_data[i, :, :] = (img_data[i, :, :] / 255 - imagenet_mean[i]) / imagenet_stddev[i]
+#
+#     # Add batch dimension
+#     img_data = np.expand_dims(norm_img_data, axis=0)
+#
+#     # Save to .npz (outputs imagenet_cat.npz)
+#     np.savez("imagenet_cat", data=img_data)
+#
+
+################################################################################
+# Running the Compiled Module
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# With both the model and input data in hand, we can now run TVMC to make a
+# prediction:
+#
+# .. code-block:: bash
+#
+#     tvmc run \
+#     --inputs imagenet_cat.npz \
+#     --output predictions.npz \
+#     resnet50-v2-7-tvm.tar
+#
+# Recall that the `.tar` model file includes a C++ library, a description of
+# the Relay model, and the parameters for the model. TVMC includes the TVM
+# runtime, which can load the model and make predictions against input. When
+# running the above command, TVMC outputs a new file, ``predictions.npz``, that
+# contains the model output tensors in NumPy format.
+#
+# In this example, we are running the model on the same machine that we used
+# for compilation. In some cases we might want to run it remotely via an RPC
+# Tracker. To read more about these options please check ``tvmc run --help``.
+
+################################################################################
+# Output Post-Processing
+# ~~~~~~~~~~~~~~~~~~~~~~
+#
+# As previously mentioned, each model will have its own particular way of
+# providing output tensors.
+#
+# In our case, we need to run some post-processing to render the outputs from
+# ResNet 50 V2 into a more human-readable form, using the lookup-table provided
+# for the model.
+#
+# The script below shows an example of the post-processing to extract labels
+# from the output of our compiled module.
+#
+# .. code-block:: python
+#     :caption: postprocess.py
+#     :name: postprocess.py
+#
+#     #!python ./postprocess.py
+#     import os.path
+#     import numpy as np
+#
+#     from scipy.special import softmax
+#
+#     from tvm.contrib.download import download_testdata
+#
+#     # Download a list of labels
+#     labels_url = "https://s3.amazonaws.com/onnx-model-zoo/synset.txt"
+#     labels_path = download_testdata(labels_url, "synset.txt", module="data")
+#
+#     with open(labels_path, "r") as f:
+#         labels = [l.rstrip() for l in f]
+#
+#     output_file = "predictions.npz"
+#
+#     # Open the output and read the output tensor
+#     if os.path.exists(output_file):
+#         with np.load(output_file) as data:
+#             scores = softmax(data["output_0"])
+#             scores = np.squeeze(scores)
+#             ranks = np.argsort(scores)[::-1]
+#
+#             for rank in ranks[0:5]:
+#                 print("class='%s' with probability=%f" % (labels[rank], scores[rank]))
+#
+# Running this script should produce the following output:
+#
+# .. code-block:: bash
+#
+#     python postprocess.py
+#
+#     # class='n02123045 tabby, tabby cat' with probability=0.610553
+#     # class='n02123159 tiger cat' with probability=0.367179
+#     # class='n02124075 Egyptian cat' with probability=0.019365
+#     # class='n02129604 tiger, Panthera tigris' with probability=0.001273
+#     # class='n04040759 radiator' with probability=0.000261
+#
+# Try replacing the cat image with other images, and see what sort of
+# predictions the ResNet model makes.
+
+################################################################################
+# Automatically Tuning the ResNet Model
+# -------------------------------------
+#
+# The previous model was compiled to work on the TVM runtime, but did not
+# include any platform specific optimization. In this section, we will show you
+# how to build an optimized model using TVMC to target your working platform.
+#
+# In some cases, we might not get the expected performance when running
+# inferences using our compiled module.  In cases like this, we can make use of
+# the auto-tuner, to find a better configuration for our model and get a boost
+# in performance. Tuning in TVM refers to the process by which a model is
+# optimized to run faster on a given target. This differs from training or
+# fine-tuning in that it does not affect the accuracy of the model, but only
+# the runtime performance. As part of the tuning process, TVM will try running
+# many different operator implementation variants to see which perform best.
+# The results of these runs are stored in a tuning records file, which is
+# ultimately the output of the ``tune`` subcommand.
+#
+# In the simplest form, tuning requires you to provide three things:
+#
+# - the target specification of the device you intend to run this model on
+# - the path to an output file in which the tuning records will be stored, and
+#   finally
+# - a path to the model to be tuned.
+#
+# The example below demonstrates how that works in practice:
+#
+# .. code-block:: bash
+#
+#     tvmc tune \
+#     --target "llvm" \
+#     --output resnet50-v2-7-autotuner_records.json \
+#     resnet50-v2-7.onnx
+#
+# In this example, you will see better results if you indicate a more specific
+# target for the `--target` flag.  For example, on an Intel i7 processor you
+# could use `--target llvm -mcpu=skylake`. For this tuning example, we are
+# tuning locally on the CPU using LLVM as the compiler for the specified
+# achitecture.
+#
+# TVMC will perform a search against the parameter space for the model, trying
+# out different configurations for operators and choosing the one that runs
+# fastest on your platform. Although this is a guided search based on the CPU
+# and model operations, it can still take several hours to complete the search.
+# The output of this search will be saved to the
+# `resnet50-v2-7-autotuner_records.json` file, which will later be used to
+# compile an optimized model.
+#
+# .. note:: Defining the Tuning Search Algorithm
+#
+#   By default this search is guided using an `XGBoost Grid` algorithm.
+#   Depending on your model complexity and amount of time avilable, you might
+#   want to choose a different algorithm. A full list is available by
+#   consulting ``tvmc tune --help``.
+#
+# The output will look something like this for a consumer-level Skylake CPU:
+#
+# .. code-block:: bash
+#
+#   tvmc tune   --target "llvm -mcpu=broadwell"   --output resnet50-v2-7-autotuner_records.json   resnet50-v2-7.onnx
+#   # [Task  1/24]  Current/Best:    9.65/  23.16 GFLOPS | Progress: (60/1000) | 130.74 s Done.
+#   # [Task  1/24]  Current/Best:    3.56/  23.16 GFLOPS | Progress: (192/1000) | 381.32 s Done.
+#   # [Task  2/24]  Current/Best:   13.13/  58.61 GFLOPS | Progress: (960/1000) | 1190.59 s Done.
+#   # [Task  3/24]  Current/Best:   31.93/  59.52 GFLOPS | Progress: (800/1000) | 727.85 s Done.
+#   # [Task  4/24]  Current/Best:   16.42/  57.80 GFLOPS | Progress: (960/1000) | 559.74 s Done.
+#   # [Task  5/24]  Current/Best:   12.42/  57.92 GFLOPS | Progress: (800/1000) | 766.63 s Done.
+#   # [Task  6/24]  Current/Best:   20.66/  59.25 GFLOPS | Progress: (1000/1000) | 673.61 s Done.
+#   # [Task  7/24]  Current/Best:   15.48/  59.60 GFLOPS | Progress: (1000/1000) | 953.04 s Done.
+#   # [Task  8/24]  Current/Best:   31.97/  59.33 GFLOPS | Progress: (972/1000) | 559.57 s Done.
+#   # [Task  9/24]  Current/Best:   34.14/  60.09 GFLOPS | Progress: (1000/1000) | 479.32 s Done.
+#   # [Task 10/24]  Current/Best:   12.53/  58.97 GFLOPS | Progress: (972/1000) | 642.34 s Done.
+#   # [Task 11/24]  Current/Best:   30.94/  58.47 GFLOPS | Progress: (1000/1000) | 648.26 s Done.
+#   # [Task 12/24]  Current/Best:   23.66/  58.63 GFLOPS | Progress: (1000/1000) | 851.59 s Done.
+#   # [Task 13/24]  Current/Best:   25.44/  59.76 GFLOPS | Progress: (1000/1000) | 534.58 s Done.
+#   # [Task 14/24]  Current/Best:   26.83/  58.51 GFLOPS | Progress: (1000/1000) | 491.67 s Done.
+#   # [Task 15/24]  Current/Best:   33.64/  58.55 GFLOPS | Progress: (1000/1000) | 529.85 s Done.
+#   # [Task 16/24]  Current/Best:   14.93/  57.94 GFLOPS | Progress: (1000/1000) | 645.55 s Done.
+#   # [Task 17/24]  Current/Best:   28.70/  58.19 GFLOPS | Progress: (1000/1000) | 756.88 s Done.
+#   # [Task 18/24]  Current/Best:   19.01/  60.43 GFLOPS | Progress: (980/1000) | 514.69 s Done.
+#   # [Task 19/24]  Current/Best:   14.61/  57.30 GFLOPS | Progress: (1000/1000) | 614.44 s Done.
+#   # [Task 20/24]  Current/Best:   10.47/  57.68 GFLOPS | Progress: (980/1000) | 479.80 s Done.
+#   # [Task 21/24]  Current/Best:   34.37/  58.28 GFLOPS | Progress: (308/1000) | 225.37 s Done.
+#   # [Task 22/24]  Current/Best:   15.75/  57.71 GFLOPS | Progress: (1000/1000) | 1024.05 s Done.
+#   # [Task 23/24]  Current/Best:   23.23/  58.92 GFLOPS | Progress: (1000/1000) | 999.34 s Done.
+#   # [Task 24/24]  Current/Best:   17.27/  55.25 GFLOPS | Progress: (1000/1000) | 1428.74 s Done.
+#
+# Tuning sessions can take a long time, so ``tvmc tune`` offers many options to customize your tuning
+# process, in terms of number of repetitions (``--repeat`` and ``--number``, for example), the tuning
+# algorithm to be used, and so on. Check ``tvmc tune --help`` for more information.
+#
+
+################################################################################
+# Compiling an Optimized Model with Tuning Data
+# ----------------------------------------------
+#
+# As an output of the tuning process above, we obtained the tuning records
+# stored in ``resnet50-v2-7-autotuner_records.json``. This file can be used in
+# two ways:
+#
+# - As input to further tuning (via ``tvmc tune --tuning-records``).
+# - As input to the compiler
+#
+# The compiler will use the results to generate high performance code for the
+# model on your specified target. To do that we can use ``tvmc compile
+# --tuning-records``. Check ``tvmc compile --help`` for more information.
+#
+# Now that tuning data for the model has been collected, we can re-compile the
+# model using optimized operators to speed up our computations.
+#
+# .. code-block:: bash
+#
+#   tvmc compile \
+#   --target "llvm" \
+#   --tuning-records resnet50-v2-7-autotuner_records.json  \
+#   --output resnet50-v2-7-tvm_autotuned.tar \
+#   resnet50-v2-7.onnx
+#
+# Verify that the optimized model runs and produces the same results:
+#
+# .. code-block:: bash
+#
+#   tvmc run \
+#   --inputs imagenet_cat.npz \
+#   --output predictions.npz \
+#   resnet50-v2-7-tvm_autotuned.tar
+#
+#   python postprocess.py
+#
+# Verifying that the predictions are the same:
+#
+# .. code-block:: bash
+#
+#   # class='n02123045 tabby, tabby cat' with probability=0.610550
+#   # class='n02123159 tiger cat' with probability=0.367181
+#   # class='n02124075 Egyptian cat' with probability=0.019365
+#   # class='n02129604 tiger, Panthera tigris' with probability=0.001273
+#   # class='n04040759 radiator' with probability=0.000261
+
+################################################################################
+# Comparing the Tuned and Untuned Models
+# --------------------------------------
+#
+# TVMC gives you tools for basic performance benchmarking between the models.
+# You can specify a number of repetitions and that TVMC report on the model run
+# time (independent of runtime startup). We can get a rough idea of how much
+# tuning has improved the model performance. For example, on a test Intel i7
+# system, we see that the tuned model runs 47% faster than the untuned model:
+#
+# .. code-block:: bash
+#
+#   tvmc run \
+#   --inputs imagenet_cat.npz \
+#   --output predictions.npz  \
+#   --print-time \
+#   --repeat 100 \
+#   resnet50-v2-7-tvm_autotuned.tar
+#
+#   # Execution time summary:
+#   # mean (ms)   max (ms)    min (ms)    std (ms)
+#   #     92.19     115.73       89.85        3.15
+#
+#   tvmc run \
+#   --inputs imagenet_cat.npz \
+#   --output predictions.npz  \
+#   --print-time \
+#   --repeat 100 \
+#   resnet50-v2-7-tvm.tar
+#
+#   # Execution time summary:
+#   # mean (ms)   max (ms)    min (ms)    std (ms)
+#   #    193.32     219.97      185.04        7.11
+#
+
+
+################################################################################
+# Final Remarks
+# -------------
+#
+# In this tutorial, we presented TVMC, a command line driver for TVM. We
+# demonstrated how to compile, run, and tune a model. We also discussed the
+# need for pre and post-processing of inputs and outputs. After the tuning
+# process, we demonstrated how to compare the performance of the unoptimized
+# and optimize models.
+#
+# Here we presented a simple example using ResNet 50 V2 locally. However, TVMC
+# supports many more features including cross-compilation, remote execution and
+# profiling/benchmarking.
+#
+# To see what other options are available, please have a look at ``tvmc
+# --help``.
+#
+# In the next tutorial, `Compiling and Optimizing a Model with the Python
+# Interface <auto_tuning_with_pyton>`_, we will cover the same compilation
+# and optimization steps using the Python interface.
diff --git a/docs/_downloads/0c30ce88b67b0e8d46494348ab36c9fb/from_tflite.ipynb b/docs/_downloads/23968bb778cd9591b7ad858bf17dcc3e/from_tflite.ipynb
similarity index 100%
rename from docs/_downloads/0c30ce88b67b0e8d46494348ab36c9fb/from_tflite.ipynb
rename to docs/_downloads/23968bb778cd9591b7ad858bf17dcc3e/from_tflite.ipynb
diff --git a/docs/_downloads/f5648c7917eb5013237a54625ed7a6c2/auto_scheduler_matmul_x86.ipynb b/docs/_downloads/246d4b8509474fd9046e69f6cc9b7f87/auto_scheduler_matmul_x86.ipynb
similarity index 100%
rename from docs/_downloads/f5648c7917eb5013237a54625ed7a6c2/auto_scheduler_matmul_x86.ipynb
rename to docs/_downloads/246d4b8509474fd9046e69f6cc9b7f87/auto_scheduler_matmul_x86.ipynb
diff --git a/docs/_downloads/7ece74acc230c7d55086182cc8884b09/extern_op.py b/docs/_downloads/286e7f77f494a25312ac88e3f234822e/extern_op.py
similarity index 100%
rename from docs/_downloads/7ece74acc230c7d55086182cc8884b09/extern_op.py
rename to docs/_downloads/286e7f77f494a25312ac88e3f234822e/extern_op.py
diff --git a/docs/_downloads/ef407576747880132627b3513f5afacd/tune_sparse_x86.ipynb b/docs/_downloads/293f8d0753933b706a0b588f909fe38a/tune_sparse_x86.ipynb
similarity index 100%
rename from docs/_downloads/ef407576747880132627b3513f5afacd/tune_sparse_x86.ipynb
rename to docs/_downloads/293f8d0753933b706a0b588f909fe38a/tune_sparse_x86.ipynb
diff --git a/docs/_downloads/5bd1bb9c6505ea40407fa19f01579414/reduction.py b/docs/_downloads/2a0982f8ca0176cb17713d28286536e4/reduction.py
similarity index 100%
rename from docs/_downloads/5bd1bb9c6505ea40407fa19f01579414/reduction.py
rename to docs/_downloads/2a0982f8ca0176cb17713d28286536e4/reduction.py
diff --git a/docs/_downloads/4c010cd30d80efae3f2dfe5743a098a5/install.ipynb b/docs/_downloads/2a4c6a9cfa43e8afef159a2bf1b99108/install.ipynb
similarity index 100%
rename from docs/_downloads/4c010cd30d80efae3f2dfe5743a098a5/install.ipynb
rename to docs/_downloads/2a4c6a9cfa43e8afef159a2bf1b99108/install.ipynb
diff --git a/docs/_downloads/7ba56b899e0cc8ebdb274901ddb3d351/autotvm_relay_x86.ipynb b/docs/_downloads/2f91b1346a0ba21b800081aa15fdaac2/autotvm_relay_x86.ipynb
similarity index 100%
rename from docs/_downloads/7ba56b899e0cc8ebdb274901ddb3d351/autotvm_relay_x86.ipynb
rename to docs/_downloads/2f91b1346a0ba21b800081aa15fdaac2/autotvm_relay_x86.ipynb
diff --git a/docs/_downloads/2fb9ae7bf124f72614a43137cf2919cb/micro_tflite.py b/docs/_downloads/2fb9ae7bf124f72614a43137cf2919cb/micro_tflite.py
new file mode 100644
index 0000000..cab105c
--- /dev/null
+++ b/docs/_downloads/2fb9ae7bf124f72614a43137cf2919cb/micro_tflite.py
@@ -0,0 +1,321 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""
+.. _microTVM-with-TFLite:
+
+microTVM with TFLite Models
+===========================
+**Author**: `Tom Gall <https://github.com/tom-gall>`_
+
+This tutorial is an introduction to working with microTVM and a TFLite
+model with Relay.
+"""
+
+######################################################################
+# .. note::
+#     If you want to run this tutorial on the microTVM Reference VM, download the Jupyter
+#     notebook using the link at the bottom of this page and save it into the TVM directory. Then:
+#
+#     #. Login to the reference VM with a modified ``vagrant ssh`` command:
+#
+#         ``$ vagrant ssh -- -L8888:localhost:8888``
+#
+#     #. Install jupyter:  ``pip install jupyterlab``
+#     #. ``cd`` to the TVM directory.
+#     #. Install tflite: poetry install -E importer-tflite
+#     #. Launch Jupyter Notebook: ``jupyter notebook``
+#     #. Copy the localhost URL displayed, and paste it into your browser.
+#     #. Navigate to saved Jupyter Notebook (``.ipynb`` file).
+#
+#
+# Setup
+# -----
+#
+# Install TFLite
+# ^^^^^^^^^^^^^^
+#
+# To get started, TFLite package needs to be installed as prerequisite. You can do this in two ways:
+#
+# 1. Install tflite with ``pip``
+#
+#     .. code-block:: bash
+#
+#       pip install tflite=2.1.0 --user
+#
+# 2. Generate the TFLite package yourself. The steps are the following:
+#
+#     Get the flatc compiler.
+#     Please refer to https://github.com/google/flatbuffers for details
+#     and make sure it is properly installed.
+#
+#     .. code-block:: bash
+#
+#       flatc --version
+#
+#     Get the TFLite schema.
+#
+#     .. code-block:: bash
+#
+#       wget https://raw.githubusercontent.com/tensorflow/tensorflow/r1.13/tensorflow/lite/schema/schema.fbs
+#
+#     Generate TFLite package.
+#
+#     .. code-block:: bash
+#
+#       flatc --python schema.fbs
+#
+#     Add the current folder (which contains generated tflite module) to PYTHONPATH.
+#
+#     .. code-block:: bash
+#
+#       export PYTHONPATH=${PYTHONPATH:+$PYTHONPATH:}$(pwd)
+#
+# To validate that the TFLite package was installed successfully, ``python -c "import tflite"``
+#
+# Install Zephyr (physical hardware only)
+# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+#
+# When running this tutorial with a host simulation (the default), you can use the host ``gcc`` to
+# build a firmware image that simulates the device. When compiling to run on physical hardware, you
+# need to install a *toolchain* plus some target-specific dependencies. microTVM allows you to
+# supply any compiler and runtime that can launch the TVM RPC server, but to get started, this
+# tutorial relies on the Zephyr RTOS to provide these pieces.
+#
+# You can install Zephyr by following the
+# `Installation Instructions <https://docs.zephyrproject.org/latest/getting_started/index.html>`_.
+#
+# Aside: Recreating your own Pre-Trained TFLite model
+#  The tutorial downloads a pretrained TFLite model. When working with microcontrollers
+#  you need to be mindful these are highly resource constrained devices as such standard
+#  models like MobileNet may not fit into their modest memory.
+#
+#  For this tutorial, we'll make use of one of the TF Micro example models.
+#
+#  If you wish to replicate the training steps see:
+#  https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/micro/examples/hello_world/train
+#
+#    .. note::
+#
+#      If you accidentally download the example pretrained model from:
+#
+#      ``wget https://storage.googleapis.com/download.tensorflow.org/models/tflite/micro/hello_world_2020_04_13.zip``
+#
+#      this will fail due to an unimplemented opcode (114)
+#
+# Load and prepare the Pre-Trained Model
+# --------------------------------------
+#
+# Load the pretrained TFLite model from a file in your current
+# directory into a buffer
+
+import os
+import numpy as np
+import logging
+
+import tvm
+import tvm.micro as micro
+from tvm.contrib.download import download_testdata
+from tvm.contrib import graph_executor, utils
+from tvm import relay
+
+model_url = "https://people.linaro.org/~tom.gall/sine_model.tflite"
+model_file = "sine_model.tflite"
+model_path = download_testdata(model_url, model_file, module="data")
+
+tflite_model_buf = open(model_path, "rb").read()
+
+######################################################################
+# Using the buffer, transform into a tflite model python object
+try:
+    import tflite
+
+    tflite_model = tflite.Model.GetRootAsModel(tflite_model_buf, 0)
+except AttributeError:
+    import tflite.Model
+
+    tflite_model = tflite.Model.Model.GetRootAsModel(tflite_model_buf, 0)
+
+######################################################################
+# Print out the version of the model
+version = tflite_model.Version()
+print("Model Version: " + str(version))
+
+######################################################################
+# Parse the python model object to convert it into a relay module
+# and weights.
+# It is important to note that the input tensor name must match what
+# is contained in the model.
+#
+# If you are unsure what that might be, this can be discovered by using
+# the ``visualize.py`` script within the Tensorflow project.
+# See `How do I inspect a .tflite file? <https://www.tensorflow.org/lite/guide/faq>`_
+
+input_tensor = "dense_4_input"
+input_shape = (1,)
+input_dtype = "float32"
+
+mod, params = relay.frontend.from_tflite(
+    tflite_model, shape_dict={input_tensor: input_shape}, dtype_dict={input_tensor: input_dtype}
+)
+
+######################################################################
+# Defining the target
+# -------------------
+#
+# Now we create a build config for relay, turning off two options and then calling relay.build which
+# will result in a C source file for the selected TARGET. When running on a simulated target of the
+# same architecture as the host (where this Python script is executed) choose "host" below for the
+# TARGET and a proper board/VM to run it (Zephyr will create the right QEMU VM based on BOARD. In
+# the example below the x86 arch is selected and a x86 VM is picked up accordingly:
+#
+TARGET = tvm.target.target.micro("host")
+BOARD = "qemu_x86"
+#
+# Compiling for physical hardware
+#  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The
+#  STM32F746 Nucleo target and board is chosen in the example below. Another option would be to
+#  choose the STM32F746 Discovery board instead. Since that board has the same MCU as the Nucleo
+#  board but a couple of wirings and configs differ, it's necessary to select the "stm32f746g_disco"
+#  board to generated the right firmware image.
+#
+#  TARGET = tvm.target.target.micro("stm32f746xx")
+#  BOARD = "nucleo_f746zg" # or "stm32f746g_disco#"
+#
+#  For some boards, Zephyr runs them emulated by default, using QEMU. For example, below is the
+#  TARGET and BOARD used to build a microTVM firmware for the mps2-an521 board. Since that board
+#  runs emulated by default on Zephyr the suffix "-qemu" is added to the board name to inform
+#  microTVM that the QEMU transporter must be used to communicate with the board. If the board name
+#  already has the prefix "qemu_", like "qemu_x86", then it's not necessary to add that suffix.
+#
+#  TARGET = tvm.target.target.micro("mps2_an521")
+#  BOARD = "mps2_an521-qemu"
+
+######################################################################
+# Now, compile the model for the target:
+
+with tvm.transform.PassContext(
+    opt_level=3, config={"tir.disable_vectorize": True}, disabled_pass=["AlterOpLayout"]
+):
+    module = relay.build(mod, target=TARGET, params=params)
+
+
+# Inspecting the compilation output
+# ---------------------------------
+#
+# The compilation process has produced some C code implementing the operators in this graph. We
+# can inspect it by printing the CSourceModule contents (for the purposes of this tutorial, let's
+# just print the first 10 lines):
+
+c_source_module = module.get_lib().imported_modules[0]
+assert c_source_module.type_key == "c", "tutorial is broken"
+
+c_source_code = c_source_module.get_source()
+first_few_lines = c_source_code.split("\n")[:10]
+assert any(
+    l.startswith("TVM_DLL int32_t tvmgen_default_") for l in first_few_lines
+), f"tutorial is broken: {first_few_lines!r}"
+print("\n".join(first_few_lines))
+
+
+# Compiling the generated code
+# ----------------------------
+#
+# Now we need to incorporate the generated C code into a project that allows us to run inference on the
+# device. The simplest way to do this is to integrate it yourself, using microTVM's standard output format
+# (:doc:`Model Library Format` </dev/model_library_format>`). This is a tarball with a standard layout:
+
+# Get a temporary path where we can store the tarball (since this is running as a tutorial).
+import tempfile
+
+fd, model_library_format_tar_path = tempfile.mkstemp()
+os.close(fd)
+os.unlink(model_library_format_tar_path)
+tvm.micro.export_model_library_format(module, model_library_format_tar_path)
+
+import tarfile
+
+with tarfile.open(model_library_format_tar_path, "r:*") as tar_f:
+    print("\n".join(f" - {m.name}" for m in tar_f.getmembers()))
+
+# Cleanup for tutorial:
+os.unlink(model_library_format_tar_path)
+
+
+# TVM also provides a standard way for embedded platforms to automatically generate a standalone
+# project, compile and flash it to a target, and communicate with it using the standard TVM RPC
+# protocol. The Model Library Format serves as the model input to this process. When embedded
+# platforms provide such an integration, they can be used directly by TVM for both host-driven
+# inference and autotuning . This integration is provided by the
+# `microTVM Project API` <https://github.com/apache/tvm-rfcs/blob/main/rfcs/0008-microtvm-project-api.md>_,
+#
+# Embedded platforms need to provide a Template Project containing a microTVM API Server (typically,
+# this lives in a file ``microtvm_api_server.py`` in the root directory). Let's use the example ``host``
+# project in this tutorial, which simulates the device using a POSIX subprocess and pipes:
+
+import subprocess
+import pathlib
+
+repo_root = pathlib.Path(
+    subprocess.check_output(["git", "rev-parse", "--show-toplevel"], encoding="utf-8").strip()
+)
+template_project_path = repo_root / "src" / "runtime" / "crt" / "host"
+project_options = {}  # You can use options to provide platform-specific options through TVM.
+
+# Compiling for physical hardware (or an emulated board, like the mps_an521)
+# --------------------------------------------------------------------------
+#  For physical hardware, you can try out the Zephyr platform by using a different template project
+#  and options:
+#
+#     template_project_path = repo_root / "apps" / "microtvm" / "zephyr" / "template_project"
+#     project_options = {"project_type": "host_driven", zephyr_board": "nucleo_f746zg"}}
+
+# Create a temporary directory
+import tvm.contrib.utils
+
+temp_dir = tvm.contrib.utils.tempdir()
+generated_project_dir = temp_dir / "generated-project"
+generated_project = tvm.micro.generate_project(
+    template_project_path, module, generated_project_dir, project_options
+)
+
+# Build and flash the project
+generated_project.build()
+generated_project.flash()
+
+
+######################################################################
+# Next, establish a session with the simulated device and run the
+# computation. The `with session` line would typically flash an attached
+# microcontroller, but in this tutorial, it simply launches a subprocess
+# to stand in for an attached microcontroller.
+
+with tvm.micro.Session(transport_context_manager=generated_project.transport()) as session:
+    graph_mod = tvm.micro.create_local_graph_executor(
+        module.get_graph_json(), session.get_system_lib(), session.device
+    )
+
+    # Set the model parameters using the lowered parameters produced by `relay.build`.
+    graph_mod.set_input(**module.get_params())
+
+    # The model consumes a single float32 value and returns a predicted sine value.  To pass the
+    # input value we construct a tvm.nd.array object with a single contrived number as input. For
+    # this model values of 0 to 2Pi are acceptable.
+    graph_mod.set_input(input_tensor, tvm.nd.array(np.array([0.5], dtype="float32")))
+    graph_mod.run()
+
+    tvm_output = graph_mod.get_output(0).numpy()
+    print("result is: " + str(tvm_output))
diff --git a/docs/_downloads/9c47ef19ddae24b555c61973e482829d/introduction.py b/docs/_downloads/31d82e25454740f5ba711497485c0dd4/introduction.py
similarity index 100%
rename from docs/_downloads/9c47ef19ddae24b555c61973e482829d/introduction.py
rename to docs/_downloads/31d82e25454740f5ba711497485c0dd4/introduction.py
diff --git a/docs/_downloads/baf1373314e0e040008107ff2571b4cd/tune_relay_arm.py b/docs/_downloads/35eacf8f75629e07aeda1329bdb7d53c/tune_relay_arm.py
similarity index 100%
rename from docs/_downloads/baf1373314e0e040008107ff2571b4cd/tune_relay_arm.py
rename to docs/_downloads/35eacf8f75629e07aeda1329bdb7d53c/tune_relay_arm.py
diff --git a/docs/_downloads/1c56ea64f39bea4084f04ec0959030ed/autotvm_matmul_x86.ipynb b/docs/_downloads/37bbf9e2065ec8deeb64a8d9fa0755bc/autotvm_matmul_x86.ipynb
similarity index 100%
rename from docs/_downloads/1c56ea64f39bea4084f04ec0959030ed/autotvm_matmul_x86.ipynb
rename to docs/_downloads/37bbf9e2065ec8deeb64a8d9fa0755bc/autotvm_matmul_x86.ipynb
diff --git a/docs/_downloads/c49dbffd05b18e5db4049ffe6480aca2/deploy_object_detection_pytorch.ipynb b/docs/_downloads/399e1d7889ca66b69d51655784827503/deploy_object_detection_pytorch.ipynb
similarity index 100%
rename from docs/_downloads/c49dbffd05b18e5db4049ffe6480aca2/deploy_object_detection_pytorch.ipynb
rename to docs/_downloads/399e1d7889ca66b69d51655784827503/deploy_object_detection_pytorch.ipynb
diff --git a/docs/_downloads/9b0365fd5723f7c4d4e996637ab9a487/intro_topi.py b/docs/_downloads/3a9b1d387f618487c8ccf6b8b78ae179/intro_topi.py
similarity index 100%
rename from docs/_downloads/9b0365fd5723f7c4d4e996637ab9a487/intro_topi.py
rename to docs/_downloads/3a9b1d387f618487c8ccf6b8b78ae179/intro_topi.py
diff --git a/docs/_downloads/e732d71c83de9fd8c6c7a72184d3ee0a/from_coreml.py b/docs/_downloads/3aeab7c9d659bf5da70126a1aff7c403/from_coreml.py
similarity index 100%
rename from docs/_downloads/e732d71c83de9fd8c6c7a72184d3ee0a/from_coreml.py
rename to docs/_downloads/3aeab7c9d659bf5da70126a1aff7c403/from_coreml.py
diff --git a/docs/_downloads/65bd9927a152de6eed3444185b24287f/tensorize.ipynb b/docs/_downloads/3b5e41b16a898b72d18127ebe2182c66/tensorize.ipynb
similarity index 100%
rename from docs/_downloads/65bd9927a152de6eed3444185b24287f/tensorize.ipynb
rename to docs/_downloads/3b5e41b16a898b72d18127ebe2182c66/tensorize.ipynb
diff --git a/docs/_downloads/b4d760859f6d9338f70bdb79ddfa3aa8/opt_conv_cuda.py b/docs/_downloads/3c5c85c3954f3110f16ca084e286f03a/opt_conv_cuda.py
similarity index 100%
rename from docs/_downloads/b4d760859f6d9338f70bdb79ddfa3aa8/opt_conv_cuda.py
rename to docs/_downloads/3c5c85c3954f3110f16ca084e286f03a/opt_conv_cuda.py
diff --git a/docs/_downloads/24a7471da81b18c4ba77d215289aed2f/relay_quick_start.ipynb b/docs/_downloads/3dd2108354ac3028c96bcd6a0c7899dd/relay_quick_start.ipynb
similarity index 100%
rename from docs/_downloads/24a7471da81b18c4ba77d215289aed2f/relay_quick_start.ipynb
rename to docs/_downloads/3dd2108354ac3028c96bcd6a0c7899dd/relay_quick_start.ipynb
diff --git a/docs/_downloads/83dedc6352b4016772e17480ef01345d/deploy_model_on_rasp.py b/docs/_downloads/408ef96692a668b33d94eca33cac7e0a/deploy_model_on_rasp.py
similarity index 100%
rename from docs/_downloads/83dedc6352b4016772e17480ef01345d/deploy_model_on_rasp.py
rename to docs/_downloads/408ef96692a668b33d94eca33cac7e0a/deploy_model_on_rasp.py
diff --git a/docs/_downloads/37c76200603adf82ebeffc23bdef8d31/tensor_expr_get_started.py b/docs/_downloads/40a01cffb015a67aaec0fad7e27cf80d/tensor_expr_get_started.py
similarity index 100%
rename from docs/_downloads/37c76200603adf82ebeffc23bdef8d31/tensor_expr_get_started.py
rename to docs/_downloads/40a01cffb015a67aaec0fad7e27cf80d/tensor_expr_get_started.py
diff --git a/docs/_downloads/baa4de13ce6d932de43e0eb5c4cb8f16/tensorize.py b/docs/_downloads/428c6201e29ce74e73c6b41eee589f62/tensorize.py
similarity index 100%
rename from docs/_downloads/baa4de13ce6d932de43e0eb5c4cb8f16/tensorize.py
rename to docs/_downloads/428c6201e29ce74e73c6b41eee589f62/tensorize.py
diff --git a/docs/_downloads/70a0767409e81bb5aaa9ce4e7a151dec/tensor_expr_get_started.ipynb b/docs/_downloads/4459ebf5b03d332f7f380abdaef81c05/tensor_expr_get_started.ipynb
similarity index 100%
rename from docs/_downloads/70a0767409e81bb5aaa9ce4e7a151dec/tensor_expr_get_started.ipynb
rename to docs/_downloads/4459ebf5b03d332f7f380abdaef81c05/tensor_expr_get_started.ipynb
diff --git a/docs/_downloads/f2f3dea1548903b315df5847ee60f87d/from_mxnet.ipynb b/docs/_downloads/4bbcfcce3c35b0b795a42c998ceb3770/from_mxnet.ipynb
similarity index 100%
rename from docs/_downloads/f2f3dea1548903b315df5847ee60f87d/from_mxnet.ipynb
rename to docs/_downloads/4bbcfcce3c35b0b795a42c998ceb3770/from_mxnet.ipynb
diff --git a/docs/_downloads/2daaacf3c023a8ad30b14e52b9aaa635/matrix_multiply_opt.ipynb b/docs/_downloads/4d3f955a709b320db0d42740fead8ac1/matrix_multiply_opt.ipynb
similarity index 100%
rename from docs/_downloads/2daaacf3c023a8ad30b14e52b9aaa635/matrix_multiply_opt.ipynb
rename to docs/_downloads/4d3f955a709b320db0d42740fead8ac1/matrix_multiply_opt.ipynb
diff --git a/docs/_downloads/b78890bb249aab574c50f16eb0be62a9/tune_network_arm.ipynb b/docs/_downloads/4dc30a43f3a6aa3ed4bc3077ad35ff70/tune_network_arm.ipynb
similarity index 100%
rename from docs/_downloads/b78890bb249aab574c50f16eb0be62a9/tune_network_arm.ipynb
rename to docs/_downloads/4dc30a43f3a6aa3ed4bc3077ad35ff70/tune_network_arm.ipynb
diff --git a/docs/_downloads/30015213c2882505d466865fafaed52d/from_caffe2.ipynb b/docs/_downloads/533ec06bf55bc2c1378e639779c7f4e1/from_caffe2.ipynb
similarity index 100%
rename from docs/_downloads/30015213c2882505d466865fafaed52d/from_caffe2.ipynb
rename to docs/_downloads/533ec06bf55bc2c1378e639779c7f4e1/from_caffe2.ipynb
diff --git a/docs/_downloads/5499fb7d70e17c6aabf49246a978db52/use_pass_infra.py b/docs/_downloads/5499fb7d70e17c6aabf49246a978db52/use_pass_infra.py
new file mode 100644
index 0000000..67cdfde
--- /dev/null
+++ b/docs/_downloads/5499fb7d70e17c6aabf49246a978db52/use_pass_infra.py
@@ -0,0 +1,273 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# pylint: disable=line-too-long
+"""
+.. _tutorial-use-pass-infra:
+
+How to Use TVM Pass Infra
+=========================
+**Author**: `Zhi Chen <https://github.com/zhiics>`_
+
+As the number of optimization passes increases in Relay/tir, it becomes intractable to
+execute them and maintain their dependencies manually. Therefore, we have
+introduced an infrastructure to manage the optimization passes and make it
+applicable to different layers of the IR in the TVM stack.
+
+The optimizations of a Relay/tir program could be applied at various granularity,
+namely function-level and module-level using :py:class:`tvm.relay.transform.FunctionPass`/
+:py:class:`tvm.tir.transform.PrimFuncPass` and :py:class:`tvm.transform.ModulePass`
+respectively. Or users can rely on :py:class:`tvm.transform.Sequential` to apply a sequence of passes
+on a Relay/tir program where the dependencies between passes can be resolved by the
+pass infra. For more details about each type of these passes, please refer to
+the :ref:`pass-infra`
+
+This tutorial mainly demostrates how developers can use the pass infra to perform
+a certain optimization and create an optimization pipeline for a Relay program.
+The same approach can be used for tir as well.
+"""
+
+import numpy as np
+import tvm
+from tvm import te
+import tvm.relay as relay
+
+###############################################################################
+# Create An Example Relay Program
+# -------------------------------
+# First of all, we create a simple Relay program for the tutorial. This program
+# will be used by various optimizations of the examples in this tutorial.
+# Similarly, users can write a tir primitive function and apply the tir passes.
+
+
+def example():
+    shape = (1, 64, 54, 54)
+    c_data = np.empty(shape).astype("float32")
+    c = relay.const(c_data)
+    weight = relay.var("weight", shape=(64, 64, 3, 3))
+    x = relay.var("x", relay.TensorType((1, 64, 56, 56), "float32"))
+    conv = relay.nn.conv2d(x, weight)
+    y = relay.add(c, c)
+    y = relay.multiply(y, relay.const(2, "float32"))
+    y = relay.add(conv, y)
+    z = relay.add(y, c)
+    z1 = relay.add(y, c)
+    z2 = relay.add(z, z1)
+    return relay.Function([x, weight], z2)
+
+
+###############################################################################
+# Optimize the Program
+# --------------------
+# Now we would like to optimize the program. Relay features a host of
+# optimizations. We will select some of them to apply on this example program.
+#
+# There are multiple ways to optimize a Relay program. Below we will provide
+# examples for each of them.
+#
+# Manually Apply Optimization Passes
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# Let's first create a relay Module which contains one or multiple Relay
+# functions for optimization.
+f = example()
+mod = tvm.IRModule.from_expr(f)
+
+# Now we can apply constant folding on the module.
+# fold_const here is a callback that doesn't take any parameters.
+fold_const = relay.transform.FoldConstant()
+# Then, we can invoke the pass on the given module. Note that the constant
+# folding pass works at the function-level. That being said, each function in
+# the module will be applied with the optimization. Users don't need to iterate
+# through individual functions manually to apply this pass.
+mod = fold_const(mod)
+# We can see from the updated program that the constants are folded.
+print(mod)
+
+###############################################################################
+# More optimizations can be applied in the similar manner. For instance, we can
+# eliminate the common expressions that used by `z` and `z1`.
+mod = relay.transform.EliminateCommonSubexpr()(mod)
+print(mod)
+
+###############################################################################
+# Some optimizations, such as fusion, are parameteric as well. For example,
+# opt level 0 will not allow operators to be fused together. Users can pass the
+# `fuse_opt_level` to enable this.
+mod = relay.transform.FuseOps(fuse_opt_level=0)(mod)
+
+# We can observe that the optimized module contains functions that only have
+# a signle primitive op.
+print(mod)
+
+###############################################################################
+# Use Sequential to Apply a Sequence of Passes
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# Applying passes as above is actually tedious and it may require users to have
+# better understanding about the dependencies between them. For example, fusion
+# currently doesn't work well on let bindings. Therefore, we would not be able
+# to fuse operators that were fusable if :py:func:`relay.transform.ToANormalForm` is applied before
+# fusion, as this pass generates let bindings for each expression to
+# canonicalize a Relay program.
+#
+# Relay, hence, provides :py:class:`tvm.transform.Sequential` to alleviate developers from handling
+# these issues explicitly by specifying the required passes of each pass and
+# packing them as a whole to execute. For example, the same passes can now be
+# applied using the sequential style as the following. :py:class:`tvm.transform.Sequential` is
+# similiar to `torch.nn.sequential <https://pytorch.org/docs/stable/nn.html#torch.nn.Sequential>`_
+# and `mxnet.gluon.block <https://mxnet.apache.org/api/python/docs/_modules/mxnet/gluon/block.html>`_.
+# For example, `torch.nn.sequential` is used to contain a sequence of PyTorch
+# `Modules` that will be added to build a network. It focuses on the network
+# layers. Instead, the :py:class:`tvm.transform.Sequential` in our pass infra works on the optimizing
+# pass.
+
+# Now let's execute some passes through :py:class:`tvm.transform.Sequential`
+f = example()
+mod = tvm.IRModule.from_expr(f)
+# Glob the interested passes.
+seq = tvm.transform.Sequential(
+    [
+        relay.transform.FoldConstant(),
+        relay.transform.EliminateCommonSubexpr(),
+        relay.transform.FuseOps(fuse_opt_level=2),
+    ]
+)
+mod1 = seq(mod)
+print(mod1)
+
+###############################################################################
+# From the transformed Relay program, we can see that there are still two
+# identical addition operations. This is because ``EliminateCommonSubexpr``
+# was not actually performed. The reason is because only the passes that have
+# optimization level less or equal to 2 will be executed by default under
+# :py:class:`tvm.transform.Sequential`. The pass infra,
+# however, provides a configuration interface
+# for users to customize the optimization level that they want to execute.
+
+with tvm.transform.PassContext(opt_level=3):
+    mod2 = seq(mod)
+print(mod2)
+
+###############################################################################
+# Now we can see that only one of the two identical additions is kept.
+#
+# In addition, users can selectively disable some passes using the
+# `disabled_pass` config, which is similar to the `-fno-xxx` option used the
+# general purpose compilers, such as Clang and GCC. For example, we can disable
+# EliminateCommonSubexpr as following. The printed module will again show two
+# identical addition operations.
+
+with tvm.transform.PassContext(opt_level=3, disabled_pass=["EliminateCommonSubexpr"]):
+    mod3 = seq(mod)
+print(mod3)
+
+##############################################################################
+# Implement a Pass Using Python Decorator
+# ------------------------------------------
+# The next example illustrates how we can orchestrate a customized optimization
+# pipeline through the pass infra using Python decorators. This functionality
+# greatly eases the implementation of passes. For example, users can simply
+# define a decorated class to do function-level optimizations as the following
+# example shows. `transform_function` wraps a class to replace all constants
+# with a multiple of `c`. Later on, each function in a given module will be
+# visited and each constant in the function will be replaced when we invoke the
+# customized pass.
+
+
+@relay.transform.function_pass(opt_level=1)
+class CustomPipeline:
+    """Simple test function to replace one argument to another."""
+
+    def __init__(self, multiplier):
+        self.multiplier = multiplier
+
+    # This function can define a pass.
+    def transform_function(self, func, mod, ctx):
+        obj = self
+
+        class ReplaceConstant(tvm.relay.ExprMutator):
+            def visit_constant(self, c):
+                return relay.multiply(obj.multiplier, c)
+
+        return ReplaceConstant().visit(func)
+
+
+f = example()
+mod = tvm.IRModule.from_expr(f)
+custom_pass = CustomPipeline(multiplier=relay.const(3, "float32"))
+assert custom_pass.info.name == "CustomPipeline"
+mod3 = custom_pass(mod)
+print(mod3)
+
+##############################################################################
+# Debug a Pass
+# ------------
+# TVM provides users a plug-and-play style debugging pass that print the IR
+# after a certain pass is done through a special pass (``PrintIR``) to dump the IR of the
+# whole module. A slightly modified version of the sequential pass example
+# could be like the following to enable IR dumping for ``FoldConstant`` optimization.
+
+f = example()
+mod = tvm.IRModule.from_expr(f)
+seq = tvm.transform.Sequential(
+    [
+        relay.transform.FoldConstant(),
+        tvm.transform.PrintIR(),
+        relay.transform.EliminateCommonSubexpr(),
+        relay.transform.FuseOps(),
+    ]
+)
+
+###############################################################################
+# By inserting the ``PrintIR`` pass after ``FoldConstant``, the pass infra will
+# dump out the module IR when ``FoldConstant`` is done. Users can plug in this
+# pass after any pass they want to debug for viewing the optimization effect.
+#
+# There is a more flexible debugging mechanism. One can implement a ``PassInstrument``
+# class to execute arbitrary code not only before and/or after each pass but also
+# at entering/exiting ``PassContext``. See :ref:`pass_instrument_cpp_backend`
+# for more details.
+#
+# Here we use :py::func`tvm.instrument.pass_instrument` decorator to implement
+# a PassInsturment class printing IR before execution of each passes:
+
+
+@tvm.instrument.pass_instrument
+class PrintIR:
+    """Print the name of the pass, the IR, only before passes execute."""
+
+    def run_before_pass(self, mod, info):
+        print("Running pass: {}", info)
+        print(mod)
+
+
+with tvm.transform.PassContext(opt_level=3, instruments=[PrintIR()]):
+    with tvm.target.Target("llvm"):
+        # Perform the optimizations.
+        mod = seq(mod)
+print(mod)
+
+print("done")
+
+##############################################################################
+# Summary
+# -------
+# This tutorial has covered how we can write and invoke passes in TVM more
+# conveniently using the pass infra. Different ways of invoking a pass are also
+# disucssed. Using :py:class:`tvm.transform.Sequential` can largely help
+# users to ease the work of handling multiple optimization passes and their
+# dependencies. In addition, an example is provided to illustrate
+# how we can debug a pass using the ``PrintIR`` and tracing.
diff --git a/docs/_downloads/5c443f88ea44ce77c5ccade429af6e74/deploy_prequantized_tflite.py b/docs/_downloads/56691c7a27d45da61d112276334640d3/deploy_prequantized_tflite.py
similarity index 100%
rename from docs/_downloads/5c443f88ea44ce77c5ccade429af6e74/deploy_prequantized_tflite.py
rename to docs/_downloads/56691c7a27d45da61d112276334640d3/deploy_prequantized_tflite.py
diff --git a/docs/_downloads/eabaa51a209056955e5626fa23b5978e/autotvm_relay_x86.py b/docs/_downloads/57a45d9bef1af358191e7d50043e652c/autotvm_relay_x86.py
similarity index 100%
rename from docs/_downloads/eabaa51a209056955e5626fa23b5978e/autotvm_relay_x86.py
rename to docs/_downloads/57a45d9bef1af358191e7d50043e652c/autotvm_relay_x86.py
diff --git a/docs/_downloads/5b279d8a8718816263fa65b0eef1a5c0/micro_tflite.ipynb b/docs/_downloads/5b279d8a8718816263fa65b0eef1a5c0/micro_tflite.ipynb
new file mode 100644
index 0000000..788fa2f
--- /dev/null
+++ b/docs/_downloads/5b279d8a8718816263fa65b0eef1a5c0/micro_tflite.ipynb
@@ -0,0 +1,169 @@
+{
+  "cells": [
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "%matplotlib inline"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "\n\nmicroTVM with TFLite Models\n===========================\n**Author**: `Tom Gall <https://github.com/tom-gall>`_\n\nThis tutorial is an introduction to working with microTVM and a TFLite\nmodel with Relay.\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "<div class=\"alert alert-info\"><h4>Note</h4><p>If you want to run this tutorial on the microTVM Reference VM, download the Jupyter\n    notebook using the link at the bottom of this page and save it into the TVM directory. Then:\n\n    #. Login to the reference VM with a modified ``vagrant ssh`` command:\n\n        ``$ vagrant ssh -- -L8888:localhost:8888``\n\n    #. Install jupyter:  ``pip install jupyterlab``\n    #. ``cd`` to the TVM directory.\n    #. Install tflite: poetry [...]
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "import os\nimport numpy as np\nimport logging\n\nimport tvm\nimport tvm.micro as micro\nfrom tvm.contrib.download import download_testdata\nfrom tvm.contrib import graph_executor, utils\nfrom tvm import relay\n\nmodel_url = \"https://people.linaro.org/~tom.gall/sine_model.tflite\"\nmodel_file = \"sine_model.tflite\"\nmodel_path = download_testdata(model_url, model_file, module=\"data\")\n\ntflite_model_buf = open(model_path, \"rb\").read()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Using the buffer, transform into a tflite model python object\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "try:\n    import tflite\n\n    tflite_model = tflite.Model.GetRootAsModel(tflite_model_buf, 0)\nexcept AttributeError:\n    import tflite.Model\n\n    tflite_model = tflite.Model.Model.GetRootAsModel(tflite_model_buf, 0)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Print out the version of the model\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "version = tflite_model.Version()\nprint(\"Model Version: \" + str(version))"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Parse the python model object to convert it into a relay module\nand weights.\nIt is important to note that the input tensor name must match what\nis contained in the model.\n\nIf you are unsure what that might be, this can be discovered by using\nthe ``visualize.py`` script within the Tensorflow project.\nSee `How do I inspect a .tflite file? <https://www.tensorflow.org/lite/guide/faq>`_\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "input_tensor = \"dense_4_input\"\ninput_shape = (1,)\ninput_dtype = \"float32\"\n\nmod, params = relay.frontend.from_tflite(\n    tflite_model, shape_dict={input_tensor: input_shape}, dtype_dict={input_tensor: input_dtype}\n)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Defining the target\n-------------------\n\nNow we create a build config for relay, turning off two options and then calling relay.build which\nwill result in a C source file for the selected TARGET. When running on a simulated target of the\nsame architecture as the host (where this Python script is executed) choose \"host\" below for the\nTARGET and a proper board/VM to run it (Zephyr will create the right QEMU VM based on BOARD. In\nthe example below the x86 arch is selected  [...]
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "TARGET = tvm.target.target.micro(\"host\")\nBOARD = \"qemu_x86\"\n#\n# Compiling for physical hardware\n#  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The\n#  STM32F746 Nucleo target and board is chosen in the example below. Another option would be to\n#  choose the STM32F746 Discovery board instead. Since that board has the same MCU as the Nucleo\n#  board but a couple of wirings and configs differ, it's necessary to select the \"s [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Now, compile the model for the target:\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "with tvm.transform.PassContext(\n    opt_level=3, config={\"tir.disable_vectorize\": True}, disabled_pass=[\"AlterOpLayout\"]\n):\n    module = relay.build(mod, target=TARGET, params=params)\n\n\n# Inspecting the compilation output\n# ---------------------------------\n#\n# The compilation process has produced some C code implementing the operators in this graph. We\n# can inspect it by printing the CSourceModule contents (for the purposes of this tutorial, let's\n# just print t [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Next, establish a session with the simulated device and run the\ncomputation. The `with session` line would typically flash an attached\nmicrocontroller, but in this tutorial, it simply launches a subprocess\nto stand in for an attached microcontroller.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "with tvm.micro.Session(transport_context_manager=generated_project.transport()) as session:\n    graph_mod = tvm.micro.create_local_graph_executor(\n        module.get_graph_json(), session.get_system_lib(), session.device\n    )\n\n    # Set the model parameters using the lowered parameters produced by `relay.build`.\n    graph_mod.set_input(**module.get_params())\n\n    # The model consumes a single float32 value and returns a predicted sine value.  To pass the\n    # input va [...]
+      ]
+    }
+  ],
+  "metadata": {
+    "kernelspec": {
+      "display_name": "Python 3",
+      "language": "python",
+      "name": "python3"
+    },
+    "language_info": {
+      "codemirror_mode": {
+        "name": "ipython",
+        "version": 3
+      },
+      "file_extension": ".py",
+      "mimetype": "text/x-python",
+      "name": "python",
+      "nbconvert_exporter": "python",
+      "pygments_lexer": "ipython3",
+      "version": "3.6.9"
+    }
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/docs/_downloads/0c8b1cb0bb1d1dff7899c341215a0f35/tune_network_mali.ipynb b/docs/_downloads/5e4e499c097b16a90c517e630502253a/tune_network_mali.ipynb
similarity index 100%
rename from docs/_downloads/0c8b1cb0bb1d1dff7899c341215a0f35/tune_network_mali.ipynb
rename to docs/_downloads/5e4e499c097b16a90c517e630502253a/tune_network_mali.ipynb
diff --git a/docs/_downloads/bcb4a24e8acc1ca84214bc8d7fb7954b/tune_conv2d_layer_cuda.ipynb b/docs/_downloads/5f1f7bd7d90710fd404f7bcdc4965622/tune_conv2d_layer_cuda.ipynb
similarity index 100%
rename from docs/_downloads/bcb4a24e8acc1ca84214bc8d7fb7954b/tune_conv2d_layer_cuda.ipynb
rename to docs/_downloads/5f1f7bd7d90710fd404f7bcdc4965622/tune_conv2d_layer_cuda.ipynb
diff --git a/docs/_downloads/578004d7db54caef0007609ae5540c72/intro_topi.ipynb b/docs/_downloads/63f9e50204143ea3c2d3593c72439b3d/intro_topi.ipynb
similarity index 100%
rename from docs/_downloads/578004d7db54caef0007609ae5540c72/intro_topi.ipynb
rename to docs/_downloads/63f9e50204143ea3c2d3593c72439b3d/intro_topi.ipynb
diff --git a/docs/_downloads/e41367a7f459e4f4dca82180009c1539/tune_relay_mobile_gpu.py b/docs/_downloads/644d28fc67dfb3099fb0d275ffcf1c7c/tune_relay_mobile_gpu.py
similarity index 100%
rename from docs/_downloads/e41367a7f459e4f4dca82180009c1539/tune_relay_mobile_gpu.py
rename to docs/_downloads/644d28fc67dfb3099fb0d275ffcf1c7c/tune_relay_mobile_gpu.py
diff --git a/docs/_downloads/ed4fcfc19b39f91a14d817676480a454/deploy_detection.py b/docs/_downloads/65b9451c8de050d7cd9da2fe5a49acc6/deploy_detection.py
similarity index 100%
rename from docs/_downloads/ed4fcfc19b39f91a14d817676480a454/deploy_detection.py
rename to docs/_downloads/65b9451c8de050d7cd9da2fe5a49acc6/deploy_detection.py
diff --git a/docs/_downloads/66258823cf03d1875c9ea84a82131101/deploy_detection.ipynb b/docs/_downloads/66e1a42229aae7ed49ac268f520e6727/deploy_detection.ipynb
similarity index 100%
rename from docs/_downloads/66258823cf03d1875c9ea84a82131101/deploy_detection.ipynb
rename to docs/_downloads/66e1a42229aae7ed49ac268f520e6727/deploy_detection.ipynb
diff --git a/docs/_downloads/78bebde8ea0f8558ac1a6fe12999f99f/tune_network_mali.py b/docs/_downloads/67bf7dd99bcfb837cf3e8b461a5eeb48/tune_network_mali.py
similarity index 100%
rename from docs/_downloads/78bebde8ea0f8558ac1a6fe12999f99f/tune_network_mali.py
rename to docs/_downloads/67bf7dd99bcfb837cf3e8b461a5eeb48/tune_network_mali.py
diff --git a/docs/_downloads/85ba00b8ada85b8c5367f37b526a8caa/tune_relay_x86.py b/docs/_downloads/6836ce26807b8d33b8f499287c1f3d04/tune_relay_x86.py
similarity index 100%
rename from docs/_downloads/85ba00b8ada85b8c5367f37b526a8caa/tune_relay_x86.py
rename to docs/_downloads/6836ce26807b8d33b8f499287c1f3d04/tune_relay_x86.py
diff --git a/docs/_downloads/67c1d621743dc9152a29366a6b72ae71/tuple_inputs.py b/docs/_downloads/68abf665197871646fffcd0955bddad7/tuple_inputs.py
similarity index 100%
rename from docs/_downloads/67c1d621743dc9152a29366a6b72ae71/tuple_inputs.py
rename to docs/_downloads/68abf665197871646fffcd0955bddad7/tuple_inputs.py
diff --git a/docs/_downloads/696dd37904ef92773435ca321ff41bfb/from_onnx.py b/docs/_downloads/696dd37904ef92773435ca321ff41bfb/from_onnx.py
deleted file mode 100644
index fd51d7a..0000000
--- a/docs/_downloads/696dd37904ef92773435ca321ff41bfb/from_onnx.py
+++ /dev/null
@@ -1,135 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-"""
-Compile ONNX Models
-===================
-**Author**: `Joshua Z. Zhang <https://zhreshold.github.io/>`_
-
-This article is an introductory tutorial to deploy ONNX models with Relay.
-
-For us to begin with, ONNX package must be installed.
-
-A quick solution is to install protobuf compiler, and
-
-.. code-block:: bash
-
-    pip install onnx --user
-
-or please refer to official site.
-https://github.com/onnx/onnx
-"""
-import onnx
-import numpy as np
-import tvm
-from tvm import te
-import tvm.relay as relay
-from tvm.contrib.download import download_testdata
-
-######################################################################
-# Load pretrained ONNX model
-# ---------------------------------------------
-# The example super resolution model used here is exactly the same model in onnx tutorial
-# http://pytorch.org/tutorials/advanced/super_resolution_with_caffe2.html
-# we skip the pytorch model construction part, and download the saved onnx model
-model_url = "".join(
-    [
-        "https://gist.github.com/zhreshold/",
-        "bcda4716699ac97ea44f791c24310193/raw/",
-        "93672b029103648953c4e5ad3ac3aadf346a4cdc/",
-        "super_resolution_0.2.onnx",
-    ]
-)
-model_path = download_testdata(model_url, "super_resolution.onnx", module="onnx")
-# now you have super_resolution.onnx on disk
-onnx_model = onnx.load(model_path)
-
-######################################################################
-# Load a test image
-# ---------------------------------------------
-# A single cat dominates the examples! This model takes a single input image of size
-# 224x224 and outputs a scaled image that is 3x greater than the input along each
-# axis, a 672x672 image. Re-scale the cat image to fit this input shape then
-# convert to `YCbCr`. The super resolution model will then be applied to the
-# luminance (`Y`) channel.
-from PIL import Image
-
-img_url = "https://github.com/dmlc/mxnet.js/blob/main/data/cat.png?raw=true"
-img_path = download_testdata(img_url, "cat.png", module="data")
-img = Image.open(img_path).resize((224, 224))
-img_ycbcr = img.convert("YCbCr")  # convert to YCbCr
-img_y, img_cb, img_cr = img_ycbcr.split()
-x = np.array(img_y)[np.newaxis, np.newaxis, :, :]
-
-######################################################################
-# Compile the model with relay
-# ---------------------------------------------
-# Typically ONNX models mix model input values with parameter values, with
-# the input having the name `1`. This model dependent, and you should check
-# with the documentation for your model to determine the full input and
-# parameter name space.
-#
-# Passing in the shape dictionary to the `relay.frontend.from_onnx` method
-# tells relay which ONNX parameters are inputs, and which are parameters, and
-# provides a static definition of the input size.
-target = "llvm"
-
-input_name = "1"
-shape_dict = {input_name: x.shape}
-mod, params = relay.frontend.from_onnx(onnx_model, shape_dict)
-
-with tvm.transform.PassContext(opt_level=1):
-    executor = relay.build_module.create_executor(
-        "graph", mod, tvm.cpu(0), target, params
-    ).evaluate()
-
-######################################################################
-# Execute on TVM
-# ---------------------------------------------
-dtype = "float32"
-tvm_output = executor(tvm.nd.array(x.astype(dtype))).numpy()
-
-######################################################################
-# Display results
-# ---------------------------------------------
-# We put input and output image neck to neck. The luminance channel, `Y` is the output
-# from the model. The chroma channels `Cb` and `Cr` are resized to match with a simple
-# bicubic algorithm. The image is then recombined and converted back to `RGB`.
-from matplotlib import pyplot as plt
-
-out_y = Image.fromarray(np.uint8((tvm_output[0, 0]).clip(0, 255)), mode="L")
-out_cb = img_cb.resize(out_y.size, Image.BICUBIC)
-out_cr = img_cr.resize(out_y.size, Image.BICUBIC)
-result = Image.merge("YCbCr", [out_y, out_cb, out_cr]).convert("RGB")
-canvas = np.full((672, 672 * 2, 3), 255)
-canvas[0:224, 0:224, :] = np.asarray(img)
-canvas[:, 672:, :] = np.asarray(result)
-plt.imshow(canvas.astype(np.uint8))
-plt.show()
-
-######################################################################
-# Notes
-# ---------------------------------------------
-# By default, ONNX defines models in terms of dynamic shapes. The ONNX importer
-# retains that dynamism upon import, and the compiler attempts to convert the model
-# into a static shapes at compile time. If this fails, there may still be dynamic
-# operations in the model. Not all TVM kernels currently support dynamic shapes,
-# please file an issue on discuss.tvm.apache.org if you hit an error with dynamic kernels.
-#
-# This particular model was build using an older version of ONNX. During the import
-# phase ONNX importer will run the ONNX verifier, which may throw a `Mismatched attribute type`
-# warning. Because TVM supports a number of different ONNX versions, the Relay model
-# will still be valid.
diff --git a/docs/_downloads/2c8ef0390ad4c53ca85671fa36c33b26/tune_conv2d_cuda.py b/docs/_downloads/6ad550da5092845382b1197f58a93816/tune_conv2d_cuda.py
similarity index 100%
rename from docs/_downloads/2c8ef0390ad4c53ca85671fa36c33b26/tune_conv2d_cuda.py
rename to docs/_downloads/6ad550da5092845382b1197f58a93816/tune_conv2d_cuda.py
diff --git a/docs/_downloads/2c0ed53a9ebd68caf76cd8235fae2711/tune_relay_mobile_gpu.ipynb b/docs/_downloads/6b0f549107f73f2e48c894372be08bcb/tune_relay_mobile_gpu.ipynb
similarity index 100%
rename from docs/_downloads/2c0ed53a9ebd68caf76cd8235fae2711/tune_relay_mobile_gpu.ipynb
rename to docs/_downloads/6b0f549107f73f2e48c894372be08bcb/tune_relay_mobile_gpu.ipynb
diff --git a/docs/_downloads/09d0a1754546d603ffcd30e8e8a44cac/tune_alu_vta.py b/docs/_downloads/6bbcf342fb9192416b8e1a86a1d4e981/tune_alu_vta.py
similarity index 100%
rename from docs/_downloads/09d0a1754546d603ffcd30e8e8a44cac/tune_alu_vta.py
rename to docs/_downloads/6bbcf342fb9192416b8e1a86a1d4e981/tune_alu_vta.py
diff --git a/docs/_downloads/4e9540fc014621d8d3bd14869c1ab227/scan.ipynb b/docs/_downloads/729378592a96230b4f7be71b44da43a4/scan.ipynb
similarity index 100%
rename from docs/_downloads/4e9540fc014621d8d3bd14869c1ab227/scan.ipynb
rename to docs/_downloads/729378592a96230b4f7be71b44da43a4/scan.ipynb
diff --git a/docs/_downloads/2354a24ad8bc07194943c49f2fb48874/tune_conv2d_cuda.ipynb b/docs/_downloads/732ed130cbc15432e737da8cc47e1734/tune_conv2d_cuda.ipynb
similarity index 100%
rename from docs/_downloads/2354a24ad8bc07194943c49f2fb48874/tune_conv2d_cuda.ipynb
rename to docs/_downloads/732ed130cbc15432e737da8cc47e1734/tune_conv2d_cuda.ipynb
diff --git a/docs/_downloads/e3748c6e5b8a427385ff1afdf1562c3c/opt_conv_tensorcore.py b/docs/_downloads/7372db5919b5619bc34fde3434862bca/opt_conv_tensorcore.py
similarity index 100%
rename from docs/_downloads/e3748c6e5b8a427385ff1afdf1562c3c/opt_conv_tensorcore.py
rename to docs/_downloads/7372db5919b5619bc34fde3434862bca/opt_conv_tensorcore.py
diff --git a/docs/_downloads/9a7956336431664ba6d628347b08f5cb/opt_conv_tensorcore.ipynb b/docs/_downloads/7455981870c23c8c76482dedf33d8a42/opt_conv_tensorcore.ipynb
similarity index 100%
rename from docs/_downloads/9a7956336431664ba6d628347b08f5cb/opt_conv_tensorcore.ipynb
rename to docs/_downloads/7455981870c23c8c76482dedf33d8a42/opt_conv_tensorcore.ipynb
diff --git a/docs/_downloads/cfc40d6a8f25c9fce268b6a4f277d915/cross_compilation_and_rpc.py b/docs/_downloads/766206ab8f1fd80ac34d9816cb991a0d/cross_compilation_and_rpc.py
similarity index 100%
rename from docs/_downloads/cfc40d6a8f25c9fce268b6a4f277d915/cross_compilation_and_rpc.py
rename to docs/_downloads/766206ab8f1fd80ac34d9816cb991a0d/cross_compilation_and_rpc.py
diff --git a/docs/_downloads/a7ce44923ffcc359fd2e532ac1f62c9e/from_darknet.py b/docs/_downloads/7716f96385bd5abb6e822041e285be54/from_darknet.py
similarity index 100%
rename from docs/_downloads/a7ce44923ffcc359fd2e532ac1f62c9e/from_darknet.py
rename to docs/_downloads/7716f96385bd5abb6e822041e285be54/from_darknet.py
diff --git a/docs/_downloads/ec94e7a109437cf90cddcc60a7b5aaea/deploy_object_detection_pytorch.py b/docs/_downloads/7795da4b258c8feff986668b95ef57ad/deploy_object_detection_pytorch.py
similarity index 100%
rename from docs/_downloads/ec94e7a109437cf90cddcc60a7b5aaea/deploy_object_detection_pytorch.py
rename to docs/_downloads/7795da4b258c8feff986668b95ef57ad/deploy_object_detection_pytorch.py
diff --git a/docs/_downloads/779f52a44f2b8ab22dc21eee0c27fd4d/from_onnx.ipynb b/docs/_downloads/779f52a44f2b8ab22dc21eee0c27fd4d/from_onnx.ipynb
new file mode 100644
index 0000000..57943cb
--- /dev/null
+++ b/docs/_downloads/779f52a44f2b8ab22dc21eee0c27fd4d/from_onnx.ipynb
@@ -0,0 +1,151 @@
+{
+  "cells": [
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "%matplotlib inline"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "\nCompile ONNX Models\n===================\n**Author**: `Joshua Z. Zhang <https://zhreshold.github.io/>`_\n\nThis article is an introductory tutorial to deploy ONNX models with Relay.\n\nFor us to begin with, ONNX package must be installed.\n\nA quick solution is to install protobuf compiler, and\n\n.. code-block:: bash\n\n    pip install --user onnx onnxoptimizer\n\nor please refer to official site.\nhttps://github.com/onnx/onnx\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "import onnx\nimport numpy as np\nimport tvm\nfrom tvm import te\nimport tvm.relay as relay\nfrom tvm.contrib.download import download_testdata"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Load pretrained ONNX model\n---------------------------------------------\nThe example super resolution model used here is exactly the same model in onnx tutorial\nhttp://pytorch.org/tutorials/advanced/super_resolution_with_caffe2.html\nwe skip the pytorch model construction part, and download the saved onnx model\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "model_url = \"\".join(\n    [\n        \"https://gist.github.com/zhreshold/\",\n        \"bcda4716699ac97ea44f791c24310193/raw/\",\n        \"93672b029103648953c4e5ad3ac3aadf346a4cdc/\",\n        \"super_resolution_0.2.onnx\",\n    ]\n)\nmodel_path = download_testdata(model_url, \"super_resolution.onnx\", module=\"onnx\")\n# now you have super_resolution.onnx on disk\nonnx_model = onnx.load(model_path)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Load a test image\n---------------------------------------------\nA single cat dominates the examples! This model takes a single input image of size\n224x224 and outputs a scaled image that is 3x greater than the input along each\naxis, a 672x672 image. Re-scale the cat image to fit this input shape then\nconvert to `YCbCr`. The super resolution model will then be applied to the\nluminance (`Y`) channel.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "from PIL import Image\n\nimg_url = \"https://github.com/dmlc/mxnet.js/blob/main/data/cat.png?raw=true\"\nimg_path = download_testdata(img_url, \"cat.png\", module=\"data\")\nimg = Image.open(img_path).resize((224, 224))\nimg_ycbcr = img.convert(\"YCbCr\")  # convert to YCbCr\nimg_y, img_cb, img_cr = img_ycbcr.split()\nx = np.array(img_y)[np.newaxis, np.newaxis, :, :]"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Compile the model with relay\n---------------------------------------------\nTypically ONNX models mix model input values with parameter values, with\nthe input having the name `1`. This model dependent, and you should check\nwith the documentation for your model to determine the full input and\nparameter name space.\n\nPassing in the shape dictionary to the `relay.frontend.from_onnx` method\ntells relay which ONNX parameters are inputs, and which are parameters, and\nprovides a [...]
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "target = \"llvm\"\n\ninput_name = \"1\"\nshape_dict = {input_name: x.shape}\nmod, params = relay.frontend.from_onnx(onnx_model, shape_dict)\n\nwith tvm.transform.PassContext(opt_level=1):\n    executor = relay.build_module.create_executor(\n        \"graph\", mod, tvm.cpu(0), target, params\n    ).evaluate()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Execute on TVM\n---------------------------------------------\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "dtype = \"float32\"\ntvm_output = executor(tvm.nd.array(x.astype(dtype))).numpy()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Display results\n---------------------------------------------\nWe put input and output image neck to neck. The luminance channel, `Y` is the output\nfrom the model. The chroma channels `Cb` and `Cr` are resized to match with a simple\nbicubic algorithm. The image is then recombined and converted back to `RGB`.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "from matplotlib import pyplot as plt\n\nout_y = Image.fromarray(np.uint8((tvm_output[0, 0]).clip(0, 255)), mode=\"L\")\nout_cb = img_cb.resize(out_y.size, Image.BICUBIC)\nout_cr = img_cr.resize(out_y.size, Image.BICUBIC)\nresult = Image.merge(\"YCbCr\", [out_y, out_cb, out_cr]).convert(\"RGB\")\ncanvas = np.full((672, 672 * 2, 3), 255)\ncanvas[0:224, 0:224, :] = np.asarray(img)\ncanvas[:, 672:, :] = np.asarray(result)\nplt.imshow(canvas.astype(np.uint8))\nplt.show()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Notes\n---------------------------------------------\nBy default, ONNX defines models in terms of dynamic shapes. The ONNX importer\nretains that dynamism upon import, and the compiler attempts to convert the model\ninto a static shapes at compile time. If this fails, there may still be dynamic\noperations in the model. Not all TVM kernels currently support dynamic shapes,\nplease file an issue on discuss.tvm.apache.org if you hit an error with dynamic kernels.\n\nThis particula [...]
+      ]
+    }
+  ],
+  "metadata": {
+    "kernelspec": {
+      "display_name": "Python 3",
+      "language": "python",
+      "name": "python3"
+    },
+    "language_info": {
+      "codemirror_mode": {
+        "name": "ipython",
+        "version": 3
+      },
+      "file_extension": ".py",
+      "mimetype": "text/x-python",
+      "name": "python",
+      "nbconvert_exporter": "python",
+      "pygments_lexer": "ipython3",
+      "version": "3.6.9"
+    }
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/docs/_downloads/5b32f1dc3e9e2fc5ac5be0918758b967/deploy_quantized.py b/docs/_downloads/7810ecf51bfc05f7d5e8a400ac3e815d/deploy_quantized.py
similarity index 100%
rename from docs/_downloads/5b32f1dc3e9e2fc5ac5be0918758b967/deploy_quantized.py
rename to docs/_downloads/7810ecf51bfc05f7d5e8a400ac3e815d/deploy_quantized.py
diff --git a/docs/_downloads/77322ea21ff00abad461e549895ef1d8/micro_reference_vm.py b/docs/_downloads/79027b28c061178b7ea56e3f047eeef1/micro_reference_vm.py
similarity index 100%
rename from docs/_downloads/77322ea21ff00abad461e549895ef1d8/micro_reference_vm.py
rename to docs/_downloads/79027b28c061178b7ea56e3f047eeef1/micro_reference_vm.py
diff --git a/docs/_downloads/beb2188d497d67b66bcfbc2c254dccb7/deploy_model_on_rasp.ipynb b/docs/_downloads/7c392f39b90d93406ef30c6185c5686c/deploy_model_on_rasp.ipynb
similarity index 100%
rename from docs/_downloads/beb2188d497d67b66bcfbc2c254dccb7/deploy_model_on_rasp.ipynb
rename to docs/_downloads/7c392f39b90d93406ef30c6185c5686c/deploy_model_on_rasp.ipynb
diff --git a/docs/_downloads/08e39628455fe618afd9eb5b958a433e/micro_reference_vm.ipynb b/docs/_downloads/7ef06253b3d2676eb50e20a5f81ef8f9/micro_reference_vm.ipynb
similarity index 100%
rename from docs/_downloads/08e39628455fe618afd9eb5b958a433e/micro_reference_vm.ipynb
rename to docs/_downloads/7ef06253b3d2676eb50e20a5f81ef8f9/micro_reference_vm.ipynb
diff --git a/docs/_downloads/7ef14586a3b62fe120d97d5fedf72879/use_pass_infra.ipynb b/docs/_downloads/7ef14586a3b62fe120d97d5fedf72879/use_pass_infra.ipynb
new file mode 100644
index 0000000..de27796
--- /dev/null
+++ b/docs/_downloads/7ef14586a3b62fe120d97d5fedf72879/use_pass_infra.ipynb
@@ -0,0 +1,241 @@
+{
+  "cells": [
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "%matplotlib inline"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "\n\nHow to Use TVM Pass Infra\n=========================\n**Author**: `Zhi Chen <https://github.com/zhiics>`_\n\nAs the number of optimization passes increases in Relay/tir, it becomes intractable to\nexecute them and maintain their dependencies manually. Therefore, we have\nintroduced an infrastructure to manage the optimization passes and make it\napplicable to different layers of the IR in the TVM stack.\n\nThe optimizations of a Relay/tir program could be applied at various  [...]
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "import numpy as np\nimport tvm\nfrom tvm import te\nimport tvm.relay as relay"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Create An Example Relay Program\n-------------------------------\nFirst of all, we create a simple Relay program for the tutorial. This program\nwill be used by various optimizations of the examples in this tutorial.\nSimilarly, users can write a tir primitive function and apply the tir passes.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "def example():\n    shape = (1, 64, 54, 54)\n    c_data = np.empty(shape).astype(\"float32\")\n    c = relay.const(c_data)\n    weight = relay.var(\"weight\", shape=(64, 64, 3, 3))\n    x = relay.var(\"x\", relay.TensorType((1, 64, 56, 56), \"float32\"))\n    conv = relay.nn.conv2d(x, weight)\n    y = relay.add(c, c)\n    y = relay.multiply(y, relay.const(2, \"float32\"))\n    y = relay.add(conv, y)\n    z = relay.add(y, c)\n    z1 = relay.add(y, c)\n    z2 = relay.add(z, z1)\n  [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Optimize the Program\n--------------------\nNow we would like to optimize the program. Relay features a host of\noptimizations. We will select some of them to apply on this example program.\n\nThere are multiple ways to optimize a Relay program. Below we will provide\nexamples for each of them.\n\nManually Apply Optimization Passes\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "# Let's first create a relay Module which contains one or multiple Relay\n# functions for optimization.\nf = example()\nmod = tvm.IRModule.from_expr(f)\n\n# Now we can apply constant folding on the module.\n# fold_const here is a callback that doesn't take any parameters.\nfold_const = relay.transform.FoldConstant()\n# Then, we can invoke the pass on the given module. Note that the constant\n# folding pass works at the function-level. That being said, each function in\n# the mod [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "More optimizations can be applied in the similar manner. For instance, we can\neliminate the common expressions that used by `z` and `z1`.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "mod = relay.transform.EliminateCommonSubexpr()(mod)\nprint(mod)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Some optimizations, such as fusion, are parameteric as well. For example,\nopt level 0 will not allow operators to be fused together. Users can pass the\n`fuse_opt_level` to enable this.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "mod = relay.transform.FuseOps(fuse_opt_level=0)(mod)\n\n# We can observe that the optimized module contains functions that only have\n# a signle primitive op.\nprint(mod)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Use Sequential to Apply a Sequence of Passes\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nApplying passes as above is actually tedious and it may require users to have\nbetter understanding about the dependencies between them. For example, fusion\ncurrently doesn't work well on let bindings. Therefore, we would not be able\nto fuse operators that were fusable if :py:func:`relay.transform.ToANormalForm` is applied before\nfusion, as this pass generates let bindings for each exp [...]
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "# Now let's execute some passes through :py:class:`tvm.transform.Sequential`\nf = example()\nmod = tvm.IRModule.from_expr(f)\n# Glob the interested passes.\nseq = tvm.transform.Sequential(\n    [\n        relay.transform.FoldConstant(),\n        relay.transform.EliminateCommonSubexpr(),\n        relay.transform.FuseOps(fuse_opt_level=2),\n    ]\n)\nmod1 = seq(mod)\nprint(mod1)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "From the transformed Relay program, we can see that there are still two\nidentical addition operations. This is because ``EliminateCommonSubexpr``\nwas not actually performed. The reason is because only the passes that have\noptimization level less or equal to 2 will be executed by default under\n:py:class:`tvm.transform.Sequential`. The pass infra,\nhowever, provides a configuration interface\nfor users to customize the optimization level that they want to execute.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "with tvm.transform.PassContext(opt_level=3):\n    mod2 = seq(mod)\nprint(mod2)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Now we can see that only one of the two identical additions is kept.\n\nIn addition, users can selectively disable some passes using the\n`disabled_pass` config, which is similar to the `-fno-xxx` option used the\ngeneral purpose compilers, such as Clang and GCC. For example, we can disable\nEliminateCommonSubexpr as following. The printed module will again show two\nidentical addition operations.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "with tvm.transform.PassContext(opt_level=3, disabled_pass=[\"EliminateCommonSubexpr\"]):\n    mod3 = seq(mod)\nprint(mod3)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Implement a Pass Using Python Decorator\n------------------------------------------\nThe next example illustrates how we can orchestrate a customized optimization\npipeline through the pass infra using Python decorators. This functionality\ngreatly eases the implementation of passes. For example, users can simply\ndefine a decorated class to do function-level optimizations as the following\nexample shows. `transform_function` wraps a class to replace all constants\nwith a multip [...]
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "@relay.transform.function_pass(opt_level=1)\nclass CustomPipeline:\n    \"\"\"Simple test function to replace one argument to another.\"\"\"\n\n    def __init__(self, multiplier):\n        self.multiplier = multiplier\n\n    # This function can define a pass.\n    def transform_function(self, func, mod, ctx):\n        obj = self\n\n        class ReplaceConstant(tvm.relay.ExprMutator):\n            def visit_constant(self, c):\n                return relay.multiply(obj.multiplier [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Debug a Pass\n------------\nTVM provides users a plug-and-play style debugging pass that print the IR\nafter a certain pass is done through a special pass (``PrintIR``) to dump the IR of the\nwhole module. A slightly modified version of the sequential pass example\ncould be like the following to enable IR dumping for ``FoldConstant`` optimization.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "f = example()\nmod = tvm.IRModule.from_expr(f)\nseq = tvm.transform.Sequential(\n    [\n        relay.transform.FoldConstant(),\n        tvm.transform.PrintIR(),\n        relay.transform.EliminateCommonSubexpr(),\n        relay.transform.FuseOps(),\n    ]\n)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "By inserting the ``PrintIR`` pass after ``FoldConstant``, the pass infra will\ndump out the module IR when ``FoldConstant`` is done. Users can plug in this\npass after any pass they want to debug for viewing the optimization effect.\n\nThere is a more flexible debugging mechanism. One can implement a ``PassInstrument``\nclass to execute arbitrary code not only before and/or after each pass but also\nat entering/exiting ``PassContext``. See `pass_instrument_cpp_backend`\nfor more [...]
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "@tvm.instrument.pass_instrument\nclass PrintIR:\n    \"\"\"Print the name of the pass, the IR, only before passes execute.\"\"\"\n\n    def run_before_pass(self, mod, info):\n        print(\"Running pass: {}\", info)\n        print(mod)\n\n\nwith tvm.transform.PassContext(opt_level=3, instruments=[PrintIR()]):\n    with tvm.target.Target(\"llvm\"):\n        # Perform the optimizations.\n        mod = seq(mod)\nprint(mod)\n\nprint(\"done\")"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Summary\n-------\nThis tutorial has covered how we can write and invoke passes in TVM more\nconveniently using the pass infra. Different ways of invoking a pass are also\ndisucssed. Using :py:class:`tvm.transform.Sequential` can largely help\nusers to ease the work of handling multiple optimization passes and their\ndependencies. In addition, an example is provided to illustrate\nhow we can debug a pass using the ``PrintIR`` and tracing.\n\n"
+      ]
+    }
+  ],
+  "metadata": {
+    "kernelspec": {
+      "display_name": "Python 3",
+      "language": "python",
+      "name": "python3"
+    },
+    "language_info": {
+      "codemirror_mode": {
+        "name": "ipython",
+        "version": 3
+      },
+      "file_extension": ".py",
+      "mimetype": "text/x-python",
+      "name": "python",
+      "nbconvert_exporter": "python",
+      "pygments_lexer": "ipython3",
+      "version": "3.6.9"
+    }
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/docs/_downloads/50b174352ccf0a0defcbd8e6b40145e2/from_tensorflow.py b/docs/_downloads/7f1d3d1b878694c201c614c807cdebc8/from_tensorflow.py
similarity index 100%
rename from docs/_downloads/50b174352ccf0a0defcbd8e6b40145e2/from_tensorflow.py
rename to docs/_downloads/7f1d3d1b878694c201c614c807cdebc8/from_tensorflow.py
diff --git a/docs/_downloads/67c18c78b0f12c3be5dc41b22637d719/matrix_multiply_opt.py b/docs/_downloads/822e9d945c0bbf1cf23fc4f53c1b7906/matrix_multiply_opt.py
similarity index 100%
rename from docs/_downloads/67c18c78b0f12c3be5dc41b22637d719/matrix_multiply_opt.py
rename to docs/_downloads/822e9d945c0bbf1cf23fc4f53c1b7906/matrix_multiply_opt.py
diff --git a/docs/_downloads/c316f4b828b813e437473ee752bacdf9/build_gcn.ipynb b/docs/_downloads/825671e45a9bdc4733400384984cd9dd/build_gcn.ipynb
similarity index 100%
rename from docs/_downloads/c316f4b828b813e437473ee752bacdf9/build_gcn.ipynb
rename to docs/_downloads/825671e45a9bdc4733400384984cd9dd/build_gcn.ipynb
diff --git a/docs/_downloads/f5b39ff89c432f7750c338ebf15407f6/vta_get_started.ipynb b/docs/_downloads/83b9961c758069912464db3443fffc06/vta_get_started.ipynb
similarity index 100%
rename from docs/_downloads/f5b39ff89c432f7750c338ebf15407f6/vta_get_started.ipynb
rename to docs/_downloads/83b9961c758069912464db3443fffc06/vta_get_started.ipynb
diff --git a/docs/_downloads/e09aef52edc37570c0178591a87d328c/from_tensorflow.ipynb b/docs/_downloads/83e3b018e8bac8d31bb331d200a33a04/from_tensorflow.ipynb
similarity index 100%
rename from docs/_downloads/e09aef52edc37570c0178591a87d328c/from_tensorflow.ipynb
rename to docs/_downloads/83e3b018e8bac8d31bb331d200a33a04/from_tensorflow.ipynb
diff --git a/docs/_downloads/8631d5082613ab80110d8237562cd480/extern_op.ipynb b/docs/_downloads/8472bea81cf679760d7e4e77e895726f/extern_op.ipynb
similarity index 100%
rename from docs/_downloads/8631d5082613ab80110d8237562cd480/extern_op.ipynb
rename to docs/_downloads/8472bea81cf679760d7e4e77e895726f/extern_op.ipynb
diff --git a/docs/_downloads/6748a8fb7e82692825b259c20af8372a/opt_conv_cuda.ipynb b/docs/_downloads/854257a66df713b1f3f82eb3577f95e3/opt_conv_cuda.ipynb
similarity index 100%
rename from docs/_downloads/6748a8fb7e82692825b259c20af8372a/opt_conv_cuda.ipynb
rename to docs/_downloads/854257a66df713b1f3f82eb3577f95e3/opt_conv_cuda.ipynb
diff --git a/docs/_downloads/143c743c62f58570eabd77fd3395ca8c/scan.py b/docs/_downloads/8c7d8fd6a4b93bcff1f5573943dd02f4/scan.py
similarity index 100%
rename from docs/_downloads/143c743c62f58570eabd77fd3395ca8c/scan.py
rename to docs/_downloads/8c7d8fd6a4b93bcff1f5573943dd02f4/scan.py
diff --git a/docs/_downloads/f96f5aca0e2b941b788322b5509ba2b6/autotvm_matmul_x86.py b/docs/_downloads/8e7bbc9dbdda76ac573b24606b41c006/autotvm_matmul_x86.py
similarity index 100%
rename from docs/_downloads/f96f5aca0e2b941b788322b5509ba2b6/autotvm_matmul_x86.py
rename to docs/_downloads/8e7bbc9dbdda76ac573b24606b41c006/autotvm_matmul_x86.py
diff --git a/docs/_downloads/b9891d1a23f84eec3271025d99d005f7/tune_relay_x86.ipynb b/docs/_downloads/910e6ecee4ecac8d8ca0baeb6d00689d/tune_relay_x86.ipynb
similarity index 100%
rename from docs/_downloads/b9891d1a23f84eec3271025d99d005f7/tune_relay_x86.ipynb
rename to docs/_downloads/910e6ecee4ecac8d8ca0baeb6d00689d/tune_relay_x86.ipynb
diff --git a/docs/_downloads/c4d683ae80a4b8a011286f239422638a/deploy_classification.ipynb b/docs/_downloads/95395e118195f25266654dd8fbf487d4/deploy_classification.ipynb
similarity index 100%
rename from docs/_downloads/c4d683ae80a4b8a011286f239422638a/deploy_classification.ipynb
rename to docs/_downloads/95395e118195f25266654dd8fbf487d4/deploy_classification.ipynb
diff --git a/docs/_downloads/836dc3852acf09662e9eb37c4c5e1e1b/opt_gemm.py b/docs/_downloads/96137df89d8034b548f407123ec50ce9/opt_gemm.py
similarity index 100%
rename from docs/_downloads/836dc3852acf09662e9eb37c4c5e1e1b/opt_gemm.py
rename to docs/_downloads/96137df89d8034b548f407123ec50ce9/opt_gemm.py
diff --git a/docs/_downloads/33a19782c8aaf9fc62e565c57df5caca/deploy_sparse.py b/docs/_downloads/9c3764c88ab3eb57dc223b4eda1e8a2f/deploy_sparse.py
similarity index 100%
rename from docs/_downloads/33a19782c8aaf9fc62e565c57df5caca/deploy_sparse.py
rename to docs/_downloads/9c3764c88ab3eb57dc223b4eda1e8a2f/deploy_sparse.py
diff --git a/docs/_downloads/9ccca8fd489a1486ac71b55a55c320c5/micro_autotune.py b/docs/_downloads/9ccca8fd489a1486ac71b55a55c320c5/micro_autotune.py
new file mode 100644
index 0000000..e7a1fa8
--- /dev/null
+++ b/docs/_downloads/9ccca8fd489a1486ac71b55a55c320c5/micro_autotune.py
@@ -0,0 +1,258 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+"""
+.. _tutorial-micro-autotune:
+
+Autotuning with micro TVM
+=========================
+**Authors**:
+`Andrew Reusch <https://github.com/areusch>`_,
+`Mehrdad Hessar <https://github.com/mehrdadh>`_
+
+This tutorial explains how to autotune a model using the C runtime.
+"""
+
+import numpy as np
+import subprocess
+import pathlib
+
+import tvm
+
+####################
+# Defining the model
+####################
+#
+# To begin with, define a model in Relay to be executed on-device. Then create an IRModule from relay model and
+# fill parameters with random numbers.
+#
+
+data_shape = (1, 3, 10, 10)
+weight_shape = (6, 3, 5, 5)
+
+data = tvm.relay.var("data", tvm.relay.TensorType(data_shape, "float32"))
+weight = tvm.relay.var("weight", tvm.relay.TensorType(weight_shape, "float32"))
+
+y = tvm.relay.nn.conv2d(
+    data,
+    weight,
+    padding=(2, 2),
+    kernel_size=(5, 5),
+    kernel_layout="OIHW",
+    out_dtype="float32",
+)
+f = tvm.relay.Function([data, weight], y)
+
+relay_mod = tvm.IRModule.from_expr(f)
+relay_mod = tvm.relay.transform.InferType()(relay_mod)
+
+weight_sample = np.random.rand(
+    weight_shape[0], weight_shape[1], weight_shape[2], weight_shape[3]
+).astype("float32")
+params = {"weight": weight_sample}
+
+#######################
+# Defining the target #
+#######################
+# Now we define the TVM target that describes the execution environment. This looks very similar
+# to target definitions from other microTVM tutorials.
+#
+# When running on physical hardware, choose a target and a board that
+# describe the hardware. There are multiple hardware targets that could be selected from
+# PLATFORM list in this tutorial. You can chose the platform by passing --platform argument when running
+# this tutorial.
+#
+TARGET = tvm.target.target.micro("host")
+
+# Compiling for physical hardware
+# --------------------------------------------------------------------------
+#  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The
+#  STM32L4R5ZI Nucleo target and board is chosen in the example below.
+#
+#    TARGET = tvm.target.target.micro("stm32l4r5zi")
+#    BOARD = "nucleo_l4r5zi"
+
+#########################
+# Extracting tuning tasks
+#########################
+# Not all operators in the Relay program printed above can be tuned. Some are so trivial that only
+# a single implementation is defined; others don't make sense as tuning tasks. Using
+# `extract_from_program`, you can produce a list of tunable tasks.
+#
+# Because task extraction involves running the compiler, we first configure the compiler's
+# transformation passes; we'll apply the same configuration later on during autotuning.
+
+pass_context = tvm.transform.PassContext(opt_level=3, config={"tir.disable_vectorize": True})
+with pass_context:
+    tasks = tvm.autotvm.task.extract_from_program(relay_mod["main"], {}, TARGET)
+assert len(tasks) > 0
+
+######################
+# Configuring microTVM
+######################
+# Before autotuning, we need to define a module loader and then pass that to
+# a `tvm.autotvm.LocalBuilder`. Then we create a `tvm.autotvm.LocalRunner` and use
+# both builder and runner to generates multiple measurements for auto tunner.
+#
+# In this tutorial, we have the option to use x86 host as an example or use different targets
+# from Zephyr RTOS. If you choose pass `--platform=host` to this tutorial it will uses x86. You can
+# choose other options by choosing from `PLATFORM` list.
+#
+
+repo_root = pathlib.Path(
+    subprocess.check_output(["git", "rev-parse", "--show-toplevel"], encoding="utf-8").strip()
+)
+
+module_loader = tvm.micro.AutoTvmModuleLoader(
+    template_project_dir=repo_root / "src" / "runtime" / "crt" / "host",
+    project_options={"verbose": False},
+)
+builder = tvm.autotvm.LocalBuilder(
+    n_parallel=1,
+    build_kwargs={"build_option": {"tir.disable_vectorize": True}},
+    do_fork=True,
+    build_func=tvm.micro.autotvm_build_func,
+)
+runner = tvm.autotvm.LocalRunner(number=1, repeat=1, timeout=100, module_loader=module_loader)
+
+measure_option = tvm.autotvm.measure_option(builder=builder, runner=runner)
+
+# Compiling for physical hardware
+# --------------------------------------------------------------------------
+#    module_loader = tvm.micro.AutoTvmModuleLoader(
+#        template_project_dir=repo_root / "apps" / "microtvm" / "zephyr" / "template_project",
+#        project_options={
+#            "zephyr_board": BOARD,
+#            "west_cmd": "west",
+#            "verbose": False,
+#            "project_type": "host_driven",
+#        },
+#    )
+#    builder = tvm.autotvm.LocalBuilder(
+#        n_parallel=1,
+#        build_kwargs={"build_option": {"tir.disable_vectorize": True}},
+#        do_fork=False,
+#        build_func=tvm.micro.autotvm_build_func,
+#    )
+#    runner = tvm.autotvm.LocalRunner(number=1, repeat=1, timeout=100, module_loader=module_loader)
+#
+#    measure_option = tvm.autotvm.measure_option(builder=builder, runner=runner)
+
+################
+# Run Autotuning
+################
+# Now we can run autotuning separately on each extracted task.
+
+num_trials = 10
+for task in tasks:
+    tuner = tvm.autotvm.tuner.GATuner(task)
+    tuner.tune(
+        n_trial=num_trials,
+        measure_option=measure_option,
+        callbacks=[
+            tvm.autotvm.callback.log_to_file("microtvm_autotune.log.txt"),
+            tvm.autotvm.callback.progress_bar(num_trials, si_prefix="M"),
+        ],
+        si_prefix="M",
+    )
+
+############################
+# Timing the untuned program
+############################
+# For comparison, let's compile and run the graph without imposing any autotuning schedules. TVM
+# will select a randomly-tuned implementation for each operator, which should not perform as well as
+# the tuned operator.
+
+with pass_context:
+    lowered = tvm.relay.build(relay_mod, target=TARGET, params=params)
+
+temp_dir = tvm.contrib.utils.tempdir()
+
+project = tvm.micro.generate_project(
+    str(repo_root / "src" / "runtime" / "crt" / "host"),
+    lowered,
+    temp_dir / "project",
+    {"verbose": False},
+)
+
+# Compiling for physical hardware
+# --------------------------------------------------------------------------
+#    project = tvm.micro.generate_project(
+#        str(repo_root / "apps" / "microtvm" / "zephyr" / "template_project"),
+#        lowered,
+#        temp_dir / "project",
+#        {
+#            "zephyr_board": BOARD,
+#            "west_cmd": "west",
+#            "verbose": False,
+#            "project_type": "host_driven",
+#        },
+#    )
+
+project.build()
+project.flash()
+with tvm.micro.Session(project.transport()) as session:
+    debug_module = tvm.micro.create_local_debug_executor(
+        lowered.get_graph_json(), session.get_system_lib(), session.device
+    )
+    debug_module.set_input(**lowered.get_params())
+    print("########## Build without Autotuning ##########")
+    debug_module.run()
+    del debug_module
+
+##########################
+# Timing the tuned program
+##########################
+# Once autotuning completes, you can time execution of the entire program using the Debug Runtime:
+
+with tvm.autotvm.apply_history_best("microtvm_autotune.log.txt"):
+    with pass_context:
+        lowered_tuned = tvm.relay.build(relay_mod, target=TARGET, params=params)
+
+temp_dir = tvm.contrib.utils.tempdir()
+
+project = tvm.micro.generate_project(
+    str(repo_root / "src" / "runtime" / "crt" / "host"),
+    lowered_tuned,
+    temp_dir / "project",
+    {"verbose": False},
+)
+
+# Compiling for physical hardware
+# --------------------------------------------------------------------------
+#    project = tvm.micro.generate_project(
+#        str(repo_root / "apps" / "microtvm" / "zephyr" / "template_project"),
+#        lowered_tuned,
+#        temp_dir / "project",
+#        {
+#            "zephyr_board": BOARD,
+#            "west_cmd": "west",
+#            "verbose": False,
+#            "project_type": "host_driven",
+#        },
+#    )
+
+project.build()
+project.flash()
+with tvm.micro.Session(project.transport()) as session:
+    debug_module = tvm.micro.create_local_debug_executor(
+        lowered_tuned.get_graph_json(), session.get_system_lib(), session.device
+    )
+    debug_module.set_input(**lowered_tuned.get_params())
+    print("########## Build with Autotuning ##########")
+    debug_module.run()
+    del debug_module
diff --git a/docs/_downloads/ef2454f5c8b007c53ff214943df808ad/deploy_classification.py b/docs/_downloads/9e8de33a5822b31748bfd76861009f92/deploy_classification.py
similarity index 100%
rename from docs/_downloads/ef2454f5c8b007c53ff214943df808ad/deploy_classification.py
rename to docs/_downloads/9e8de33a5822b31748bfd76861009f92/deploy_classification.py
diff --git a/docs/_downloads/ea5735ab0fc6252b8d1a381f756a9290/introduction.ipynb b/docs/_downloads/9f81bc348ac4107d0670f512b8943a99/introduction.ipynb
similarity index 100%
rename from docs/_downloads/ea5735ab0fc6252b8d1a381f756a9290/introduction.ipynb
rename to docs/_downloads/9f81bc348ac4107d0670f512b8943a99/introduction.ipynb
diff --git a/docs/_downloads/9fc6ca792ca6e47e4bdc761ee1b98501/use_pass_infra.py b/docs/_downloads/9fc6ca792ca6e47e4bdc761ee1b98501/use_pass_infra.py
deleted file mode 100644
index 468c4d4..0000000
--- a/docs/_downloads/9fc6ca792ca6e47e4bdc761ee1b98501/use_pass_infra.py
+++ /dev/null
@@ -1,303 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# pylint: disable=line-too-long
-"""
-.. _tutorial-use-pass-infra:
-
-How to Use TVM Pass Infra
-=========================
-**Author**: `Zhi Chen <https://github.com/zhiics>`_
-
-As the number of optimization passes increases in Relay/tir, it becomes intractable to
-execute them and maintain their dependencies manually. Therefore, we have
-introduced an infrastructure to manage the optimization passes and make it
-applicable to different layers of the IR in the TVM stack.
-
-The optimizations of a Relay/tir program could be applied at various granularity,
-namely function-level and module-level using :py:class:`tvm.relay.transform.FunctionPass`/
-:py:class:`tvm.tir.transform.PrimFuncPass` and :py:class:`tvm.transform.ModulePass`
-respectively. Or users can rely on :py:class:`tvm.transform.Sequential` to apply a sequence of passes
-on a Relay/tir program where the dependencies between passes can be resolved by the
-pass infra. For more details about each type of these passes, please refer to
-the :ref:`pass-infra`
-
-This tutorial mainly demostrates how developers can use the pass infra to perform
-a certain optimization and create an optimization pipeline for a Relay program.
-The same approach can be used for tir as well.
-"""
-
-import numpy as np
-import tvm
-from tvm import te
-import tvm.relay as relay
-
-###############################################################################
-# Create An Example Relay Program
-# -------------------------------
-# First of all, we create a simple Relay program for the tutorial. This program
-# will be used by various optimizations of the examples in this tutorial.
-# Similarly, users can write a tir primitive function and apply the tir passes.
-
-
-def example():
-    shape = (1, 64, 54, 54)
-    c_data = np.empty(shape).astype("float32")
-    c = relay.const(c_data)
-    weight = relay.var("weight", shape=(64, 64, 3, 3))
-    x = relay.var("x", relay.TensorType((1, 64, 56, 56), "float32"))
-    conv = relay.nn.conv2d(x, weight)
-    y = relay.add(c, c)
-    y = relay.multiply(y, relay.const(2, "float32"))
-    y = relay.add(conv, y)
-    z = relay.add(y, c)
-    z1 = relay.add(y, c)
-    z2 = relay.add(z, z1)
-    return relay.Function([x, weight], z2)
-
-
-###############################################################################
-# Let us register layout alteration for a conv2d op so that we can apply the
-# layout alteration pass on the example. How alter layout pass works is out
-# the scope of this tutorial.
-
-
-@relay.op.register_alter_op_layout("nn.conv2d", level=101)
-def alter_conv2d(attrs, inputs, tinfos, out_type):
-    data, weight = inputs
-    new_attrs = dict(attrs)
-    new_attrs["data_layout"] = "NCHW16c"
-    return relay.nn.conv2d(data, weight, **new_attrs)
-
-
-###############################################################################
-# Optimize the Program
-# --------------------
-# Now we would like to optimize the program. Relay features a host of
-# optimizations. We will select some of them to apply on this example program.
-#
-# There are multiple ways to optimize a Relay program. Below we will provide
-# examples for each of them.
-#
-# Manually Apply Optimization Passes
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-# Let's first create a relay Module which contains one or multiple Relay
-# functions for optimization.
-f = example()
-mod = tvm.IRModule.from_expr(f)
-
-# Now we can apply constant folding on the module.
-# fold_const here is a callback that doesn't take any parameters.
-fold_const = relay.transform.FoldConstant()
-# Then, we can invoke the pass on the given module. Note that the constant
-# folding pass works at the function-level. That being said, each function in
-# the module will be applied with the optimization. Users don't need to iterate
-# through individual functions manually to apply this pass.
-mod = fold_const(mod)
-# We can see from the updated program that the constants are folded.
-print(mod)
-
-###############################################################################
-# More optimizations can be applied in the similar manner. For instance, we can
-# eliminate the common expressions that used by `z` and `z1`.
-mod = relay.transform.EliminateCommonSubexpr()(mod)
-print(mod)
-
-###############################################################################
-# Some optimizations, such as fusion, are parameteric as well. For example,
-# opt level 0 will not allow operators to be fused together. Users can pass the
-# `fuse_opt_level` to enable this.
-mod = relay.transform.FuseOps(fuse_opt_level=0)(mod)
-
-# We can observe that the optimized module contains functions that only have
-# a signle primitive op.
-print(mod)
-
-###############################################################################
-# Use Sequential to Apply a Sequence of Passes
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# Applying passes as above is actually tedious and it may require users to have
-# better understanding about the dependencies between them. For example, fusion
-# currently doesn't work well on let bindings. Therefore, we would not be able
-# to fuse operators that were fusable if :py:func:`relay.transform.ToANormalForm` is applied before
-# fusion, as this pass generates let bindings for each expression to
-# canonicalize a Relay program.
-#
-# Relay, hence, provides :py:class:`tvm.transform.Sequential` to alleviate developers from handling
-# these issues explicitly by specifying the required passes of each pass and
-# packing them as a whole to execute. For example, the same passes can now be
-# applied using the sequential style as the following. :py:class:`tvm.transform.Sequential` is
-# similiar to `torch.nn.sequential <https://pytorch.org/docs/stable/nn.html#torch.nn.Sequential>`_
-# and `mxnet.gluon.block <https://mxnet.apache.org/api/python/docs/_modules/mxnet/gluon/block.html>`_.
-# For example, `torch.nn.sequential` is used to contain a sequence of PyTorch
-# `Modules` that will be added to build a network. It focuses on the network
-# layers. Instead, the :py:class:`tvm.transform.Sequential` in our pass infra works on the optimizing
-# pass.
-
-# Now let's execute some passes through :py:class:`tvm.transform.Sequential`
-f = example()
-mod = tvm.IRModule.from_expr(f)
-# Glob the interested passes.
-seq = tvm.transform.Sequential(
-    [
-        relay.transform.FoldConstant(),
-        relay.transform.EliminateCommonSubexpr(),
-        relay.transform.FuseOps(fuse_opt_level=2),
-    ]
-)
-mod1 = seq(mod)
-print(mod1)
-
-###############################################################################
-# From the transformed Relay program, we can see that there are still two
-# identical addition operations. This is because ``EliminateCommonSubexpr``
-# was not actually performed. The reason is because only the passes that have
-# optimization level less or equal to 2 will be executed by default under
-# :py:class:`tvm.transform.Sequential`. The pass infra,
-# however, provides a configuration interface
-# for users to customize the optimization level that they want to execute.
-
-with tvm.transform.PassContext(opt_level=3):
-    mod2 = seq(mod)
-print(mod2)
-
-###############################################################################
-# Now we can see that only one of the two identical additions is kept.
-#
-# In addition, users can selectively disable some passes using the
-# `disabled_pass` config, which is similar to the `-fno-xxx` option used the
-# general purpose compilers, such as Clang and GCC. For example, we can disable
-# EliminateCommonSubexpr as following. The printed module will again show two
-# identical addition operations.
-
-with tvm.transform.PassContext(opt_level=3, disabled_pass=["EliminateCommonSubexpr"]):
-    mod3 = seq(mod)
-print(mod3)
-
-###############################################################################
-# The passes applied so far are target independent. The pass infra also
-# provides a means to make pass target-aware. For example, the layout
-# alteration pass falls in such category.
-
-with tvm.transform.PassContext(opt_level=3):
-    mod4 = seq(mod)
-print(mod4)
-
-seq1 = tvm.transform.Sequential([relay.transform.AlterOpLayout()])
-with tvm.transform.PassContext(opt_level=3):
-    with tvm.target.Target("llvm"):
-        mod5 = seq1(mod)
-print(mod5)
-
-##############################################################################
-# Implement a Pass Using Python Decorator
-# ------------------------------------------
-# The next example illustrates how we can orchestrate a customized optimization
-# pipeline through the pass infra using Python decorators. This functionality
-# greatly eases the implementation of passes. For example, users can simply
-# define a decorated class to do function-level optimizations as the following
-# example shows. `transform_function` wraps a class to replace all constants
-# with a multiple of `c`. Later on, each function in a given module will be
-# visited and each constant in the function will be replaced when we invoke the
-# customized pass.
-
-
-@relay.transform.function_pass(opt_level=1)
-class CustomPipeline:
-    """Simple test function to replace one argument to another."""
-
-    def __init__(self, multiplier):
-        self.multiplier = multiplier
-
-    # This function can define a pass.
-    def transform_function(self, func, mod, ctx):
-        obj = self
-
-        class ReplaceConstant(tvm.relay.ExprMutator):
-            def visit_constant(self, c):
-                return relay.multiply(obj.multiplier, c)
-
-        return ReplaceConstant().visit(func)
-
-
-f = example()
-mod = tvm.IRModule.from_expr(f)
-custom_pass = CustomPipeline(multiplier=relay.const(3, "float32"))
-assert custom_pass.info.name == "CustomPipeline"
-mod3 = custom_pass(mod)
-print(mod3)
-
-##############################################################################
-# Debug a Pass
-# ------------
-# TVM provides users a plug-and-play style debugging pass that print the IR
-# after a certain pass is done through a special pass (``PrintIR``) to dump the IR of the
-# whole module. A slightly modified version of the sequential pass example
-# could be like the following to enable IR dumping for ``FoldConstant`` optimization.
-
-f = example()
-mod = tvm.IRModule.from_expr(f)
-seq = tvm.transform.Sequential(
-    [
-        relay.transform.FoldConstant(),
-        tvm.transform.PrintIR(),
-        relay.transform.EliminateCommonSubexpr(),
-        relay.transform.FuseOps(),
-        relay.transform.AlterOpLayout(),
-    ]
-)
-
-###############################################################################
-# By inserting the ``PrintIR`` pass after ``FoldConstant``, the pass infra will
-# dump out the module IR when ``FoldConstant`` is done. Users can plug in this
-# pass after any pass they want to debug for viewing the optimization effect.
-#
-# There is a more flexible debugging mechanism. One can implement a ``PassInstrument``
-# class to execute arbitrary code not only before and/or after each pass but also
-# at entering/exiting ``PassContext``. See :ref:`pass_instrument_cpp_backend`
-# for more details.
-#
-# Here we use :py::func`tvm.instrument.pass_instrument` decorator to implement
-# a PassInsturment class printing IR before execution of each passes:
-
-
-@tvm.instrument.pass_instrument
-class PrintIR:
-    """Print the name of the pass, the IR, only before passes execute."""
-
-    def run_before_pass(self, mod, info):
-        print("Running pass: {}", info)
-        print(mod)
-
-
-with tvm.transform.PassContext(opt_level=3, instruments=[PrintIR()]):
-    with tvm.target.Target("llvm"):
-        # Perform the optimizations.
-        mod = seq(mod)
-print(mod)
-
-print("done")
-
-##############################################################################
-# Summary
-# -------
-# This tutorial has covered how we can write and invoke passes in TVM more
-# conveniently using the pass infra. Different ways of invoking a pass are also
-# disucssed. Using :py:class:`tvm.transform.Sequential` can largely help
-# users to ease the work of handling multiple optimization passes and their
-# dependencies. In addition, an example is provided to illustrate
-# how we can debug a pass using the ``PrintIR`` and tracing.
diff --git a/docs/_downloads/00a1355fcb7c30e9e70fc8fefc708f98/tuple_inputs.ipynb b/docs/_downloads/a1417396e306d987107a7a39376ec261/tuple_inputs.ipynb
similarity index 100%
rename from docs/_downloads/00a1355fcb7c30e9e70fc8fefc708f98/tuple_inputs.ipynb
rename to docs/_downloads/a1417396e306d987107a7a39376ec261/tuple_inputs.ipynb
diff --git a/docs/_downloads/4f4a49a5483a0d0aa4af30f58c3c8664/deploy_quantized.ipynb b/docs/_downloads/a269cb38341b190be980a0bd3ea8a625/deploy_quantized.ipynb
similarity index 100%
rename from docs/_downloads/4f4a49a5483a0d0aa4af30f58c3c8664/deploy_quantized.ipynb
rename to docs/_downloads/a269cb38341b190be980a0bd3ea8a625/deploy_quantized.ipynb
diff --git a/docs/_downloads/a608d8b69371e9bc149dd89f6db2c38e/from_paddle.ipynb b/docs/_downloads/a608d8b69371e9bc149dd89f6db2c38e/from_paddle.ipynb
new file mode 100644
index 0000000..22039cb
--- /dev/null
+++ b/docs/_downloads/a608d8b69371e9bc149dd89f6db2c38e/from_paddle.ipynb
@@ -0,0 +1,144 @@
+{
+  "cells": [
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "%matplotlib inline"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "\nCompile PaddlePaddle Models\n===========================\n**Author**: `Ziyuan Ma <https://github.com/ZiyuanMa/>`_\n\nThis article is an introductory tutorial to deploy PaddlePaddle models with Relay.\nFor us to begin with, PaddlePaddle>=2.1.3 is required to be installed.\nA quick solution is\n\n.. code-block:: bash\n\n    pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple\n\nor please refer to official site.\nhttps://www.paddlepaddle.org.cn/install/quick?docurl=/ [...]
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "import tarfile\nimport paddle\nimport numpy as np\nimport tvm\nfrom tvm import relay\nfrom tvm.contrib.download import download_testdata"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Load pretrained ResNet50 model\n---------------------------------------------\nWe load a pretrained ResNet50 provided by PaddlePaddle.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "url = \"https://bj.bcebos.com/x2paddle/models/paddle_resnet50.tar\"\nmodel_path = download_testdata(url, \"paddle_resnet50.tar\", module=\"model\")\n\nwith tarfile.open(model_path) as tar:\n    names = tar.getnames()\n    for name in names:\n        tar.extract(name, \"./\")\n\nmodel = paddle.jit.load(\"./paddle_resnet50/model\")"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Load a test image\n---------------------------------------------\nA single cat dominates the examples!\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "from PIL import Image\nimport paddle.vision.transforms as T\n\n\ntransforms = T.Compose(\n    [\n        T.Resize((256, 256)),\n        T.CenterCrop(224),\n        T.ToTensor(),\n        T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n    ]\n)\n\nimg_url = \"https://github.com/dmlc/mxnet.js/blob/main/data/cat.png?raw=true\"\nimg_path = download_testdata(img_url, \"cat.png\", module=\"data\")\nimg = Image.open(img_path).resize((224, 224))\n\nimg = transforms( [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Compile the model with relay\n---------------------------------------------\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "target = \"llvm\"\nshape_dict = {\"inputs\": img.shape}\nmod, params = relay.frontend.from_paddle(model, shape_dict)\n\nwith tvm.transform.PassContext(opt_level=3):\n    executor = relay.build_module.create_executor(\n        \"graph\", mod, tvm.cpu(0), target, params\n    ).evaluate()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Execute on TVM\n---------------------------------------------\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "dtype = \"float32\"\ntvm_output = executor(tvm.nd.array(img.astype(dtype))).numpy()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Look up synset name\n---------------------------------------------\nLook up prediction top 1 index in 1000 class synset.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "synset_url = \"\".join(\n    [\n        \"https://gist.githubusercontent.com/zhreshold/\",\n        \"4d0b62f3d01426887599d4f7ede23ee5/raw/\",\n        \"596b27d23537e5a1b5751d2b0481ef172f58b539/\",\n        \"imagenet1000_clsid_to_human.txt\",\n    ]\n)\nsynset_name = \"imagenet1000_clsid_to_human.txt\"\nsynset_path = download_testdata(synset_url, synset_name, module=\"data\")\nwith open(synset_path) as f:\n    synset = f.readlines()\n\ntop1 = np.argmax(tvm_output[0])\nprint(f\ [...]
+      ]
+    }
+  ],
+  "metadata": {
+    "kernelspec": {
+      "display_name": "Python 3",
+      "language": "python",
+      "name": "python3"
+    },
+    "language_info": {
+      "codemirror_mode": {
+        "name": "ipython",
+        "version": 3
+      },
+      "file_extension": ".py",
+      "mimetype": "text/x-python",
+      "name": "python",
+      "nbconvert_exporter": "python",
+      "pygments_lexer": "ipython3",
+      "version": "3.6.9"
+    }
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/docs/_downloads/02fc8627299fa0b05eb017773b471bfa/from_tflite.py b/docs/_downloads/a70662bf8dc171d3d17a3945bbbb02e3/from_tflite.py
similarity index 100%
rename from docs/_downloads/02fc8627299fa0b05eb017773b471bfa/from_tflite.py
rename to docs/_downloads/a70662bf8dc171d3d17a3945bbbb02e3/from_tflite.py
diff --git a/docs/_downloads/a2f661bf234a167b5458fa28d8fafedc/tedd.ipynb b/docs/_downloads/a7aff5918e1b86809a5bd1da8bef7229/tedd.ipynb
similarity index 100%
rename from docs/_downloads/a2f661bf234a167b5458fa28d8fafedc/tedd.ipynb
rename to docs/_downloads/a7aff5918e1b86809a5bd1da8bef7229/tedd.ipynb
diff --git a/docs/_downloads/2f6dcf56b15f857f94b6d320c1ace6e5/from_coreml.ipynb b/docs/_downloads/a883b8474634054b6a79c17a288aa8ed/from_coreml.ipynb
similarity index 100%
rename from docs/_downloads/2f6dcf56b15f857f94b6d320c1ace6e5/from_coreml.ipynb
rename to docs/_downloads/a883b8474634054b6a79c17a288aa8ed/from_coreml.ipynb
diff --git a/docs/_downloads/afa7f0ecb19178546f310a1dfa66281f/tune_network_x86.ipynb b/docs/_downloads/ad2a7f55d615d188ad664d56696815a6/tune_network_x86.ipynb
similarity index 100%
rename from docs/_downloads/afa7f0ecb19178546f310a1dfa66281f/tune_network_x86.ipynb
rename to docs/_downloads/ad2a7f55d615d188ad664d56696815a6/tune_network_x86.ipynb
diff --git a/docs/_downloads/dad91669fd0ea707f1374fe331b0dffe/tune_network_cuda.ipynb b/docs/_downloads/af264436d049e3cd84803b67b6620b63/tune_network_cuda.ipynb
similarity index 100%
rename from docs/_downloads/dad91669fd0ea707f1374fe331b0dffe/tune_network_cuda.ipynb
rename to docs/_downloads/af264436d049e3cd84803b67b6620b63/tune_network_cuda.ipynb
diff --git a/docs/_downloads/bfe6d0353011c263c40646792b85a5d6/bring_your_own_datatypes.ipynb b/docs/_downloads/b11795df0596a55e4982bf895d0c8c38/bring_your_own_datatypes.ipynb
similarity index 100%
rename from docs/_downloads/bfe6d0353011c263c40646792b85a5d6/bring_your_own_datatypes.ipynb
rename to docs/_downloads/b11795df0596a55e4982bf895d0c8c38/bring_your_own_datatypes.ipynb
diff --git a/docs/_downloads/48bd751ebaae08fce134e559f86a25cc/tune_relay_vta.ipynb b/docs/_downloads/b1b0cbd807166348a0eabbad6bfbbdaf/tune_relay_vta.ipynb
similarity index 100%
rename from docs/_downloads/48bd751ebaae08fce134e559f86a25cc/tune_relay_vta.ipynb
rename to docs/_downloads/b1b0cbd807166348a0eabbad6bfbbdaf/tune_relay_vta.ipynb
diff --git a/docs/_downloads/c634482de86bbc712f15077b3ec3a92f/convolution_opt.ipynb b/docs/_downloads/b3f997c945cc7de3e03a1e0c4c73fabd/convolution_opt.ipynb
similarity index 100%
rename from docs/_downloads/c634482de86bbc712f15077b3ec3a92f/convolution_opt.ipynb
rename to docs/_downloads/b3f997c945cc7de3e03a1e0c4c73fabd/convolution_opt.ipynb
diff --git a/docs/_downloads/64a7765a4ac55f228cf82b8462944a61/schedule_primitives.ipynb b/docs/_downloads/b78f1a6e1b2c2fb073a791dc258a1d7d/schedule_primitives.ipynb
similarity index 100%
rename from docs/_downloads/64a7765a4ac55f228cf82b8462944a61/schedule_primitives.ipynb
rename to docs/_downloads/b78f1a6e1b2c2fb073a791dc258a1d7d/schedule_primitives.ipynb
diff --git a/docs/_downloads/f8f7a2adf30f5033603d79cdbacd9235/tune_relay_arm.ipynb b/docs/_downloads/bc33c0d33026b287306b6ead1a50b04a/tune_relay_arm.ipynb
similarity index 100%
rename from docs/_downloads/f8f7a2adf30f5033603d79cdbacd9235/tune_relay_arm.ipynb
rename to docs/_downloads/bc33c0d33026b287306b6ead1a50b04a/tune_relay_arm.ipynb
diff --git a/docs/_downloads/78da213eae381b8ff94cc356ee7c5423/deploy_prequantized.ipynb b/docs/_downloads/c20f81a94729f461f33b52cc110fd9d6/deploy_prequantized.ipynb
similarity index 100%
rename from docs/_downloads/78da213eae381b8ff94cc356ee7c5423/deploy_prequantized.ipynb
rename to docs/_downloads/c20f81a94729f461f33b52cc110fd9d6/deploy_prequantized.ipynb
diff --git a/docs/_downloads/f59fd8b968f7dcde34ed872c8527c192/from_keras.py b/docs/_downloads/c23f7654585d9b0fa2129e1765b2a8f2/from_keras.py
similarity index 100%
rename from docs/_downloads/f59fd8b968f7dcde34ed872c8527c192/from_keras.py
rename to docs/_downloads/c23f7654585d9b0fa2129e1765b2a8f2/from_keras.py
diff --git a/docs/_downloads/9a950897eeef498440fbe2f0afe2601f/tedd.py b/docs/_downloads/c253040abc62eace272e406b7e1a4df5/tedd.py
similarity index 100%
rename from docs/_downloads/9a950897eeef498440fbe2f0afe2601f/tedd.py
rename to docs/_downloads/c253040abc62eace272e406b7e1a4df5/tedd.py
diff --git a/docs/_downloads/2e974b05b6d59fcf944f96d27106b994/from_keras.ipynb b/docs/_downloads/c82f632d47458e76d2af9821b6778e36/from_keras.ipynb
similarity index 100%
rename from docs/_downloads/2e974b05b6d59fcf944f96d27106b994/from_keras.ipynb
rename to docs/_downloads/c82f632d47458e76d2af9821b6778e36/from_keras.ipynb
diff --git a/docs/_downloads/9cf0213876be0a9cc4aaa52a1ebd9586/low_level_custom_pass.py b/docs/_downloads/caa649473e845a115a0397a2855fd356/low_level_custom_pass.py
similarity index 100%
rename from docs/_downloads/9cf0213876be0a9cc4aaa52a1ebd9586/low_level_custom_pass.py
rename to docs/_downloads/caa649473e845a115a0397a2855fd356/low_level_custom_pass.py
diff --git a/docs/_downloads/6a91d98d4242322072303282a1f2de9c/relay_quick_start.py b/docs/_downloads/cc6d9aebd24d54d81752590cbc8f99f9/relay_quick_start.py
similarity index 100%
rename from docs/_downloads/6a91d98d4242322072303282a1f2de9c/relay_quick_start.py
rename to docs/_downloads/cc6d9aebd24d54d81752590cbc8f99f9/relay_quick_start.py
diff --git a/docs/_downloads/ca08de6c440df207921d807474d26f06/deploy_ssd_gluoncv.py b/docs/_downloads/cccb17d28e5e8b2e94ea8cd5ec59f6ed/deploy_ssd_gluoncv.py
similarity index 100%
rename from docs/_downloads/ca08de6c440df207921d807474d26f06/deploy_ssd_gluoncv.py
rename to docs/_downloads/cccb17d28e5e8b2e94ea8cd5ec59f6ed/deploy_ssd_gluoncv.py
diff --git a/docs/_downloads/cd8ac9c09164cc04dd9ecd131c536680/micro_tflite.ipynb b/docs/_downloads/cd8ac9c09164cc04dd9ecd131c536680/micro_tflite.ipynb
deleted file mode 100644
index c501c8b..0000000
--- a/docs/_downloads/cd8ac9c09164cc04dd9ecd131c536680/micro_tflite.ipynb
+++ /dev/null
@@ -1,169 +0,0 @@
-{
-  "cells": [
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "%matplotlib inline"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "\nmicroTVM with TFLite Models\n===========================\n**Author**: `Tom Gall <https://github.com/tom-gall>`_\n\nThis tutorial is an introduction to working with microTVM and a TFLite\nmodel with Relay.\n\n"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "<div class=\"alert alert-info\"><h4>Note</h4><p>If you want to run this tutorial on the microTVM Reference VM, download the Jupyter\n    notebook using the link at the bottom of this page and save it into the TVM directory. Then:\n\n    #. Login to the reference VM with a modified ``vagrant ssh`` command:\n\n        ``$ vagrant ssh -- -L8888:localhost:8888``\n\n    #. Install jupyter:  ``pip install jupyterlab``\n    #. ``cd`` to the TVM directory.\n    #. Install tflite: poetry [...]
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "import os\nimport numpy as np\nimport logging\n\nimport tvm\nimport tvm.micro as micro\nfrom tvm.contrib.download import download_testdata\nfrom tvm.contrib import graph_executor, utils\nfrom tvm import relay\n\nmodel_url = \"https://people.linaro.org/~tom.gall/sine_model.tflite\"\nmodel_file = \"sine_model.tflite\"\nmodel_path = download_testdata(model_url, model_file, module=\"data\")\n\ntflite_model_buf = open(model_path, \"rb\").read()"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Using the buffer, transform into a tflite model python object\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "try:\n    import tflite\n\n    tflite_model = tflite.Model.GetRootAsModel(tflite_model_buf, 0)\nexcept AttributeError:\n    import tflite.Model\n\n    tflite_model = tflite.Model.Model.GetRootAsModel(tflite_model_buf, 0)"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Print out the version of the model\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "version = tflite_model.Version()\nprint(\"Model Version: \" + str(version))"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Parse the python model object to convert it into a relay module\nand weights.\nIt is important to note that the input tensor name must match what\nis contained in the model.\n\nIf you are unsure what that might be, this can be discovered by using\nthe ``visualize.py`` script within the Tensorflow project.\nSee `How do I inspect a .tflite file? <https://www.tensorflow.org/lite/guide/faq>`_\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "input_tensor = \"dense_4_input\"\ninput_shape = (1,)\ninput_dtype = \"float32\"\n\nmod, params = relay.frontend.from_tflite(\n    tflite_model, shape_dict={input_tensor: input_shape}, dtype_dict={input_tensor: input_dtype}\n)"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Defining the target\n-------------------\n\nNow we create a build config for relay, turning off two options and then calling relay.build which\nwill result in a C source file for the selected TARGET. When running on a simulated target of the\nsame architecture as the host (where this Python script is executed) choose \"host\" below for the\nTARGET and a proper board/VM to run it (Zephyr will create the right QEMU VM based on BOARD. In\nthe example below the x86 arch is selected  [...]
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "TARGET = tvm.target.target.micro(\"host\")\nBOARD = \"qemu_x86\"\n#\n# Compiling for physical hardware\n#  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The\n#  STM32F746 Nucleo target and board is chosen in the example below. Another option would be to\n#  choose the STM32F746 Discovery board instead. Since that board has the same MCU as the Nucleo\n#  board but a couple of wirings and configs differ, it's necessary to select the \"s [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Now, compile the model for the target:\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "with tvm.transform.PassContext(\n    opt_level=3, config={\"tir.disable_vectorize\": True}, disabled_pass=[\"FuseOps\", \"AlterOpLayout\"]\n):\n    module = relay.build(mod, target=TARGET, params=params)\n\n\n# Inspecting the compilation output\n# ---------------------------------\n#\n# The compilation process has produced some C code implementing the operators in this graph. We\n# can inspect it by printing the CSourceModule contents (for the purposes of this tutorial, let's\n# [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Next, establish a session with the simulated device and run the\ncomputation. The `with session` line would typically flash an attached\nmicrocontroller, but in this tutorial, it simply launches a subprocess\nto stand in for an attached microcontroller.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "with tvm.micro.Session(transport_context_manager=generated_project.transport()) as session:\n    graph_mod = tvm.micro.create_local_graph_executor(\n        module.get_graph_json(), session.get_system_lib(), session.device\n    )\n\n    # Set the model parameters using the lowered parameters produced by `relay.build`.\n    graph_mod.set_input(**module.get_params())\n\n    # The model consumes a single float32 value and returns a predicted sine value.  To pass the\n    # input va [...]
-      ]
-    }
-  ],
-  "metadata": {
-    "kernelspec": {
-      "display_name": "Python 3",
-      "language": "python",
-      "name": "python3"
-    },
-    "language_info": {
-      "codemirror_mode": {
-        "name": "ipython",
-        "version": 3
-      },
-      "file_extension": ".py",
-      "mimetype": "text/x-python",
-      "name": "python",
-      "nbconvert_exporter": "python",
-      "pygments_lexer": "ipython3",
-      "version": "3.6.9"
-    }
-  },
-  "nbformat": 4,
-  "nbformat_minor": 0
-}
\ No newline at end of file
diff --git a/docs/_downloads/c7e35df75284dd5c95705bea6a409f3e/use_pass_instrument.py b/docs/_downloads/d0a1817b910da958b41d88afe4d4952d/use_pass_instrument.py
similarity index 100%
rename from docs/_downloads/c7e35df75284dd5c95705bea6a409f3e/use_pass_instrument.py
rename to docs/_downloads/d0a1817b910da958b41d88afe4d4952d/use_pass_instrument.py
diff --git a/docs/_downloads/739deb9ab034a5315ce6ba6bf7e5ff44/tune_relay_cuda.ipynb b/docs/_downloads/d1434e80dd27eef6b1c9cbaa13f1197b/tune_relay_cuda.ipynb
similarity index 100%
rename from docs/_downloads/739deb9ab034a5315ce6ba6bf7e5ff44/tune_relay_cuda.ipynb
rename to docs/_downloads/d1434e80dd27eef6b1c9cbaa13f1197b/tune_relay_cuda.ipynb
diff --git a/docs/_downloads/bba10250678e70879823196c946734fc/vta_get_started.py b/docs/_downloads/d2434fbd36b5bd5a93a69ca80465d5b6/vta_get_started.py
similarity index 100%
rename from docs/_downloads/bba10250678e70879823196c946734fc/vta_get_started.py
rename to docs/_downloads/d2434fbd36b5bd5a93a69ca80465d5b6/vta_get_started.py
diff --git a/docs/_downloads/e87c21d127b0b825efcf978b9f8e2cd7/low_level_custom_pass.ipynb b/docs/_downloads/d58ec306b89044968adefb49e6552378/low_level_custom_pass.ipynb
similarity index 100%
rename from docs/_downloads/e87c21d127b0b825efcf978b9f8e2cd7/low_level_custom_pass.ipynb
rename to docs/_downloads/d58ec306b89044968adefb49e6552378/low_level_custom_pass.ipynb
diff --git a/docs/_downloads/612f9e42b0247df5c8ab277534e2af65/tune_relay_vta.py b/docs/_downloads/d7b7e50e9f5b4ff04d55a56e52314c71/tune_relay_vta.py
similarity index 100%
rename from docs/_downloads/612f9e42b0247df5c8ab277534e2af65/tune_relay_vta.py
rename to docs/_downloads/d7b7e50e9f5b4ff04d55a56e52314c71/tune_relay_vta.py
diff --git a/docs/_downloads/48779ddff800bd9d4b8b3bd7ef8f054c/using_external_lib.py b/docs/_downloads/d8509b0a8e7db9031303c1a1f6fd1e70/using_external_lib.py
similarity index 100%
rename from docs/_downloads/48779ddff800bd9d4b8b3bd7ef8f054c/using_external_lib.py
rename to docs/_downloads/d8509b0a8e7db9031303c1a1f6fd1e70/using_external_lib.py
diff --git a/docs/_downloads/fb810a10b128e7d81f5eec1c5908e0f5/intrin_math.py b/docs/_downloads/d9089082842c138d4c81335f88c60c82/intrin_math.py
similarity index 100%
rename from docs/_downloads/fb810a10b128e7d81f5eec1c5908e0f5/intrin_math.py
rename to docs/_downloads/d9089082842c138d4c81335f88c60c82/intrin_math.py
diff --git a/docs/_downloads/8246644805c8dfcb0b33ca356cc1fafc/deploy_ssd_gluoncv.ipynb b/docs/_downloads/d92aacfae35477bed0f7f60aa8d2714e/deploy_ssd_gluoncv.ipynb
similarity index 100%
rename from docs/_downloads/8246644805c8dfcb0b33ca356cc1fafc/deploy_ssd_gluoncv.ipynb
rename to docs/_downloads/d92aacfae35477bed0f7f60aa8d2714e/deploy_ssd_gluoncv.ipynb
diff --git a/docs/_downloads/92b34b8e701291844895f4566f6dc366/schedule_primitives.py b/docs/_downloads/da47fa2ad30c4b6921171c97e72f36a9/schedule_primitives.py
similarity index 100%
rename from docs/_downloads/92b34b8e701291844895f4566f6dc366/schedule_primitives.py
rename to docs/_downloads/da47fa2ad30c4b6921171c97e72f36a9/schedule_primitives.py
diff --git a/docs/_downloads/70d345c5409f99cb5de9dc44f147ff6f/build_gcn.py b/docs/_downloads/dabb6b43ea9ef9d7bd1a3912001deace/build_gcn.py
similarity index 100%
rename from docs/_downloads/70d345c5409f99cb5de9dc44f147ff6f/build_gcn.py
rename to docs/_downloads/dabb6b43ea9ef9d7bd1a3912001deace/build_gcn.py
diff --git a/docs/_downloads/1195277fef6a622db64b78b4ea799ed4/matrix_multiply.py b/docs/_downloads/de1c160863e8a3826753e987a4138298/matrix_multiply.py
similarity index 100%
rename from docs/_downloads/1195277fef6a622db64b78b4ea799ed4/matrix_multiply.py
rename to docs/_downloads/de1c160863e8a3826753e987a4138298/matrix_multiply.py
diff --git a/docs/_downloads/dfa0880631b34bb8814952afdc9031d8/tvmc_command_line_driver.ipynb b/docs/_downloads/dfa0880631b34bb8814952afdc9031d8/tvmc_command_line_driver.ipynb
deleted file mode 100644
index 2d32465..0000000
--- a/docs/_downloads/dfa0880631b34bb8814952afdc9031d8/tvmc_command_line_driver.ipynb
+++ /dev/null
@@ -1,141 +0,0 @@
-{
-  "cells": [
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "%matplotlib inline"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "\nCompiling and Optimizing a Model with TVMC\n==========================================\n**Authors**:\n`Leandro Nunes <https://github.com/leandron>`_,\n`Matthew Barrett <https://github.com/mbaret>`_,\n`Chris Hoge <https://github.com/hogepodge>`_\n\nIn this section, we will work with TVMC, the TVM command line driver. TVMC is a\ntool that exposes TVM features such as auto-tuning, compiling, profiling and\nexecution of models through a command line interface.\n\nUpon completion o [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Using TVMC\n----------\n\nTVMC is a Python application, part of the TVM Python package.\nWhen you install TVM using a Python package, you will get TVMC as\nas a command line application called ``tvmc``. The location of this command\nwill vary depending on your platform and installation method.\n\nAlternatively, if you have TVM as a Python module on your\n``$PYTHONPATH``,you can access the command line driver functionality\nvia the executable python module, ``python -m tvm.driver [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Obtaining the Model\n-------------------\n\nFor this tutorial, we will be working with ResNet-50 v2. ResNet-50 is a\nconvolutional neural network that is 50-layers deep and designed to classify\nimages. The model we will be using has been pre-trained on more than a\nmillion images with 1000 different classifications. The network has an input\nimage size of 224x224. If you are interested exploring more of how the\nResNet-50 model is structured, we recommend downloading `Netron\n< [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "<div class=\"alert alert-info\"><h4>Note</h4><p>Supported model formats\n\n  TVMC supports models created with Keras, ONNX, TensorFlow, TFLite\n  and Torch. Use the option``--model-format`` if you need to\n  explicitly provide the model format you are using. See ``tvmc\n  compile --help`` for more information.</p></div>\n\n\n"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "<div class=\"alert alert-info\"><h4>Note</h4><p>Adding ONNX Support to TVM\n\n   TVM relies on the ONNX python library being available on your system. You\n   can install ONNX using the command ``pip3 install --user onnx``. You may\n   remove the ``--user`` option if you have root access and want to install\n   ONNX globally.</p></div>\n\n\n"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Compiling an ONNX Model to the TVM Runtime\n------------------------------------------\n\nOnce we've downloaded the ResNet-50 model, the next step is to compile it. To\naccomplish that, we are going to use ``tvmc compile``. The output we get from\nthe compilation process is a TAR package of the model compiled to a dynamic\nlibrary for our target platform. We can run that model on our target device\nusing the TVM runtime.\n\n.. code-block:: bash\n\n  tvmc compile \\\n  --target \ [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "<div class=\"alert alert-info\"><h4>Note</h4><p>Defining the Correct Target\n\n  Specifying the correct target (option ``--target``) can have a huge\n  impact on the performance of the compiled module, as it can take\n  advantage of hardware features available on the target. For more\n  information, please refer to `Auto-tuning a convolutional network\n  for x86 CPU <https://tvm.apache.org/docs/tutorials/autotvm/tune_relay_x86.html#define-network>`_.\n  We recommend identifying  [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Running the Model from The Compiled Module with TVMC\n----------------------------------------------------\n\nNow that we've compiled the model to this module, we can use the TVM runtime\nto make predictions with it. TVMC has the TVM runtime built in to it,\nallowing you to run compiled TVM models. To use TVMC to run the model and\nmake predictions, we need two things:\n\n- The compiled module, which we just produced.\n- Valid input to the model to make predictions on.\n\nEach m [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Input pre-processing\n~~~~~~~~~~~~~~~~~~~~\n\nFor our ResNet 50 V2 model, the input is expected to be in ImageNet format.\nHere is an example of a script to pre-process an image for ResNet 50 V2.\n\nYou will need to have a supported version of the Python Image Library\ninstalled. You can use ``pip3 install --user pillow`` to satisfy this\nrequirement for the script.\n\n.. code-block:: python\n   :caption: preprocess.py\n   :name: preprocess.py\n\n    #!python ./preprocess.py\n   [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Running the Compiled Module\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWith both the model and input data in hand, we can now run TVMC to make a\nprediction:\n\n.. code-block:: bash\n\n    tvmc run \\\n    --inputs imagenet_cat.npz \\\n    --output predictions.npz \\\n    resnet50-v2-7-tvm.tar\n\nRecall that the `.tar` model file includes a C++ library, a description of\nthe Relay model, and the parameters for the model. TVMC includes the TVM\nruntime, which can load the model and make pre [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Output Post-Processing\n~~~~~~~~~~~~~~~~~~~~~~\n\nAs previously mentioned, each model will have its own particular way of\nproviding output tensors.\n\nIn our case, we need to run some post-processing to render the outputs from\nResNet 50 V2 into a more human-readable form, using the lookup-table provided\nfor the model.\n\nThe script below shows an example of the post-processing to extract labels\nfrom the output of our compiled module.\n\n.. code-block:: python\n    :caption:  [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Automatically Tuning the ResNet Model\n-------------------------------------\n\nThe previous model was compiled to work on the TVM runtime, but did not\ninclude any platform specific optimization. In this section, we will show you\nhow to build an optimized model using TVMC to target your working platform.\n\nIn some cases, we might not get the expected performance when running\ninferences using our compiled module.  In cases like this, we can make use of\nthe auto-tuner, to fin [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Compiling an Optimized Model with Tuning Data\n----------------------------------------------\n\nAs an output of the tuning process above, we obtained the tuning records\nstored in ``resnet50-v2-7-autotuner_records.json``. This file can be used in\ntwo ways:\n\n- As input to further tuning (via ``tvmc tune --tuning-records``).\n- As input to the compiler\n\nThe compiler will use the results to generate high performance code for the\nmodel on your specified target. To do that we  [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Comparing the Tuned and Untuned Models\n--------------------------------------\n\nTVMC gives you tools for basic performance benchmarking between the models.\nYou can specify a number of repetitions and that TVMC report on the model run\ntime (independent of runtime startup). We can get a rough idea of how much\ntuning has improved the model performance. For example, on a test Intel i7\nsystem, we see that the tuned model runs 47% faster than the untuned model:\n\n.. code-block: [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Final Remarks\n-------------\n\nIn this tutorial, we presented TVMC, a command line driver for TVM. We\ndemonstrated how to compile, run, and tune a model. We also discussed the\nneed for pre and post-processing of inputs and outputs. After the tuning\nprocess, we demonstrated how to compare the performance of the unoptimized\nand optimize models.\n\nHere we presented a simple example using ResNet 50 V2 locally. However, TVMC\nsupports many more features including cross-compilat [...]
-      ]
-    }
-  ],
-  "metadata": {
-    "kernelspec": {
-      "display_name": "Python 3",
-      "language": "python",
-      "name": "python3"
-    },
-    "language_info": {
-      "codemirror_mode": {
-        "name": "ipython",
-        "version": 3
-      },
-      "file_extension": ".py",
-      "mimetype": "text/x-python",
-      "name": "python",
-      "nbconvert_exporter": "python",
-      "pygments_lexer": "ipython3",
-      "version": "3.6.9"
-    }
-  },
-  "nbformat": 4,
-  "nbformat_minor": 0
-}
\ No newline at end of file
diff --git a/docs/_downloads/72871483681951fd0400ddc905113f11/from_caffe2.py b/docs/_downloads/e25a3aef2f747af62cbefd0730854507/from_caffe2.py
similarity index 100%
rename from docs/_downloads/72871483681951fd0400ddc905113f11/from_caffe2.py
rename to docs/_downloads/e25a3aef2f747af62cbefd0730854507/from_caffe2.py
diff --git a/docs/_downloads/678f3c372a599a18d909aed0fefb30be/tune_conv2d_layer_cuda.py b/docs/_downloads/e3e540f3b477c0c52d8eb73e674e8ffd/tune_conv2d_layer_cuda.py
similarity index 100%
rename from docs/_downloads/678f3c372a599a18d909aed0fefb30be/tune_conv2d_layer_cuda.py
rename to docs/_downloads/e3e540f3b477c0c52d8eb73e674e8ffd/tune_conv2d_layer_cuda.py
diff --git a/docs/_downloads/b3eb5454a38ef6a663c9e4a7a3e61896/tune_network_x86.py b/docs/_downloads/e416b94ca1090b0897c0f6e0df95b911/tune_network_x86.py
similarity index 100%
rename from docs/_downloads/b3eb5454a38ef6a663c9e4a7a3e61896/tune_network_x86.py
rename to docs/_downloads/e416b94ca1090b0897c0f6e0df95b911/tune_network_x86.py
diff --git a/docs/_downloads/e92c7219a1cd7838e61f9683f4228a7f/from_onnx.ipynb b/docs/_downloads/e92c7219a1cd7838e61f9683f4228a7f/from_onnx.ipynb
deleted file mode 100644
index 36e0009..0000000
--- a/docs/_downloads/e92c7219a1cd7838e61f9683f4228a7f/from_onnx.ipynb
+++ /dev/null
@@ -1,151 +0,0 @@
-{
-  "cells": [
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "%matplotlib inline"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "\nCompile ONNX Models\n===================\n**Author**: `Joshua Z. Zhang <https://zhreshold.github.io/>`_\n\nThis article is an introductory tutorial to deploy ONNX models with Relay.\n\nFor us to begin with, ONNX package must be installed.\n\nA quick solution is to install protobuf compiler, and\n\n.. code-block:: bash\n\n    pip install onnx --user\n\nor please refer to official site.\nhttps://github.com/onnx/onnx\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "import onnx\nimport numpy as np\nimport tvm\nfrom tvm import te\nimport tvm.relay as relay\nfrom tvm.contrib.download import download_testdata"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Load pretrained ONNX model\n---------------------------------------------\nThe example super resolution model used here is exactly the same model in onnx tutorial\nhttp://pytorch.org/tutorials/advanced/super_resolution_with_caffe2.html\nwe skip the pytorch model construction part, and download the saved onnx model\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "model_url = \"\".join(\n    [\n        \"https://gist.github.com/zhreshold/\",\n        \"bcda4716699ac97ea44f791c24310193/raw/\",\n        \"93672b029103648953c4e5ad3ac3aadf346a4cdc/\",\n        \"super_resolution_0.2.onnx\",\n    ]\n)\nmodel_path = download_testdata(model_url, \"super_resolution.onnx\", module=\"onnx\")\n# now you have super_resolution.onnx on disk\nonnx_model = onnx.load(model_path)"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Load a test image\n---------------------------------------------\nA single cat dominates the examples! This model takes a single input image of size\n224x224 and outputs a scaled image that is 3x greater than the input along each\naxis, a 672x672 image. Re-scale the cat image to fit this input shape then\nconvert to `YCbCr`. The super resolution model will then be applied to the\nluminance (`Y`) channel.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "from PIL import Image\n\nimg_url = \"https://github.com/dmlc/mxnet.js/blob/main/data/cat.png?raw=true\"\nimg_path = download_testdata(img_url, \"cat.png\", module=\"data\")\nimg = Image.open(img_path).resize((224, 224))\nimg_ycbcr = img.convert(\"YCbCr\")  # convert to YCbCr\nimg_y, img_cb, img_cr = img_ycbcr.split()\nx = np.array(img_y)[np.newaxis, np.newaxis, :, :]"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Compile the model with relay\n---------------------------------------------\nTypically ONNX models mix model input values with parameter values, with\nthe input having the name `1`. This model dependent, and you should check\nwith the documentation for your model to determine the full input and\nparameter name space.\n\nPassing in the shape dictionary to the `relay.frontend.from_onnx` method\ntells relay which ONNX parameters are inputs, and which are parameters, and\nprovides a [...]
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "target = \"llvm\"\n\ninput_name = \"1\"\nshape_dict = {input_name: x.shape}\nmod, params = relay.frontend.from_onnx(onnx_model, shape_dict)\n\nwith tvm.transform.PassContext(opt_level=1):\n    executor = relay.build_module.create_executor(\n        \"graph\", mod, tvm.cpu(0), target, params\n    ).evaluate()"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Execute on TVM\n---------------------------------------------\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "dtype = \"float32\"\ntvm_output = executor(tvm.nd.array(x.astype(dtype))).numpy()"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Display results\n---------------------------------------------\nWe put input and output image neck to neck. The luminance channel, `Y` is the output\nfrom the model. The chroma channels `Cb` and `Cr` are resized to match with a simple\nbicubic algorithm. The image is then recombined and converted back to `RGB`.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "from matplotlib import pyplot as plt\n\nout_y = Image.fromarray(np.uint8((tvm_output[0, 0]).clip(0, 255)), mode=\"L\")\nout_cb = img_cb.resize(out_y.size, Image.BICUBIC)\nout_cr = img_cr.resize(out_y.size, Image.BICUBIC)\nresult = Image.merge(\"YCbCr\", [out_y, out_cb, out_cr]).convert(\"RGB\")\ncanvas = np.full((672, 672 * 2, 3), 255)\ncanvas[0:224, 0:224, :] = np.asarray(img)\ncanvas[:, 672:, :] = np.asarray(result)\nplt.imshow(canvas.astype(np.uint8))\nplt.show()"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Notes\n---------------------------------------------\nBy default, ONNX defines models in terms of dynamic shapes. The ONNX importer\nretains that dynamism upon import, and the compiler attempts to convert the model\ninto a static shapes at compile time. If this fails, there may still be dynamic\noperations in the model. Not all TVM kernels currently support dynamic shapes,\nplease file an issue on discuss.tvm.apache.org if you hit an error with dynamic kernels.\n\nThis particula [...]
-      ]
-    }
-  ],
-  "metadata": {
-    "kernelspec": {
-      "display_name": "Python 3",
-      "language": "python",
-      "name": "python3"
-    },
-    "language_info": {
-      "codemirror_mode": {
-        "name": "ipython",
-        "version": 3
-      },
-      "file_extension": ".py",
-      "mimetype": "text/x-python",
-      "name": "python",
-      "nbconvert_exporter": "python",
-      "pygments_lexer": "ipython3",
-      "version": "3.6.9"
-    }
-  },
-  "nbformat": 4,
-  "nbformat_minor": 0
-}
\ No newline at end of file
diff --git a/docs/_downloads/ca1e46b7753fde55e274840c315f6b1a/auto_scheduler_matmul_x86.py b/docs/_downloads/eac4389b114db015e95cb3cdf8b86b83/auto_scheduler_matmul_x86.py
similarity index 100%
rename from docs/_downloads/ca1e46b7753fde55e274840c315f6b1a/auto_scheduler_matmul_x86.py
rename to docs/_downloads/eac4389b114db015e95cb3cdf8b86b83/auto_scheduler_matmul_x86.py
diff --git a/docs/_downloads/2771a7fc8bf8eeb7788823ff349aacc0/tune_network_cuda.py b/docs/_downloads/eafe360d52540634c9eea0fa89e804bd/tune_network_cuda.py
similarity index 100%
rename from docs/_downloads/2771a7fc8bf8eeb7788823ff349aacc0/tune_network_cuda.py
rename to docs/_downloads/eafe360d52540634c9eea0fa89e804bd/tune_network_cuda.py
diff --git a/docs/_downloads/eb551cfff8900ec35fae9f15aa728e45/from_onnx.py b/docs/_downloads/eb551cfff8900ec35fae9f15aa728e45/from_onnx.py
new file mode 100644
index 0000000..586c811
--- /dev/null
+++ b/docs/_downloads/eb551cfff8900ec35fae9f15aa728e45/from_onnx.py
@@ -0,0 +1,135 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""
+Compile ONNX Models
+===================
+**Author**: `Joshua Z. Zhang <https://zhreshold.github.io/>`_
+
+This article is an introductory tutorial to deploy ONNX models with Relay.
+
+For us to begin with, ONNX package must be installed.
+
+A quick solution is to install protobuf compiler, and
+
+.. code-block:: bash
+
+    pip install --user onnx onnxoptimizer
+
+or please refer to official site.
+https://github.com/onnx/onnx
+"""
+import onnx
+import numpy as np
+import tvm
+from tvm import te
+import tvm.relay as relay
+from tvm.contrib.download import download_testdata
+
+######################################################################
+# Load pretrained ONNX model
+# ---------------------------------------------
+# The example super resolution model used here is exactly the same model in onnx tutorial
+# http://pytorch.org/tutorials/advanced/super_resolution_with_caffe2.html
+# we skip the pytorch model construction part, and download the saved onnx model
+model_url = "".join(
+    [
+        "https://gist.github.com/zhreshold/",
+        "bcda4716699ac97ea44f791c24310193/raw/",
+        "93672b029103648953c4e5ad3ac3aadf346a4cdc/",
+        "super_resolution_0.2.onnx",
+    ]
+)
+model_path = download_testdata(model_url, "super_resolution.onnx", module="onnx")
+# now you have super_resolution.onnx on disk
+onnx_model = onnx.load(model_path)
+
+######################################################################
+# Load a test image
+# ---------------------------------------------
+# A single cat dominates the examples! This model takes a single input image of size
+# 224x224 and outputs a scaled image that is 3x greater than the input along each
+# axis, a 672x672 image. Re-scale the cat image to fit this input shape then
+# convert to `YCbCr`. The super resolution model will then be applied to the
+# luminance (`Y`) channel.
+from PIL import Image
+
+img_url = "https://github.com/dmlc/mxnet.js/blob/main/data/cat.png?raw=true"
+img_path = download_testdata(img_url, "cat.png", module="data")
+img = Image.open(img_path).resize((224, 224))
+img_ycbcr = img.convert("YCbCr")  # convert to YCbCr
+img_y, img_cb, img_cr = img_ycbcr.split()
+x = np.array(img_y)[np.newaxis, np.newaxis, :, :]
+
+######################################################################
+# Compile the model with relay
+# ---------------------------------------------
+# Typically ONNX models mix model input values with parameter values, with
+# the input having the name `1`. This model dependent, and you should check
+# with the documentation for your model to determine the full input and
+# parameter name space.
+#
+# Passing in the shape dictionary to the `relay.frontend.from_onnx` method
+# tells relay which ONNX parameters are inputs, and which are parameters, and
+# provides a static definition of the input size.
+target = "llvm"
+
+input_name = "1"
+shape_dict = {input_name: x.shape}
+mod, params = relay.frontend.from_onnx(onnx_model, shape_dict)
+
+with tvm.transform.PassContext(opt_level=1):
+    executor = relay.build_module.create_executor(
+        "graph", mod, tvm.cpu(0), target, params
+    ).evaluate()
+
+######################################################################
+# Execute on TVM
+# ---------------------------------------------
+dtype = "float32"
+tvm_output = executor(tvm.nd.array(x.astype(dtype))).numpy()
+
+######################################################################
+# Display results
+# ---------------------------------------------
+# We put input and output image neck to neck. The luminance channel, `Y` is the output
+# from the model. The chroma channels `Cb` and `Cr` are resized to match with a simple
+# bicubic algorithm. The image is then recombined and converted back to `RGB`.
+from matplotlib import pyplot as plt
+
+out_y = Image.fromarray(np.uint8((tvm_output[0, 0]).clip(0, 255)), mode="L")
+out_cb = img_cb.resize(out_y.size, Image.BICUBIC)
+out_cr = img_cr.resize(out_y.size, Image.BICUBIC)
+result = Image.merge("YCbCr", [out_y, out_cb, out_cr]).convert("RGB")
+canvas = np.full((672, 672 * 2, 3), 255)
+canvas[0:224, 0:224, :] = np.asarray(img)
+canvas[:, 672:, :] = np.asarray(result)
+plt.imshow(canvas.astype(np.uint8))
+plt.show()
+
+######################################################################
+# Notes
+# ---------------------------------------------
+# By default, ONNX defines models in terms of dynamic shapes. The ONNX importer
+# retains that dynamism upon import, and the compiler attempts to convert the model
+# into a static shapes at compile time. If this fails, there may still be dynamic
+# operations in the model. Not all TVM kernels currently support dynamic shapes,
+# please file an issue on discuss.tvm.apache.org if you hit an error with dynamic kernels.
+#
+# This particular model was build using an older version of ONNX. During the import
+# phase ONNX importer will run the ONNX verifier, which may throw a `Mismatched attribute type`
+# warning. Because TVM supports a number of different ONNX versions, the Relay model
+# will still be valid.
diff --git a/docs/_downloads/6be1519353297beeea03fe17712dc16f/using_external_lib.ipynb b/docs/_downloads/edc9d28c4fbc249e2e7b78002af63b84/using_external_lib.ipynb
similarity index 100%
rename from docs/_downloads/6be1519353297beeea03fe17712dc16f/using_external_lib.ipynb
rename to docs/_downloads/edc9d28c4fbc249e2e7b78002af63b84/using_external_lib.ipynb
diff --git a/docs/_downloads/b7eedb9d280f012e9fad34189017330e/bring_your_own_datatypes.py b/docs/_downloads/ee99205e9f2e4f54c0fb7925008a5354/bring_your_own_datatypes.py
similarity index 100%
rename from docs/_downloads/b7eedb9d280f012e9fad34189017330e/bring_your_own_datatypes.py
rename to docs/_downloads/ee99205e9f2e4f54c0fb7925008a5354/bring_your_own_datatypes.py
diff --git a/docs/_downloads/38606228ff7130fbd6473b7c0625ddcd/deploy_model_on_android.ipynb b/docs/_downloads/eed2658f15243bab719b2de7769fa45a/deploy_model_on_android.ipynb
similarity index 100%
rename from docs/_downloads/38606228ff7130fbd6473b7c0625ddcd/deploy_model_on_android.ipynb
rename to docs/_downloads/eed2658f15243bab719b2de7769fa45a/deploy_model_on_android.ipynb
diff --git a/docs/_downloads/efe0b02e219b28e0bd85fbdda35ba8ac/tvmc_command_line_driver.ipynb b/docs/_downloads/efe0b02e219b28e0bd85fbdda35ba8ac/tvmc_command_line_driver.ipynb
new file mode 100644
index 0000000..0d0d6e9
--- /dev/null
+++ b/docs/_downloads/efe0b02e219b28e0bd85fbdda35ba8ac/tvmc_command_line_driver.ipynb
@@ -0,0 +1,141 @@
+{
+  "cells": [
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "%matplotlib inline"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "\nCompiling and Optimizing a Model with TVMC\n==========================================\n**Authors**:\n`Leandro Nunes <https://github.com/leandron>`_,\n`Matthew Barrett <https://github.com/mbaret>`_,\n`Chris Hoge <https://github.com/hogepodge>`_\n\nIn this section, we will work with TVMC, the TVM command line driver. TVMC is a\ntool that exposes TVM features such as auto-tuning, compiling, profiling and\nexecution of models through a command line interface.\n\nUpon completion o [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Using TVMC\n----------\n\nTVMC is a Python application, part of the TVM Python package.\nWhen you install TVM using a Python package, you will get TVMC as\nas a command line application called ``tvmc``. The location of this command\nwill vary depending on your platform and installation method.\n\nAlternatively, if you have TVM as a Python module on your\n``$PYTHONPATH``,you can access the command line driver functionality\nvia the executable python module, ``python -m tvm.driver [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Obtaining the Model\n-------------------\n\nFor this tutorial, we will be working with ResNet-50 v2. ResNet-50 is a\nconvolutional neural network that is 50-layers deep and designed to classify\nimages. The model we will be using has been pre-trained on more than a\nmillion images with 1000 different classifications. The network has an input\nimage size of 224x224. If you are interested exploring more of how the\nResNet-50 model is structured, we recommend downloading `Netron\n< [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "<div class=\"alert alert-info\"><h4>Note</h4><p>Supported model formats\n\n  TVMC supports models created with Keras, ONNX, TensorFlow, TFLite\n  and Torch. Use the option``--model-format`` if you need to\n  explicitly provide the model format you are using. See ``tvmc\n  compile --help`` for more information.</p></div>\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "<div class=\"alert alert-info\"><h4>Note</h4><p>Adding ONNX Support to TVM\n\n   TVM relies on the ONNX python library being available on your system. You can\n   install ONNX using the command ``pip3 install --user onnx onnxoptimizer``. You\n   may remove the ``--user`` option if you have root access and want to install\n   ONNX globally.  The ``onnxoptimizer`` dependency is optional, and is only used\n   for ``onnx>=1.9``.</p></div>\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Compiling an ONNX Model to the TVM Runtime\n------------------------------------------\n\nOnce we've downloaded the ResNet-50 model, the next step is to compile it. To\naccomplish that, we are going to use ``tvmc compile``. The output we get from\nthe compilation process is a TAR package of the model compiled to a dynamic\nlibrary for our target platform. We can run that model on our target device\nusing the TVM runtime.\n\n.. code-block:: bash\n\n  tvmc compile \\\n  --target \ [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "<div class=\"alert alert-info\"><h4>Note</h4><p>Defining the Correct Target\n\n  Specifying the correct target (option ``--target``) can have a huge\n  impact on the performance of the compiled module, as it can take\n  advantage of hardware features available on the target. For more\n  information, please refer to `Auto-tuning a convolutional network\n  for x86 CPU <https://tvm.apache.org/docs/tutorials/autotvm/tune_relay_x86.html#define-network>`_.\n  We recommend identifying  [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Running the Model from The Compiled Module with TVMC\n----------------------------------------------------\n\nNow that we've compiled the model to this module, we can use the TVM runtime\nto make predictions with it. TVMC has the TVM runtime built in to it,\nallowing you to run compiled TVM models. To use TVMC to run the model and\nmake predictions, we need two things:\n\n- The compiled module, which we just produced.\n- Valid input to the model to make predictions on.\n\nEach m [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Input pre-processing\n~~~~~~~~~~~~~~~~~~~~\n\nFor our ResNet 50 V2 model, the input is expected to be in ImageNet format.\nHere is an example of a script to pre-process an image for ResNet 50 V2.\n\nYou will need to have a supported version of the Python Image Library\ninstalled. You can use ``pip3 install --user pillow`` to satisfy this\nrequirement for the script.\n\n.. code-block:: python\n   :caption: preprocess.py\n   :name: preprocess.py\n\n    #!python ./preprocess.py\n   [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Running the Compiled Module\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWith both the model and input data in hand, we can now run TVMC to make a\nprediction:\n\n.. code-block:: bash\n\n    tvmc run \\\n    --inputs imagenet_cat.npz \\\n    --output predictions.npz \\\n    resnet50-v2-7-tvm.tar\n\nRecall that the `.tar` model file includes a C++ library, a description of\nthe Relay model, and the parameters for the model. TVMC includes the TVM\nruntime, which can load the model and make pre [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Output Post-Processing\n~~~~~~~~~~~~~~~~~~~~~~\n\nAs previously mentioned, each model will have its own particular way of\nproviding output tensors.\n\nIn our case, we need to run some post-processing to render the outputs from\nResNet 50 V2 into a more human-readable form, using the lookup-table provided\nfor the model.\n\nThe script below shows an example of the post-processing to extract labels\nfrom the output of our compiled module.\n\n.. code-block:: python\n    :caption:  [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Automatically Tuning the ResNet Model\n-------------------------------------\n\nThe previous model was compiled to work on the TVM runtime, but did not\ninclude any platform specific optimization. In this section, we will show you\nhow to build an optimized model using TVMC to target your working platform.\n\nIn some cases, we might not get the expected performance when running\ninferences using our compiled module.  In cases like this, we can make use of\nthe auto-tuner, to fin [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Compiling an Optimized Model with Tuning Data\n----------------------------------------------\n\nAs an output of the tuning process above, we obtained the tuning records\nstored in ``resnet50-v2-7-autotuner_records.json``. This file can be used in\ntwo ways:\n\n- As input to further tuning (via ``tvmc tune --tuning-records``).\n- As input to the compiler\n\nThe compiler will use the results to generate high performance code for the\nmodel on your specified target. To do that we  [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Comparing the Tuned and Untuned Models\n--------------------------------------\n\nTVMC gives you tools for basic performance benchmarking between the models.\nYou can specify a number of repetitions and that TVMC report on the model run\ntime (independent of runtime startup). We can get a rough idea of how much\ntuning has improved the model performance. For example, on a test Intel i7\nsystem, we see that the tuned model runs 47% faster than the untuned model:\n\n.. code-block: [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Final Remarks\n-------------\n\nIn this tutorial, we presented TVMC, a command line driver for TVM. We\ndemonstrated how to compile, run, and tune a model. We also discussed the\nneed for pre and post-processing of inputs and outputs. After the tuning\nprocess, we demonstrated how to compare the performance of the unoptimized\nand optimize models.\n\nHere we presented a simple example using ResNet 50 V2 locally. However, TVMC\nsupports many more features including cross-compilat [...]
+      ]
+    }
+  ],
+  "metadata": {
+    "kernelspec": {
+      "display_name": "Python 3",
+      "language": "python",
+      "name": "python3"
+    },
+    "language_info": {
+      "codemirror_mode": {
+        "name": "ipython",
+        "version": 3
+      },
+      "file_extension": ".py",
+      "mimetype": "text/x-python",
+      "name": "python",
+      "nbconvert_exporter": "python",
+      "pygments_lexer": "ipython3",
+      "version": "3.6.9"
+    }
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/docs/_downloads/4dd41316d6ea7ff2b6993aab65428bf5/cross_compilation_and_rpc.ipynb b/docs/_downloads/f289ca2466fcf79c024068c1f8642bd0/cross_compilation_and_rpc.ipynb
similarity index 100%
rename from docs/_downloads/4dd41316d6ea7ff2b6993aab65428bf5/cross_compilation_and_rpc.ipynb
rename to docs/_downloads/f289ca2466fcf79c024068c1f8642bd0/cross_compilation_and_rpc.ipynb
diff --git a/docs/_downloads/f39b7e7219dd852263ba763e0b35598c/micro_autotune.py b/docs/_downloads/f39b7e7219dd852263ba763e0b35598c/micro_autotune.py
deleted file mode 100644
index f89432f..0000000
--- a/docs/_downloads/f39b7e7219dd852263ba763e0b35598c/micro_autotune.py
+++ /dev/null
@@ -1,250 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-"""
-.. _tutorial-micro-autotune:
-
-Autotuning with micro TVM
-=========================
-**Author**: `Andrew Reusch <https://github.com/areusch>`_, `Mehrdad Hessar <https://github.com/mehrdadh>`
-
-This tutorial explains how to autotune a model using the C runtime.
-"""
-
-import numpy as np
-import subprocess
-import pathlib
-
-import tvm
-
-####################
-# Defining the model
-####################
-#
-# To begin with, define a model in Relay to be executed on-device. Then create an IRModule from relay model and
-# fill parameters with random numbers.
-#
-
-data_shape = (1, 3, 10, 10)
-weight_shape = (6, 3, 5, 5)
-
-data = tvm.relay.var("data", tvm.relay.TensorType(data_shape, "float32"))
-weight = tvm.relay.var("weight", tvm.relay.TensorType(weight_shape, "float32"))
-
-y = tvm.relay.nn.conv2d(
-    data,
-    weight,
-    padding=(2, 2),
-    kernel_size=(5, 5),
-    kernel_layout="OIHW",
-    out_dtype="float32",
-)
-f = tvm.relay.Function([data, weight], y)
-
-relay_mod = tvm.IRModule.from_expr(f)
-relay_mod = tvm.relay.transform.InferType()(relay_mod)
-
-weight_sample = np.random.rand(
-    weight_shape[0], weight_shape[1], weight_shape[2], weight_shape[3]
-).astype("float32")
-params = {"weight": weight_sample}
-
-#######################
-# Defining the target #
-#######################
-# Now we define the TVM target that describes the execution environment. This looks very similar
-# to target definitions from other microTVM tutorials.
-#
-# When running on physical hardware, choose a target and a board that
-# describe the hardware. There are multiple hardware targets that could be selected from
-# PLATFORM list in this tutorial. You can chose the platform by passing --platform argument when running
-# this tutorial.
-#
-TARGET = tvm.target.target.micro("host")
-
-# Compiling for physical hardware
-# --------------------------------------------------------------------------
-#  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The
-#  STM32L4R5ZI Nucleo target and board is chosen in the example below.
-#
-#    TARGET = tvm.target.target.micro("stm32l4r5zi")
-#    BOARD = "nucleo_l4r5zi"
-
-#########################
-# Extracting tuning tasks
-#########################
-# Not all operators in the Relay program printed above can be tuned. Some are so trivial that only
-# a single implementation is defined; others don't make sense as tuning tasks. Using
-# `extract_from_program`, you can produce a list of tunable tasks.
-#
-# Because task extraction involves running the compiler, we first configure the compiler's
-# transformation passes; we'll apply the same configuration later on during autotuning.
-
-pass_context = tvm.transform.PassContext(opt_level=3, config={"tir.disable_vectorize": True})
-with pass_context:
-    tasks = tvm.autotvm.task.extract_from_program(relay_mod["main"], {}, TARGET)
-assert len(tasks) > 0
-
-######################
-# Configuring microTVM
-######################
-# Before autotuning, we need to define a module loader and then pass that to
-# a `tvm.autotvm.LocalBuilder`. Then we create a `tvm.autotvm.LocalRunner` and use
-# both builder and runner to generates multiple measurements for auto tunner.
-#
-# In this tutorial, we have the option to use x86 host as an example or use different targets
-# from Zephyr RTOS. If you choose pass `--platform=host` to this tutorial it will uses x86. You can
-# choose other options by choosing from `PLATFORM` list.
-#
-
-repo_root = pathlib.Path(
-    subprocess.check_output(["git", "rev-parse", "--show-toplevel"], encoding="utf-8").strip()
-)
-
-module_loader = tvm.micro.AutoTvmModuleLoader(
-    template_project_dir=repo_root / "src" / "runtime" / "crt" / "host",
-    project_options={},
-)
-builder = tvm.autotvm.LocalBuilder(
-    n_parallel=1,
-    build_kwargs={"build_option": {"tir.disable_vectorize": True}},
-    do_fork=True,
-    build_func=tvm.micro.autotvm_build_func,
-)
-runner = tvm.autotvm.LocalRunner(number=1, repeat=1, timeout=100, module_loader=module_loader)
-
-measure_option = tvm.autotvm.measure_option(builder=builder, runner=runner)
-
-# Compiling for physical hardware
-# --------------------------------------------------------------------------
-#    module_loader = tvm.micro.AutoTvmModuleLoader(
-#        template_project_dir=repo_root / "apps" / "microtvm" / "zephyr" / "template_project",
-#        project_options={
-#            "zephyr_board": BOARD,
-#            "west_cmd": "west",
-#            "verbose": 1,
-#            "project_type": "host_driven",
-#        },
-#    )
-#    builder = tvm.autotvm.LocalBuilder(
-#        n_parallel=1,
-#        build_kwargs={"build_option": {"tir.disable_vectorize": True}},
-#        do_fork=False,
-#        build_func=tvm.micro.autotvm_build_func,
-#    )
-#    runner = tvm.autotvm.LocalRunner(number=1, repeat=1, timeout=100, module_loader=module_loader)
-
-# measure_option = tvm.autotvm.measure_option(builder=builder, runner=runner)
-
-################
-# Run Autotuning
-################
-# Now we can run autotuning separately on each extracted task.
-
-num_trials = 10
-for task in tasks:
-    tuner = tvm.autotvm.tuner.GATuner(task)
-    tuner.tune(
-        n_trial=num_trials,
-        measure_option=measure_option,
-        callbacks=[
-            tvm.autotvm.callback.log_to_file("microtvm_autotune.log.txt"),
-            tvm.autotvm.callback.progress_bar(num_trials, si_prefix="M"),
-        ],
-        si_prefix="M",
-    )
-
-############################
-# Timing the untuned program
-############################
-# For comparison, let's compile and run the graph without imposing any autotuning schedules. TVM
-# will select a randomly-tuned implementation for each operator, which should not perform as well as
-# the tuned operator.
-
-with pass_context:
-    lowered = tvm.relay.build(relay_mod, target=TARGET, params=params)
-
-temp_dir = tvm.contrib.utils.tempdir()
-
-project = tvm.micro.generate_project(
-    str(repo_root / "src" / "runtime" / "crt" / "host"), lowered, temp_dir / "project"
-)
-
-# Compiling for physical hardware
-# --------------------------------------------------------------------------
-#    project = tvm.micro.generate_project(
-#        str(repo_root / "apps" / "microtvm" / "zephyr" / "template_project"),
-#        lowered,
-#        temp_dir / "project",
-#        {
-#            "zephyr_board": BOARD,
-#            "west_cmd": "west",
-#            "verbose": 1,
-#            "project_type": "host_driven",
-#        },
-#    )
-
-project.build()
-project.flash()
-with tvm.micro.Session(project.transport()) as session:
-    debug_module = tvm.micro.create_local_debug_executor(
-        lowered.get_graph_json(), session.get_system_lib(), session.device
-    )
-    debug_module.set_input(**lowered.get_params())
-    print("########## Build without Autotuning ##########")
-    debug_module.run()
-    del debug_module
-
-##########################
-# Timing the tuned program
-##########################
-# Once autotuning completes, you can time execution of the entire program using the Debug Runtime:
-
-with tvm.autotvm.apply_history_best("microtvm_autotune.log.txt"):
-    with pass_context:
-        lowered_tuned = tvm.relay.build(relay_mod, target=TARGET, params=params)
-
-temp_dir = tvm.contrib.utils.tempdir()
-
-project = tvm.micro.generate_project(
-    str(repo_root / "src" / "runtime" / "crt" / "host"), lowered_tuned, temp_dir / "project"
-)
-
-# Compiling for physical hardware
-# --------------------------------------------------------------------------
-#    project = tvm.micro.generate_project(
-#        str(repo_root / "apps" / "microtvm" / "zephyr" / "template_project"),
-#        lowered_tuned,
-#        temp_dir / "project",
-#        {
-#            "zephyr_board": BOARD,
-#            "west_cmd": "west",
-#            "verbose": 1,
-#            "project_type": "host_driven",
-#        },
-#    )
-
-project.build()
-project.flash()
-with tvm.micro.Session(project.transport()) as session:
-    debug_module = tvm.micro.create_local_debug_executor(
-        lowered_tuned.get_graph_json(), session.get_system_lib(), session.device
-    )
-    debug_module.set_input(**lowered_tuned.get_params())
-    print("########## Build with Autotuning ##########")
-    debug_module.run()
-    del debug_module
diff --git a/docs/_downloads/68cd268dcf7da23ffba1672868ec42ed/use_pass_instrument.ipynb b/docs/_downloads/f6ff0fbc61d45d2cc0f53ebbf11a5fb5/use_pass_instrument.ipynb
similarity index 100%
rename from docs/_downloads/68cd268dcf7da23ffba1672868ec42ed/use_pass_instrument.ipynb
rename to docs/_downloads/f6ff0fbc61d45d2cc0f53ebbf11a5fb5/use_pass_instrument.ipynb
diff --git a/docs/_downloads/f83ba3df2d52f9b54cf141114359481a/micro_autotune.ipynb b/docs/_downloads/f83ba3df2d52f9b54cf141114359481a/micro_autotune.ipynb
new file mode 100644
index 0000000..86f7b55
--- /dev/null
+++ b/docs/_downloads/f83ba3df2d52f9b54cf141114359481a/micro_autotune.ipynb
@@ -0,0 +1,162 @@
+{
+  "cells": [
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "%matplotlib inline"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "\n\nAutotuning with micro TVM\n=========================\n**Authors**:\n`Andrew Reusch <https://github.com/areusch>`_,\n`Mehrdad Hessar <https://github.com/mehrdadh>`_\n\nThis tutorial explains how to autotune a model using the C runtime.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "import numpy as np\nimport subprocess\nimport pathlib\n\nimport tvm"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Defining the model\n###################\n\n To begin with, define a model in Relay to be executed on-device. Then create an IRModule from relay model and\n fill parameters with random numbers.\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "data_shape = (1, 3, 10, 10)\nweight_shape = (6, 3, 5, 5)\n\ndata = tvm.relay.var(\"data\", tvm.relay.TensorType(data_shape, \"float32\"))\nweight = tvm.relay.var(\"weight\", tvm.relay.TensorType(weight_shape, \"float32\"))\n\ny = tvm.relay.nn.conv2d(\n    data,\n    weight,\n    padding=(2, 2),\n    kernel_size=(5, 5),\n    kernel_layout=\"OIHW\",\n    out_dtype=\"float32\",\n)\nf = tvm.relay.Function([data, weight], y)\n\nrelay_mod = tvm.IRModule.from_expr(f)\nrelay_mod = tvm.r [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Defining the target #\n######################\n Now we define the TVM target that describes the execution environment. This looks very similar\n to target definitions from other microTVM tutorials.\n\n When running on physical hardware, choose a target and a board that\n describe the hardware. There are multiple hardware targets that could be selected from\n PLATFORM list in this tutorial. You can chose the platform by passing --platform argument when running\n this tutorial.\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "TARGET = tvm.target.target.micro(\"host\")\n\n# Compiling for physical hardware\n# --------------------------------------------------------------------------\n#  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The\n#  STM32L4R5ZI Nucleo target and board is chosen in the example below.\n#\n#    TARGET = tvm.target.target.micro(\"stm32l4r5zi\")\n#    BOARD = \"nucleo_l4r5zi\""
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Extracting tuning tasks\n########################\n Not all operators in the Relay program printed above can be tuned. Some are so trivial that only\n a single implementation is defined; others don't make sense as tuning tasks. Using\n `extract_from_program`, you can produce a list of tunable tasks.\n\n Because task extraction involves running the compiler, we first configure the compiler's\n transformation passes; we'll apply the same configuration later on during autotuning.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "pass_context = tvm.transform.PassContext(opt_level=3, config={\"tir.disable_vectorize\": True})\nwith pass_context:\n    tasks = tvm.autotvm.task.extract_from_program(relay_mod[\"main\"], {}, TARGET)\nassert len(tasks) > 0"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Configuring microTVM\n#####################\n Before autotuning, we need to define a module loader and then pass that to\n a `tvm.autotvm.LocalBuilder`. Then we create a `tvm.autotvm.LocalRunner` and use\n both builder and runner to generates multiple measurements for auto tunner.\n\n In this tutorial, we have the option to use x86 host as an example or use different targets\n from Zephyr RTOS. If you choose pass `--platform=host` to this tutorial it will uses x86. You can\n cho [...]
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "repo_root = pathlib.Path(\n    subprocess.check_output([\"git\", \"rev-parse\", \"--show-toplevel\"], encoding=\"utf-8\").strip()\n)\n\nmodule_loader = tvm.micro.AutoTvmModuleLoader(\n    template_project_dir=repo_root / \"src\" / \"runtime\" / \"crt\" / \"host\",\n    project_options={\"verbose\": False},\n)\nbuilder = tvm.autotvm.LocalBuilder(\n    n_parallel=1,\n    build_kwargs={\"build_option\": {\"tir.disable_vectorize\": True}},\n    do_fork=True,\n    build_func=tvm.micr [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Timing the untuned program\n###########################\n For comparison, let's compile and run the graph without imposing any autotuning schedules. TVM\n will select a randomly-tuned implementation for each operator, which should not perform as well as\n the tuned operator.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "with pass_context:\n    lowered = tvm.relay.build(relay_mod, target=TARGET, params=params)\n\ntemp_dir = tvm.contrib.utils.tempdir()\n\nproject = tvm.micro.generate_project(\n    str(repo_root / \"src\" / \"runtime\" / \"crt\" / \"host\"),\n    lowered,\n    temp_dir / \"project\",\n    {\"verbose\": False},\n)\n\n# Compiling for physical hardware\n# --------------------------------------------------------------------------\n#    project = tvm.micro.generate_project(\n#        s [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Timing the tuned program\n#########################\n Once autotuning completes, you can time execution of the entire program using the Debug Runtime:\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "with tvm.autotvm.apply_history_best(\"microtvm_autotune.log.txt\"):\n    with pass_context:\n        lowered_tuned = tvm.relay.build(relay_mod, target=TARGET, params=params)\n\ntemp_dir = tvm.contrib.utils.tempdir()\n\nproject = tvm.micro.generate_project(\n    str(repo_root / \"src\" / \"runtime\" / \"crt\" / \"host\"),\n    lowered_tuned,\n    temp_dir / \"project\",\n    {\"verbose\": False},\n)\n\n# Compiling for physical hardware\n# ----------------------------------------- [...]
+      ]
+    }
+  ],
+  "metadata": {
+    "kernelspec": {
+      "display_name": "Python 3",
+      "language": "python",
+      "name": "python3"
+    },
+    "language_info": {
+      "codemirror_mode": {
+        "name": "ipython",
+        "version": 3
+      },
+      "file_extension": ".py",
+      "mimetype": "text/x-python",
+      "name": "python",
+      "nbconvert_exporter": "python",
+      "pygments_lexer": "ipython3",
+      "version": "3.6.9"
+    }
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/docs/_downloads/f83f0c3da8a2ab10657c61e034b7218d/from_pytorch.py b/docs/_downloads/f90d5f6bfd99e0d9812ae5b91503e148/from_pytorch.py
similarity index 100%
rename from docs/_downloads/f83f0c3da8a2ab10657c61e034b7218d/from_pytorch.py
rename to docs/_downloads/f90d5f6bfd99e0d9812ae5b91503e148/from_pytorch.py
diff --git a/docs/_downloads/835a4def1e256b7a1f711621fc031418/from_darknet.ipynb b/docs/_downloads/f97d815b408ef3f4d6bcb3e073c2d4dd/from_darknet.ipynb
similarity index 100%
rename from docs/_downloads/835a4def1e256b7a1f711621fc031418/from_darknet.ipynb
rename to docs/_downloads/f97d815b408ef3f4d6bcb3e073c2d4dd/from_darknet.ipynb
diff --git a/docs/_downloads/8a7f17665207908e373e8146da09443a/deploy_prequantized.py b/docs/_downloads/fb8217c13f4351224c6cf3aacf1a87fc/deploy_prequantized.py
similarity index 100%
rename from docs/_downloads/8a7f17665207908e373e8146da09443a/deploy_prequantized.py
rename to docs/_downloads/fb8217c13f4351224c6cf3aacf1a87fc/deploy_prequantized.py
diff --git a/docs/_downloads/fd012fa7b67f4e333acce1d25a8e62bc/micro_tflite.py b/docs/_downloads/fd012fa7b67f4e333acce1d25a8e62bc/micro_tflite.py
deleted file mode 100644
index 5a39be0..0000000
--- a/docs/_downloads/fd012fa7b67f4e333acce1d25a8e62bc/micro_tflite.py
+++ /dev/null
@@ -1,319 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-"""
-microTVM with TFLite Models
-===========================
-**Author**: `Tom Gall <https://github.com/tom-gall>`_
-
-This tutorial is an introduction to working with microTVM and a TFLite
-model with Relay.
-"""
-
-######################################################################
-# .. note::
-#     If you want to run this tutorial on the microTVM Reference VM, download the Jupyter
-#     notebook using the link at the bottom of this page and save it into the TVM directory. Then:
-#
-#     #. Login to the reference VM with a modified ``vagrant ssh`` command:
-#
-#         ``$ vagrant ssh -- -L8888:localhost:8888``
-#
-#     #. Install jupyter:  ``pip install jupyterlab``
-#     #. ``cd`` to the TVM directory.
-#     #. Install tflite: poetry install -E importer-tflite
-#     #. Launch Jupyter Notebook: ``jupyter notebook``
-#     #. Copy the localhost URL displayed, and paste it into your browser.
-#     #. Navigate to saved Jupyter Notebook (``.ipynb`` file).
-#
-#
-# Setup
-# -----
-#
-# Install TFLite
-# ^^^^^^^^^^^^^^
-#
-# To get started, TFLite package needs to be installed as prerequisite. You can do this in two ways:
-#
-# 1. Install tflite with ``pip``
-#
-#     .. code-block:: bash
-#
-#       pip install tflite=2.1.0 --user
-#
-# 2. Generate the TFLite package yourself. The steps are the following:
-#
-#     Get the flatc compiler.
-#     Please refer to https://github.com/google/flatbuffers for details
-#     and make sure it is properly installed.
-#
-#     .. code-block:: bash
-#
-#       flatc --version
-#
-#     Get the TFLite schema.
-#
-#     .. code-block:: bash
-#
-#       wget https://raw.githubusercontent.com/tensorflow/tensorflow/r1.13/tensorflow/lite/schema/schema.fbs
-#
-#     Generate TFLite package.
-#
-#     .. code-block:: bash
-#
-#       flatc --python schema.fbs
-#
-#     Add the current folder (which contains generated tflite module) to PYTHONPATH.
-#
-#     .. code-block:: bash
-#
-#       export PYTHONPATH=${PYTHONPATH:+$PYTHONPATH:}$(pwd)
-#
-# To validate that the TFLite package was installed successfully, ``python -c "import tflite"``
-#
-# Install Zephyr (physical hardware only)
-# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-#
-# When running this tutorial with a host simulation (the default), you can use the host ``gcc`` to
-# build a firmware image that simulates the device. When compiling to run on physical hardware, you
-# need to install a *toolchain* plus some target-specific dependencies. microTVM allows you to
-# supply any compiler and runtime that can launch the TVM RPC server, but to get started, this
-# tutorial relies on the Zephyr RTOS to provide these pieces.
-#
-# You can install Zephyr by following the
-# `Installation Instructions <https://docs.zephyrproject.org/latest/getting_started/index.html>`_.
-#
-# Aside: Recreating your own Pre-Trained TFLite model
-#  The tutorial downloads a pretrained TFLite model. When working with microcontrollers
-#  you need to be mindful these are highly resource constrained devices as such standard
-#  models like MobileNet may not fit into their modest memory.
-#
-#  For this tutorial, we'll make use of one of the TF Micro example models.
-#
-#  If you wish to replicate the training steps see:
-#  https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/micro/examples/hello_world/train
-#
-#    .. note::
-#
-#      If you accidentally download the example pretrained model from:
-#
-#      ``wget https://storage.googleapis.com/download.tensorflow.org/models/tflite/micro/hello_world_2020_04_13.zip``
-#
-#      this will fail due to an unimplemented opcode (114)
-#
-# Load and prepare the Pre-Trained Model
-# --------------------------------------
-#
-# Load the pretrained TFLite model from a file in your current
-# directory into a buffer
-
-import os
-import numpy as np
-import logging
-
-import tvm
-import tvm.micro as micro
-from tvm.contrib.download import download_testdata
-from tvm.contrib import graph_executor, utils
-from tvm import relay
-
-model_url = "https://people.linaro.org/~tom.gall/sine_model.tflite"
-model_file = "sine_model.tflite"
-model_path = download_testdata(model_url, model_file, module="data")
-
-tflite_model_buf = open(model_path, "rb").read()
-
-######################################################################
-# Using the buffer, transform into a tflite model python object
-try:
-    import tflite
-
-    tflite_model = tflite.Model.GetRootAsModel(tflite_model_buf, 0)
-except AttributeError:
-    import tflite.Model
-
-    tflite_model = tflite.Model.Model.GetRootAsModel(tflite_model_buf, 0)
-
-######################################################################
-# Print out the version of the model
-version = tflite_model.Version()
-print("Model Version: " + str(version))
-
-######################################################################
-# Parse the python model object to convert it into a relay module
-# and weights.
-# It is important to note that the input tensor name must match what
-# is contained in the model.
-#
-# If you are unsure what that might be, this can be discovered by using
-# the ``visualize.py`` script within the Tensorflow project.
-# See `How do I inspect a .tflite file? <https://www.tensorflow.org/lite/guide/faq>`_
-
-input_tensor = "dense_4_input"
-input_shape = (1,)
-input_dtype = "float32"
-
-mod, params = relay.frontend.from_tflite(
-    tflite_model, shape_dict={input_tensor: input_shape}, dtype_dict={input_tensor: input_dtype}
-)
-
-######################################################################
-# Defining the target
-# -------------------
-#
-# Now we create a build config for relay, turning off two options and then calling relay.build which
-# will result in a C source file for the selected TARGET. When running on a simulated target of the
-# same architecture as the host (where this Python script is executed) choose "host" below for the
-# TARGET and a proper board/VM to run it (Zephyr will create the right QEMU VM based on BOARD. In
-# the example below the x86 arch is selected and a x86 VM is picked up accordingly:
-#
-TARGET = tvm.target.target.micro("host")
-BOARD = "qemu_x86"
-#
-# Compiling for physical hardware
-#  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The
-#  STM32F746 Nucleo target and board is chosen in the example below. Another option would be to
-#  choose the STM32F746 Discovery board instead. Since that board has the same MCU as the Nucleo
-#  board but a couple of wirings and configs differ, it's necessary to select the "stm32f746g_disco"
-#  board to generated the right firmware image.
-#
-#  TARGET = tvm.target.target.micro("stm32f746xx")
-#  BOARD = "nucleo_f746zg" # or "stm32f746g_disco#"
-#
-#  For some boards, Zephyr runs them emulated by default, using QEMU. For example, below is the
-#  TARGET and BOARD used to build a microTVM firmware for the mps2-an521 board. Since that board
-#  runs emulated by default on Zephyr the suffix "-qemu" is added to the board name to inform
-#  microTVM that the QEMU transporter must be used to communicate with the board. If the board name
-#  already has the prefix "qemu_", like "qemu_x86", then it's not necessary to add that suffix.
-#
-#  TARGET = tvm.target.target.micro("mps2_an521")
-#  BOARD = "mps2_an521-qemu"
-
-######################################################################
-# Now, compile the model for the target:
-
-with tvm.transform.PassContext(
-    opt_level=3, config={"tir.disable_vectorize": True}, disabled_pass=["FuseOps", "AlterOpLayout"]
-):
-    module = relay.build(mod, target=TARGET, params=params)
-
-
-# Inspecting the compilation output
-# ---------------------------------
-#
-# The compilation process has produced some C code implementing the operators in this graph. We
-# can inspect it by printing the CSourceModule contents (for the purposes of this tutorial, let's
-# just print the first 10 lines):
-
-c_source_module = module.get_lib().imported_modules[0]
-assert c_source_module.type_key == "c", "tutorial is broken"
-
-c_source_code = c_source_module.get_source()
-first_few_lines = c_source_code.split("\n")[:10]
-assert any(
-    l.startswith("TVM_DLL int32_t tvmgen_default_") for l in first_few_lines
-), f"tutorial is broken: {first_few_lines!r}"
-print("\n".join(first_few_lines))
-
-
-# Compiling the generated code
-# ----------------------------
-#
-# Now we need to incorporate the generated C code into a project that allows us to run inference on the
-# device. The simplest way to do this is to integrate it yourself, using microTVM's standard output format
-# (:doc:`Model Library Format` </dev/model_library_format>`). This is a tarball with a standard layout:
-
-# Get a temporary path where we can store the tarball (since this is running as a tutorial).
-import tempfile
-
-fd, model_library_format_tar_path = tempfile.mkstemp()
-os.close(fd)
-os.unlink(model_library_format_tar_path)
-tvm.micro.export_model_library_format(module, model_library_format_tar_path)
-
-import tarfile
-
-with tarfile.open(model_library_format_tar_path, "r:*") as tar_f:
-    print("\n".join(f" - {m.name}" for m in tar_f.getmembers()))
-
-# Cleanup for tutorial:
-os.unlink(model_library_format_tar_path)
-
-
-# TVM also provides a standard way for embedded platforms to automatically generate a standalone
-# project, compile and flash it to a target, and communicate with it using the standard TVM RPC
-# protocol. The Model Library Format serves as the model input to this process. When embedded
-# platforms provide such an integration, they can be used directly by TVM for both host-driven
-# inference and autotuning . This integration is provided by the
-# `microTVM Project API` <https://github.com/apache/tvm-rfcs/blob/main/rfcs/0008-microtvm-project-api.md>_,
-#
-# Embedded platforms need to provide a Template Project containing a microTVM API Server (typically,
-# this lives in a file ``microtvm_api_server.py`` in the root directory). Let's use the example ``host``
-# project in this tutorial, which simulates the device using a POSIX subprocess and pipes:
-
-import subprocess
-import pathlib
-
-repo_root = pathlib.Path(
-    subprocess.check_output(["git", "rev-parse", "--show-toplevel"], encoding="utf-8").strip()
-)
-template_project_path = repo_root / "src" / "runtime" / "crt" / "host"
-project_options = {}  # You can use options to provide platform-specific options through TVM.
-
-# Compiling for physical hardware (or an emulated board, like the mps_an521)
-# --------------------------------------------------------------------------
-#  For physical hardware, you can try out the Zephyr platform by using a different template project
-#  and options:
-#
-#     template_project_path = repo_root / "apps" / "microtvm" / "zephyr" / "template_project"
-#     project_options = {"project_type": "host_driven", zephyr_board": "nucleo_f746zg"}}
-
-# Create a temporary directory
-import tvm.contrib.utils
-
-temp_dir = tvm.contrib.utils.tempdir()
-generated_project_dir = temp_dir / "generated-project"
-generated_project = tvm.micro.generate_project(
-    template_project_path, module, generated_project_dir, project_options
-)
-
-# Build and flash the project
-generated_project.build()
-generated_project.flash()
-
-
-######################################################################
-# Next, establish a session with the simulated device and run the
-# computation. The `with session` line would typically flash an attached
-# microcontroller, but in this tutorial, it simply launches a subprocess
-# to stand in for an attached microcontroller.
-
-with tvm.micro.Session(transport_context_manager=generated_project.transport()) as session:
-    graph_mod = tvm.micro.create_local_graph_executor(
-        module.get_graph_json(), session.get_system_lib(), session.device
-    )
-
-    # Set the model parameters using the lowered parameters produced by `relay.build`.
-    graph_mod.set_input(**module.get_params())
-
-    # The model consumes a single float32 value and returns a predicted sine value.  To pass the
-    # input value we construct a tvm.nd.array object with a single contrived number as input. For
-    # this model values of 0 to 2Pi are acceptable.
-    graph_mod.set_input(input_tensor, tvm.nd.array(np.array([0.5], dtype="float32")))
-    graph_mod.run()
-
-    tvm_output = graph_mod.get_output(0).numpy()
-    print("result is: " + str(tvm_output))
diff --git a/docs/_images/sphx_glr_from_onnx_001.png b/docs/_images/sphx_glr_from_onnx_001.png
index 9b6e8e3..c4edf1c 100644
Binary files a/docs/_images/sphx_glr_from_onnx_001.png and b/docs/_images/sphx_glr_from_onnx_001.png differ
diff --git a/docs/_images/sphx_glr_from_onnx_thumb.png b/docs/_images/sphx_glr_from_onnx_thumb.png
index 669223c..0416e96 100644
Binary files a/docs/_images/sphx_glr_from_onnx_thumb.png and b/docs/_images/sphx_glr_from_onnx_thumb.png differ
diff --git a/docs/_images/sphx_glr_from_paddle_thumb.png b/docs/_images/sphx_glr_from_paddle_thumb.png
new file mode 100644
index 0000000..233f8e6
Binary files /dev/null and b/docs/_images/sphx_glr_from_paddle_thumb.png differ
diff --git a/docs/_sources/api/links.rst.txt b/docs/_sources/api/links.rst.txt
deleted file mode 100644
index 4b8ab4d..0000000
--- a/docs/_sources/api/links.rst.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-..  Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-..    http://www.apache.org/licenses/LICENSE-2.0
-
-..  Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
-Links to Other API References
-=============================
-
-This page contains links to API references that are build with different doc build system.
-
-* `C++ doyxgen API <doxygen/index.html>`_
-* `Typescript typedoc API <typedoc/index.html>`_
-* `Java Javadoc API <javadoc/index.html>`_
diff --git a/docs/_sources/dev/benchmark.rst.txt b/docs/_sources/arch/benchmark.rst.txt
similarity index 100%
rename from docs/_sources/dev/benchmark.rst.txt
rename to docs/_sources/arch/benchmark.rst.txt
diff --git a/docs/_sources/dev/convert_layout.rst.txt b/docs/_sources/arch/convert_layout.rst.txt
similarity index 100%
rename from docs/_sources/dev/convert_layout.rst.txt
rename to docs/_sources/arch/convert_layout.rst.txt
diff --git a/docs/_sources/dev/debugger.rst.txt b/docs/_sources/arch/debugger.rst.txt
similarity index 100%
rename from docs/_sources/dev/debugger.rst.txt
rename to docs/_sources/arch/debugger.rst.txt
diff --git a/docs/_sources/dev/device_target_interactions.rst.txt b/docs/_sources/arch/device_target_interactions.rst.txt
similarity index 100%
rename from docs/_sources/dev/device_target_interactions.rst.txt
rename to docs/_sources/arch/device_target_interactions.rst.txt
diff --git a/docs/_sources/dev/frontend/tensorflow.rst.txt b/docs/_sources/arch/frontend/tensorflow.rst.txt
similarity index 100%
rename from docs/_sources/dev/frontend/tensorflow.rst.txt
rename to docs/_sources/arch/frontend/tensorflow.rst.txt
diff --git a/docs/_sources/dev/hybrid_script.rst.txt b/docs/_sources/arch/hybrid_script.rst.txt
similarity index 100%
rename from docs/_sources/dev/hybrid_script.rst.txt
rename to docs/_sources/arch/hybrid_script.rst.txt
diff --git a/docs/_sources/dev/index.rst.txt b/docs/_sources/arch/index.rst.txt
similarity index 100%
rename from docs/_sources/dev/index.rst.txt
rename to docs/_sources/arch/index.rst.txt
diff --git a/docs/_sources/dev/inferbound.rst.txt b/docs/_sources/arch/inferbound.rst.txt
similarity index 100%
rename from docs/_sources/dev/inferbound.rst.txt
rename to docs/_sources/arch/inferbound.rst.txt
diff --git a/docs/_sources/dev/introduction_to_module_serialization.rst.txt b/docs/_sources/arch/introduction_to_module_serialization.rst.txt
similarity index 100%
rename from docs/_sources/dev/introduction_to_module_serialization.rst.txt
rename to docs/_sources/arch/introduction_to_module_serialization.rst.txt
diff --git a/docs/_sources/arch/microtvm_design.rst.txt b/docs/_sources/arch/microtvm_design.rst.txt
new file mode 100644
index 0000000..087b816
--- /dev/null
+++ b/docs/_sources/arch/microtvm_design.rst.txt
@@ -0,0 +1,351 @@
+..  Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+..    http://www.apache.org/licenses/LICENSE-2.0
+..  Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+.. _microtvm-design:
+
+**************************
+microTVM Design Document
+**************************
+
+.. contents:: Table of Contents
+    :depth: 3
+
+Background
+===========
+
+TVM is a model deployment framework that has demonstrated good performance across a wide range of
+models on traditional operating systems. Given TVM's layered approach to compilation, it is a
+natural extension to target bare metal devices. While most of the compilation flow does not need to
+change for a proof-of-concept implementation on such devices, the runtime cannot depend on:
+
+* **Virtual Memory**, and by extension any system-provided ``malloc``. Additionally, bare metal
+  devices typically have very limited memory (measured in KB). Because of this, libraries designed
+  for such platforms typically need to be more judicious in using memory, and need to release
+  memory when it is not in use.
+* Traditional OS abstractions, such as **files**, **libraries**, and **kernel functions**. Some
+  projects implement support for these, but they are by no means standard.
+* Support for programming languages other than **C**.
+
+Such changes require a different approach from the TVM C++ runtime typically used on traditional
+Operating Systems.
+
+Typical Use
+===========
+
+This section discusses our vision of the "typical" microTVM use case. Each component used to achieve
+this typical use case is intended to be designed for flexibility, but this unifying vision serves to
+motivate the inclusion of each part of the design.
+
+.. figure:: https://raw.githubusercontent.com/tvmai/web-data/main/images/dev/microtvm_workflow.svg
+   :align: center
+   :width: 85%
+
+The parts of this process are described below:
+
+#. **Model Import**. The user imports an existing model or describes a new model to TVM, producing a
+   *Relay module*.
+
+#. **Model Transformations**. The user can apply transformations, such as quantization, to the
+   model. After each transformation, the user should still have a Relay module.
+
+#. **Compilation** (Scheduling and Code Generation). TVM implements each operator into Tensor IR by
+   assigning a schedule and schedule configuration to each Relay operator. Then, code (C source or
+   compiled object) is generated for each operator.
+
+#. **Integration**. The generated code is integrated along with the TVM C Runtime library into a
+   user-supplied binary project. In some cases (such as when the project is standardized across
+   multiple SoC/development boards), this process is handled automatically.
+
+#. **Deployment**. The project is built and the residual firmware binary is flashed onto the device.
+   Model inference is driven either by TVM using an on-device RPC server, or on the device using the
+   on-device Graph Executor.
+
+Design Goals
+============
+
+microTVM aims to achieve these design goals:
+
+1. **Portable Code**. microTVM can translate any Relay model into C code that can compile with only
+   a C standard library.
+2. **Minimal Overhead**. microTVM generates target-specific, highly optimized code. As much overhead
+   from the runtime should be removed.
+3. **Accessible Code**. microTVM considers C source code as a first-class output mechanism so that
+   it is easier for a firmware engineer to understand and tweak.
+
+Overview
+========
+
+microTVM requires changes at all levels of the TVM compiler stack. The following sub-sections enumerate
+these changes at a high level, and follow-on sections discuss the specifics in more detail.
+
+Modeling Target Platforms
+-------------------------
+
+TVM's search-based optimization approach allows it to largely avoid system-level modeling of targets
+in favor of experimental results. However, some modeling is necessary in order to ensure TVM is
+comparing apples-to-apples search results, and to avoid wasting time during the search by attempting
+to compile invalid code for a target.
+
+microTVM models these parts of the target:
+
+* The CPU used, through the ``-mcpu`` and ``-march`` target flags.
+* The presence or absence of accelerators, through the device components of the target (Currently
+  only the absence of accelerators can be expressed, but this mechanism should extend well).
+
+microTVM aims to model these parts of the target in the future:
+
+* Memory, modeled as a set of disjoint memory spaces, each with a label and size and prefetch/flush
+  behavior. Some memory may be shared with accelerators.
+* Target runtime configuration (i.e. clock tree configuration, clock speed, etc). This is intended
+  only to contribute to the AutoTVM schedule key and not for any other use.
+
+At this time, TVM does not intend to model:
+
+* Size, type, or relationship of caches, with the exception of prefetching or cache flushing.
+
+
+TVM Targets for microTVM
+-------------------------
+
+A central data structure in the compilation process is the ``tvm::target::Target`` class. TVM uses
+Target to decide which TIR schedules to enable and how to configure the code generator. The Target
+class should also uniquely identify the generated code for a particular operator, as autotuning
+logs use it to rank measured performance (but see Future Work).
+
+Targets are currently represented as strings structured similarly to command-line arguments. An
+example target is shown below:
+
+    ``c -keys=arm_cpu -mcpu=cortex-m7 -link-params -model=stm32f746xx -runtime=c -system-lib=1``
+
+The relevant parts to microTVM are:
+
+ * Code generator (``llvm`` or ``c``)
+ * ``-mcpu=cortex-m7``: used by TOPI to enable Cortex-M schedules, and, when the C source code
+   generator is selected, included in the output as a comment to help identify the code and
+   configure the downstream C compiler.
+ * ``-link-params``: include parameters as global constants to load from flash.
+ * ``-runtime=c``: build glue code to allow operators to work with the C runtime
+ * ``-system-lib=1``: emit a system library (i.e. which can be loaded by calling the PackedFunc
+   ``runtime.SystemLib``.
+
+Writing Schedules for microTVM
+------------------------------
+
+For operations scheduled on the CPU, microTVM initially plans to make use of specialized
+instructions and extern (i.e. hand-optimized) functions to achieve good performance. In TVM, this
+approach is generally accomplished through tensorization, in which TVM breaks a computation into
+small pieces, and a TIR extern function accelerates each small piece.
+
+TVM currently accommodates both approaches using ``tir.call_extern``. First, a pragma is attached to
+the schedule defining the extern function in portable C.
+
+    ``sched[output].pragma(n, "import_c", "void call_asm(int32_t* a, int32_t* b) { /* ... */ }")``
+
+Next, ``tensorize`` is used to split the computation.
+
+    ``sched[output].tensorize(owi, gemm)``
+
+There are a couple of caveats to this approach, all which could be resolved by linking generated
+code against external libraries:
+
+* Inline assembly is compiler-specific. While Clang and GCC have standardized on one syntax, this
+  may not be portable to other compilers. SDKs solve this by conditionally including a header file
+  depending on the compiler being used. However, taking this approach means that the generated code
+  needs additional compiler flags (i.e. ``-Isystempath/to/header``).
+* It may be helpful to reference helper functions from the generated code (e.g. to inline common
+  sequences of hand-optimized assembly).
+* Finally, the extern function invoked may be wholly written in an external library. If those
+  functions can be wholly inlined, this caveat is the same as the previous. If not, then additional
+  C code needs to be compiled and linked against the operator.
+
+At present, microTVM presumes that all eligible schedules can be compiled. This means that the user-
+supplied project (see next section) must include all libraries that are used by the generated code.
+When not using autotuning, TVM randomly chooses a fallback schedule, so all libraries would need to
+be supported. When using autotuning, TVM selects the best-performing schedule, so only that library
+is needed. There isn't currently a way to force TVM to pick a particular schedule outside of
+autotuning logs, but that would be a good addition.
+
+Finally, when using the ``llvm`` backend, the process is similar except that LLVM bitcode is included
+in the generated code (with an ``import_llvm`` pragma). LLVM bitcode provides a portable way to call
+inline assembly. However, it may be more complex to call external C functions, and helper functions
+are of course not easy to use from LLVM bitcode.
+
+Executing Models
+----------------
+
+The TVM compiler traditionally outputs three pieces:
+
+1. Model operator implementations, as discussed above;
+2. A model execution graph, encoded as JSON; and
+3. Simplified parameters.
+
+To correctly execute the model, a Graph Executor needs to reconstruct the graph in memory, load the
+parameters, and then invoke the operator implementations in the correct order.
+
+microTVM supports two ways to do this:
+
+1. **Host-Driven**. The Graph Executor can run on the host and carry out execution by issuing
+   commands to the device using an RPC link with a UART-like transport.
+2. **Standalone**. A C Graph Executor is available to be compiled on-device, but it is not
+   particularly memory efficient. This way enables standalone execution without any attached host.
+
+Host-Driven is designed for experimenting with models on-device and, like AutoTVM, uses the RPC server to
+drive computation on-device. Standalone is intended for deployment.
+
+Host-Driven Execution
+^^^^^^^^^^^^^^^^^^^^^
+
+In Host-Driven execution, the firmware binary is the following:
+
+1. Generated operator implementations from TVM.
+2. The TVM C runtime.
+3. SoC-specific initialization.
+4. The TVM RPC server.
+5. (optional) Simplified Parameters.
+
+This firmware image is flashed onto the device and a GraphExecutor instance is created on the host.
+The GraphExecutor drives execution by sending RPC commands over a UART:
+
+.. figure:: https://raw.githubusercontent.com/tvmai/web-data/main/images/dev/microtvm_host_driven.svg
+   :align: center
+   :width: 85%
+
+Standalone Execution
+^^^^^^^^^^^^^^^^^^^^
+
+In Standalone execution, the GraphExecutor is instantiated on device:
+
+.. figure:: https://raw.githubusercontent.com/tvmai/web-data/main/images/dev/microtvm_standalone.svg
+   :align: center
+   :width: 85%
+
+microTVM Firmware
+------------------
+
+We can now discuss how microTVM firmware should behave. An important task common to both model
+execution strategies is configuring the SoC to match the way it performs in production. microTVM
+considers this task project- and SoC-dependent. Whether for AutoTVM, host-driven model inference, or
+in standalone deployment, the user is expected to supply a project whose main() does the following:
+
+1. Configure the SoC to match deployment performance.
+2. Initialize the TVM C Runtime.
+
+When configuring for host-driven inference or AutoTVM, the remaining tasks are well-defined:
+
+3. Initialize a transport (i.e. a UART) for use with the TVM RPC server.
+4. Launch the TVM RPC Server.
+
+When configuring for standalone deployment, the firmware needs to:
+
+1. Instantiate the system library by calling the ``runtime.SystemLib`` PackedFunc.
+2. Instantiate a GraphExecutor passing the system library module.
+3. Configure parameters and inputs as needed.
+4. Run the model.
+
+Parts of a microTVM Binary
+--------------------------
+
+To summarize, a microTVM firwmare binary image must contain these parts:
+
+1. Operator implementations, produced by TVM.
+2. The TVM C runtime library, supplied by TVM as a static library.
+3. SoC Initialization, supplied by the user.
+
+For Host-driven model execution, firmware also needs:
+
+4. The TVM RPC Server library.
+
+For Standalone model execution, firmware also needs:
+
+4. The TVM C GraphExecutor library, supplied by TVM as a static library.
+5. The remaining compiler outputs (Simplified Parameters and Graph JSON).
+
+The Automated Build Flow
+------------------------
+
+Once code generation is complete, ``tvm.relay.build`` returns a ``tvm.runtime.Module`` and the
+user can save the generated C source or binary object to a ``.c`` or ``.o`` file. From this point, TVM
+can theoretically step back and the user can compile and run the code separately.
+
+However, for AutoTVM, TVM needs some automated flow to handle the following tasks:
+
+1. Integrate operator implementations, the TVM C Runtime library, and the TVM RPC Server library into the
+   firmware project containing user-supplied SoC Initialization.
+2. Build the resulting project.
+3. Program the built firmware onto a (specific) attached device.
+4. Identify the serial port or other transport to be used by TVM to drive remote execution.
+
+At present, TVM expects the user to supply an implementation of the ``tvm.micro.Compiler``,
+``tvm.micro.Flasher``, and ``tvm.micro.Transport`` interfaces. TVM then:
+
+1. Builds each piece separately as a library.
+2. Builds the libraries into a binary firmware image.
+3. Programs the firmware image onto an attached device.
+4. Opens a serial port to serve as the RPC server transport.
+
+This design was chosen to reduce build times for microTVM (the common libraries need to be built
+only once per candidate operator implemmentation). In practice, these projects are extremely small
+and compile relatively quickly. Compared with the added complexity of this tighter build integration
+with TVM, the performance gains are likely not worth it. A future design will consolidate the build
+tasks into a single step and narrow the interface to provide a better integration.
+
+Measuring operator performance
+------------------------------
+
+The TVM C runtime depends on user-supplied functions to measure time on-device. Users should implement
+``TVMPlatformTimerStart`` and ``TVMPlatformTimerStop``. These functions should measure wall clock time, so there
+are some pitfalls in implementing these functions:
+
+1. If the CPU could halt or sleep during a computation (i.e. if it is being done on an accelerator),
+   a cycle counter should likely not be used as these tend to stop counting while the CPU is asleep.
+2. The granularity of these functions can be relaxed as needed to extend the range of the timer
+   device. However, if granularity is too coarse, a sub-optimal schedule may be used.
+3. An error should be raised if the timer overflows.
+4. The timer should not interrupt computation unless absolutely necessary. Doing so may affect the
+   accuracy of the results.
+5. Calibrating the output against a wall clock is ideal, but it will likely be too cumbersome. A
+   future PR could enable some characterization of the platform timer by, e.g., measuring the internal
+   oscillator against a reference such as an external crystal.
+
+Future Work
+===========
+
+Ahead-of-Time Runtime
+----------------------
+
+A limitation of the Graph Executor is the amount of memory overhead required in parsing the JSON.
+The current implementation contributes significantly to the dynamic memory usage of microTVM,
+limiting its utility. An ahead-of-time runtime can avoid the need for any Graph JSON parsing and
+improve inference speed by generating C code to call the generated operator implementations directly
+rather than relying on a data-driven approach with the Graph Executor.
+
+Memory Planning
+----------------
+
+The current memory planner attempts to limit the number of ``TVMBackendDeviceAlloc()`` calls
+issued for intermediate tensors only. Because scratchpads can vary widely, and because the planner
+coalesces memory allocations within 16x of each other, this strategy typically results in high
+peak memory usage.
+
+Heterogeneous Execution
+-----------------------
+
+Newer Cortex-M SoCs can contain multiple CPUs and onboard ML accelerators.
+
+
+Autotuning Target
+-----------------
+
+As discussed previously,
diff --git a/docs/_sources/dev/model_library_format.rst.txt b/docs/_sources/arch/model_library_format.rst.txt
similarity index 100%
rename from docs/_sources/dev/model_library_format.rst.txt
rename to docs/_sources/arch/model_library_format.rst.txt
diff --git a/docs/_sources/dev/pass_infra.rst.txt b/docs/_sources/arch/pass_infra.rst.txt
similarity index 100%
rename from docs/_sources/dev/pass_infra.rst.txt
rename to docs/_sources/arch/pass_infra.rst.txt
diff --git a/docs/_sources/dev/relay_intro.rst.txt b/docs/_sources/arch/relay_intro.rst.txt
similarity index 100%
rename from docs/_sources/dev/relay_intro.rst.txt
rename to docs/_sources/arch/relay_intro.rst.txt
diff --git a/docs/_sources/dev/relay_op_strategy.rst.txt b/docs/_sources/arch/relay_op_strategy.rst.txt
similarity index 100%
rename from docs/_sources/dev/relay_op_strategy.rst.txt
rename to docs/_sources/arch/relay_op_strategy.rst.txt
diff --git a/docs/_sources/dev/runtime.rst.txt b/docs/_sources/arch/runtime.rst.txt
similarity index 100%
rename from docs/_sources/dev/runtime.rst.txt
rename to docs/_sources/arch/runtime.rst.txt
diff --git a/docs/_sources/dev/runtimes/vulkan.rst.txt b/docs/_sources/arch/runtimes/vulkan.rst.txt
similarity index 100%
rename from docs/_sources/dev/runtimes/vulkan.rst.txt
rename to docs/_sources/arch/runtimes/vulkan.rst.txt
diff --git a/docs/_sources/dev/security.rst.txt b/docs/_sources/arch/security.rst.txt
similarity index 100%
rename from docs/_sources/dev/security.rst.txt
rename to docs/_sources/arch/security.rst.txt
diff --git a/docs/_sources/arch/virtual_machine.rst.txt b/docs/_sources/arch/virtual_machine.rst.txt
new file mode 100644
index 0000000..c532392
--- /dev/null
+++ b/docs/_sources/arch/virtual_machine.rst.txt
@@ -0,0 +1,410 @@
+..  Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+..    http://www.apache.org/licenses/LICENSE-2.0
+
+..  Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+Putting the VM in TVM: The Relay Virtual Machine
+================================================
+
+Relay, a new program representation, has enabled the representation and optimization of
+a great breadth of machine learning programs.
+Unfortunately, by supporting a more expressive set of programs, we have
+introduced several new execution challenges.
+
+Relay's interpreter can execute the full language but has notable limitations
+that make it unsuited for production deployments. It is structured as an inefficient
+interpreter that performs AST traversal to execute the program. This approach is conceptually
+simple but inefficient, as the AST traversal heavily relies on indirection.
+
+There are further challenges in compiling dynamic code, such as dynamic scheduling and allocation,
+fully dynamic tensor shapes, and control flow. The interpreter offers simple solutions
+for these, but none is sufficiently compelling or optimized.
+
+The second execution mechanism is the existing graph executor. In order to target Relay
+programs to this, we compile a small subset of them to the old graph format and execute
+them on the runtime. Graph executor provides a fast execution experience but only for a very limited
+subset of Relay programs.
+
+An alternative but not-standard approach is Relay's ahead-of-time compiler,
+which compiles a Relay program into a shared library containing an ahead-of-time
+implementation. The ahead-of-time compiler provides compelling performance
+but is difficult to extend and instrument, which can only be done by modifying the
+code generation and optimization mechanisms.
+
+The Relay virtual machine is intended to be a framework that balances these competing
+approaches, providing a dynamic execution environment which can be extended, instrumented,
+and integrated with other approaches like ahead-of-time compilation via a flexible extension
+mechanism.
+
+The virtual machine is designed to strike a balance between performance and flexibility
+when deploying and executing Relay programs, without giving up the benefits of TVM.
+
+Virtual machine (VM) design is a well-studied area in programming languages and systems,
+and there have been various virtual machine designs for both full-fledged
+and embedded programing languages.
+Previous language VM designs have been heavily tailored to the execution profile of traditional programs.
+Traditional programs manipulate small scalar values and consist of a large number of low-level instructions.
+The sheer quantity of instructions requires instruction execution and dispatch to be extremely efficient.
+In the context of machine learning we manipulate primarily tensor values, using a (relatively)
+low number of high level instructions. ML programs' cost centers are expensive operator invocations,
+such as GEMM or convolution, over a large input. Due to the execution profile exhibited by ML programs,
+micro-optimizations present in scalar VMs are dramatically less important.
+
+TVM has provided strong support for vision models,
+but we want to grow to support a wider variety of models.
+The graph executor is able to utilize the fully static nature of the input graphs to perform
+aggressive optimization such as fully static allocation, and optimal memory reuse.
+When we introduce models which make use of control flow, recursion, dynamic shapes, and dynamic
+allocation, we must change how execution works. A virtual machine for Relay is a natural choice.
+
+The rest of this document provides a high-level overview of the Relay
+virtual machine design and its instruction set.
+
+Design
+------
+
+The VM's design is focused on simplicity without sacrificing performance.
+In order to accomplish this we have focused on designing a tensor VM rather than a scalar VM.
+
+In the tensor VM setting, we optimize for cheap “allocation” of objects (by trying to avoid real allocation),
+reuse of static fragments, and the ability to do dynamic shape (i.e jagged tensors).
+
+Instruction Set
+~~~~~~~~~~~~~~~
+
+The choices of an instruction set and instruction representation are the most critical design decisions for a VM.
+The current representation of the instructions is a tagged union containing the op-code and the data payload.  An important design decision is the level of abstraction of the instructions (RISC vs. CISC) and how they take their data (fixed-width instruction encoding vs. variable-length encoding). The current version is closer to CISC, with complex instructions like AllocTensor, and is variable-length due to the inclusion of the shape as part of the instruction. The current instruction se [...]
+
+Ret
+^^^
+**Arguments**:
+::
+
+  RegName dst
+  RegName result
+
+Returns the object in register ``result`` to caller's register ``dst``.
+
+InvokePacked
+^^^^^^^^^^^^
+**Arguments**:
+::
+
+  Index packed_index
+  Index arity
+  Index output_size
+  RegName* packed_args
+
+Invoke the packed function denoted by ``packed_index``. The ``arity``
+and ``output_size`` are used to inform the VM how many inputs and
+outputs to expect. ``packed_args`` stores the list of argument registers. Note ``Index``
+is an alias of ``int64_t``, and it will be used in other instructions as well.
+
+AllocTensor
+^^^^^^^^^^^
+**Arguments**:
+::
+
+  RegName dst
+  RegName storage
+  uint32_t ndim
+  int64_t* shape
+  DLDataType dtype
+
+Allocate a tensor value of using constant shape (stored in ``shape``) and ``dtype``
+from the given storage block, ``storage``. The result is saved to register ``dst``.
+
+AllocTensorReg
+^^^^^^^^^^^^^^
+**Arguments**:
+::
+
+  RegName dst
+  RegName storage
+  RegName shape_register
+  DLDataType dtype
+
+Allocate a tensor value of the appropriate shape (stored in ``shape_register``)
+and ``dtype`` from the given storage block (stored in ``storage``). The result is saved to register ``dst``.
+
+AllocStorage
+^^^^^^^^^^^^
+**Arguments**:
+::
+
+  RegName dst
+  RegName size
+  RegName alignment
+  DLDataType dtype_hint
+
+Allocate a storage block with the given ``size``, ``alignment`` and data type, ``dtype_hint``.
+The allocated storage block is stored in register ``dst``.
+
+AllocADT
+^^^^^^^^
+**Arguments**:
+::
+
+  RegName dst
+  Index tag
+  Index num_fields
+  RegName* datatype_fields
+
+Allocate a data type with the tag ``tag`` using the ``num_fields`` entries
+from registers ``datatype_fields``. The result is saved to register ``dst``.
+
+AllocClosure
+^^^^^^^^^^^^
+**Arguments**:
+::
+
+  RegName dst
+  Index clo_index
+  Index num_freevar
+  RegName* free_vars;
+
+Allocate a closure with the VMFunction at ``clo_index`` as
+its code, and the ``num_freevar`` entries from registers in
+``free_vars``. The result is saved to register ``dst``.
+
+GetField
+^^^^^^^^
+**Arguments**:
+::
+
+  RegName dst
+  RegName object
+  Index field_index
+
+Get the field value with index ``field_index`` from ``object``. And saves the result to register ``dst``.
+
+If
+^^
+**Arguments**:
+::
+
+  RegName test
+  RegName target
+  Index true_offset
+  Index false_offset
+
+Check if the object at register ``test`` is equal to ``target``.
+If equal, relative jump by ``true_offset``, else relative
+jump by ``false_offset``.
+
+GetTag
+^^^^^^
+**Arguments**:
+::
+
+  RegName object
+  RegName dst
+
+Get the object tag for ADT object in register ``object``. And saves the reult to register ``dst``.
+
+Fatal
+^^^^^
+Fail the virtual machine execution.
+
+Goto
+^^^^
+**Arguments**:
+::
+
+  Index pc_offset
+
+Relative unconditional jump by ``pc_offset``.
+
+Invoke
+^^^^^^
+**Arguments**:
+::
+
+  Index func_index
+
+Invoke function at ``func_index``, consumes the number of arguments contained in the VMFunction's
+arity field.
+
+InvokeClosure
+^^^^^^^^^^^^^
+**Arguments**:
+::
+
+    RegName closure
+    Index num_closure_args
+    RegName* closure_args
+
+Invokes ``closure``, consuming the number of arguments declared in the closure's VMFunction.
+
+LoadConst
+^^^^^^^^^
+**Arguments**:
+::
+
+  RegName dst
+  Index const_index
+
+Load the constant at ``const_index`` from the constant pool. The result is saved to register ``dst``.
+
+LoadConsti
+^^^^^^^^^^
+**Arguments**:
+::
+
+  Index val
+  RegName dst
+
+Load the constant integer ``val`` to register ``dst``. The result is a 0-rank tensor.
+
+Object Representation
+~~~~~~~~~~~~~~~~~~~~~
+We leverage the object protocol to represent the objects that are used by the
+VM.
+
+Currently, three types of objects, ``NDArray``, ``ADT``, and ``Closure`` objects, are used
+to represent tensor, tuple/list, and closure data, respectively. More details
+for each of them can be found at `include/tvm/runtime/ndarray.h`_,
+`include/tvm/runtime/vm/vm.h`_, and `include/tvm/runtime/container.h`_, respectively.
+
+.. _include/tvm/runtime/ndarray.h: https://github.com/apache/tvm/blob/main/include/tvm/runtime/ndarray.h
+
+.. _include/tvm/runtime/vm/vm.h: https://github.com/apache/tvm/blob/main/include/tvm/runtime/vm/vm.h
+
+.. _include/tvm/runtime/container.h: https://github.com/apache/tvm/blob/main/include/tvm/runtime/container.h
+
+Stack and State
+~~~~~~~~~~~~~~~
+
+The Relay VM maintains a stack frame, which contains information about how to resume the
+previous call. Registers are allocated in a continuous space (virtual register file) for each function.
+
+We keep track of a set of Relay functions we have called, a pointer into its bytecode, an offset into the byte code (known as the program counter).
+
+.. code-block:: c
+
+    struct VirtualMachine {
+      ...
+      std::vector<VMFrame> frames;
+      ...
+      // Current function.
+      size_t func_index;
+      // Pointer into the current function's instructions.
+      const Instruction* code;
+      // Current program counter relative to the code pointer.
+      size_t pc;
+      ...
+    };
+
+
+Dispatch Loop
+~~~~~~~~~~~~~
+A critical piece of a VM is the dispatch loop. The dispatch loop usually dominates the execution time of a
+virtual machine, but we have experimentally found this not to be the case for Relay. We have just implemented
+a simple ``switch``/``goto`` dispatch loop which dispatches based on instruction op code.
+
+This loop is implemented by ``VirtualMachine::Run()``.
+
+VM Compiler
+~~~~~~~~~~~
+
+An important part of this infrastructure is a compiler from Relay's full IR into a sequence of bytecode.
+The VM compiler transforms a ``tvm::relay::Module`` into a ``tvm::relay::vm::Executable``. The executable
+contains a set of compiled functions, the compiled functions are contained in ``tvm::relay::vm::Function``.
+The functions contain metadata about the function as well as its compiled bytecode. The emitted executable
+object then can be loaded and run by a ``tvm::relay::vm::VirtualMachine`` object. For full definitions of the
+data structures, please see `include/tvm/runtime/vm/executable.h`_ and `include/tvm/runtime/vm/vm.h`_.
+
+.. _include/tvm/runtime/vm/executable.h: https://github.com/apache/tvm/blob/main/include/tvm/runtime/vm/executable.h
+
+Optimizations
+~~~~~~~~~~~~~
+
+There are quite a few optimizations required by the VM compiler. Each of them
+is implemented as a pass which is managed by the Relay pass manager.
+
+Optimizations marked with `TODO` are not implemented yet.
+
+- A-Normal Form
+- Lambda Lift (see `src/relay/vm/lambda_lift.cc`_)
+- Inline Primitives (see `src/relay/vm/inline_primitives.cc`_)
+- Constant Pool Layout (see `src/relay/backend/vm/compiler.cc`_)
+- Tail Call Optimization (TODO)
+- Liveness Analysis (TODO)
+
+.. _src/relay/vm/lambda_lift.cc: https://github.com/apache/tvm/blob/main/src/relay/backend/vm/lambda_lift.cc
+
+.. _src/relay/vm/inline_primitives.cc: https://github.com/apache/tvm/blob/main/src/relay/backend/vm/inline_primitives.cc
+
+.. _src/relay/backend/vm/compiler.cc: https://github.com/apache/tvm/blob/main/src/relay/backend/vm/compiler.cc
+
+Serialization
+~~~~~~~~~~~~~
+
+Serializing and deserializing the executable generated by the Relay VM compiler is a must as
+we may want to save the model to the disk and perform inference later. Previously, Relay has produced
+a serialized form in a json file for the graph executor. However, the same format is not directly
+applicable to the VM as it emits bytecode instead of graph-style programs.
+Serialization of an executable essentially needs to handle both model specific
+(i.e. weights and kernels) and VM related (i.e. bytecode and global function names) data.
+
+For kernels, we can conveniently leverage existing TVM infra to save and load
+the compiled library module. Here we only focus on serializing other several
+components in a binary format that is organized with the following sections in order.
+
+- Global section. This section contains the globals (function names) used by the virtual machine.
+
+- Constant section. This section is used to store the constant pool (i.e. weights of the model)
+  for a virtual machine.
+
+- Primitive name section. This section is introduced to accommodate the list of primitive
+  operator names that will be invoked by the virtual machine, i.e. the names
+  starting with ``fused_``. The primitive names are used as symbols to look up
+  function pointers in the compiled kernel library.
+
+- Code section. The VM functions, including bytecode, are sitting in this section. The dispatching
+  loop iterates through this section to fetch instructions for execution.
+
+Hence, unlike the graph executor artifact that contains weight (.params), graph json (.json),
+and compiled kernel library (.so), the serialized executable artifact is composed of the Relay
+object file (.ro) and the compiled kernel library (.so).
+
+A ``save`` function is implemented to store the executable to the disk and
+serialize it into the above format. Meanwhile, a ``load_exec`` function is used to
+load the serialized kernel binary and executable related binary code, which will be again used to
+instantiate a VM object. Please refer to the `test_vm_serialization.py`_ file for more
+examples.
+
+.. _test_vm_serialization.py: https://github.com/apache/tvm/blob/main/tests/python/relay/test_vm_serialization.py
+
+Unresolved Questions
+~~~~~~~~~~~~~~~~~~~~
+
+How do we handle dynamic shapes?
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Dynamic shape support is ongoing work in TVM as we upgrade Relay, TVM's compiler.  For the most recent updates on
+dynamic shape support, we recommend following updates in TVM's Discuss forum (https://discuss.tvm.apache.org/).
+
+How can we modify the VM to support JIT compilation of certain code paths?
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In the code generation space there are still many tradeoffs to be analyzed and the VM is designed
+to be very flexible so we can modify it for future experiments.
+
+How do we support heterogenous execution?
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Heterogenous execution should work out of the box assuming we have annotated the appropriate device copies.
+In order to do this properly we need to run the device annotation and copying passes.
diff --git a/docs/_sources/contribute/document.rst.txt b/docs/_sources/contribute/document.rst.txt
index 3652a28..e3d12e8 100644
--- a/docs/_sources/contribute/document.rst.txt
+++ b/docs/_sources/contribute/document.rst.txt
@@ -17,22 +17,125 @@
 
 .. _doc_guide:
 
-Write Document and Tutorials
-============================
+Write Documentation for TVM
+===========================
+
+TVM documentation loosely follows the `formal documentation style described by
+Divio <https://documentation.divio.com>`_. This system has been chosen because
+it is a "simple, comprehensive and nearly universally-applicable scheme. It is
+proven in practice across a wide variety of fields and applications."
+
+This document describes the organization of TVM documentation, and how to write
+new documentation.
+
+The Four Document Types
+***********************
+
+Introductory Tutorials
+----------------------
+
+These are step by step guides to introduce new users to a project. An
+introductory tutorial is designed to get a user engaged with the software
+without necessarily explaining why the software works the way it does. Those
+explanations can be saved for other document types. An introductory tutorial
+focuses on a successful first experience. These are the most important docs to
+turning newcomers into new users and developers. A fully end-to-end
+tutorial&mdash; from installing TVM and supporting ML software, to creating and
+training a model, to compiling to different architectures&mdash;will give a new
+user the opportunity to use TVM in the most efficient way possible. A tutorial
+teaches a beginner something they need to know. This is in contrast with a
+how-to, which is meant to be an answer to a question that a user with some
+experience would ask.
+
+Tutorials need to be repeatable and reliable, because the lack of success means
+a user will look for other solutions.
+
+How-to Guides
+-------------
+
+These are step by step guides on how to solve particular problems. The user can
+ask meaningful questions, and the documents provide answers. An examples of
+this type of document might be, "how do I compile an optimized model for ARM
+architecture?" or "how do I compile and optimize a TensorFlow model?" These
+documents should be open enough that a user could see how to apply it to a new
+use case. Practical usability is more important than completeness. The title
+should tell the user what problem the how-to is solving.
+
+How are tutorials different from how-tos? A tutorial is oriented towards the
+new developer, and focuses on successfully introducing them to the software and
+community. A how-to, in contrast, focuses on accomplishing a specific task
+within the context of basic understanding. A tutorial helps to on-board and
+assumes no prior knowledge. A how-to assumes minimum knowledge, and is meant to
+guide someone to accomplish a specific task.
+
+Reference
+---------
+
+Reference documentation describes how the software is configured and operated.
+APIs, key functions, commands, and interfaces are all candidates for reference
+documentation. These are the technical manuals that let users build their own
+interfaces and programs. They are information oriented, focused on lists and
+descriptions. You can assume that the audience has a grasp on how the software
+works and is looking for specific answers to specific questions. Ideally, the
+reference documentation should have the same structure as the code base and be
+generated automatically as much as possible.
+
+Architecture Guides
+-------------------
+
+Architecture Guides are explanations are background material on a topic. These
+documents help to illuminate and understand the application environment. Why
+are things the way they are? What were the design decisions, what alternatives
+were considered, what are the RFCs describing the existing system? This
+includes academic papers and links to publications relevant to the software.
+Within these documents you can explore contradictory and conflicting position,
+and help the reader make sense of how and why the software was built the way it
+is. It's not the place for how-tos and descriptions on how to accomplish tasks.
+They instead focus on higher level concepts that help with the understanding of
+the project.  Generally these are written by the architects and developers of
+the project, but can useful to help both users and developers to have a deeper
+understanding of why the software works the way it does, and how to contribute
+to it in ways that are consistent with the underlying design principles.
+
+Special considerations for TVM
+------------------------------
+
+The TVM community has some special considerations that require deviation from
+the simple docs style outlined by Divio. The first consideration is that there
+is frequently overlap between the user and developer communities. Many projects
+document the developer and user experience with separate systems, but it is
+appropriate to consider both in this system, with differentiations where
+appropriate. As a result the tutorials and how-tos will be divided between
+"User Guides" that focus on the user experience, and "Developer Guides" that
+focus on the developer experience.
+
+The next consideration is that there are special topics within the TVM
+community that benefit from additional attention. These topics include, but are
+not limited to, microTVM and VTA. Special "Topic Guides" can be created to
+index existing material, and provide context on how to navigate that material
+most effectively.
+
+To facilitate newcomers, a special "Getting Started" section with installation
+instructions, a overview of why to use TVM, and other first-experience
+documents will be produced.
+
+
+Technical Details
+*****************
 
 We use the `Sphinx <http://sphinx-doc.org>`_ for the main documentation.
-Sphinx support both the reStructuredText and markdown.
-When possible, we encourage to use reStructuredText as it has richer features.
-Note that the python doc-string and tutorials allow you to embed reStructuredText syntax.
+Sphinx support both the reStructuredText and markdown.  When possible, we
+encourage to use reStructuredText as it has richer features.  Note that the
+python doc-string and tutorials allow you to embed reStructuredText syntax.
 
 
-Document Python
----------------
-We use `numpydoc <https://numpydoc.readthedocs.io/en/latest/>`_
-format to document the function and classes.
-The following snippet gives an example docstring.
-We always document all the public functions,
-when necessary, provide an usage example of the features we support(as shown below).
+Python Reference Documentation
+------------------------------
+
+We use `numpydoc <https://numpydoc.readthedocs.io/en/latest/>`_ format to
+document the function and classes.  The following snippet gives an example
+docstring.  We always document all the public functions, when necessary,
+provide an usage example of the features we support(as shown below).
 
 .. code:: python
 
@@ -64,18 +167,20 @@ when necessary, provide an usage example of the features we support(as shown bel
         """
         return rv1
 
-Be careful to leave blank lines between sections of your documents.
-In the above case, there has to be a blank line before `Parameters`, `Returns` and `Examples`
-in order for the doc to be built correctly. To add a new function to the doc,
-we need to add the `sphinx.autodoc <http://www.sphinx-doc.org/en/master/ext/autodoc.html>`_
-rules to the `docs/api/python <https://github.com/apache/tvm/tree/main/docs/api/python>`_).
-You can refer to the existing files under this folder on how to add the functions.
+Be careful to leave blank lines between sections of your documents.  In the
+above case, there has to be a blank line before `Parameters`, `Returns` and
+`Examples` in order for the doc to be built correctly. To add a new function to
+the doc, we need to add the `sphinx.autodoc
+<http://www.sphinx-doc.org/en/master/ext/autodoc.html>`_ rules to the
+`docs/api/python <https://github.com/apache/tvm/tree/main/docs/api/python>`_).
+You can refer to the existing files under this folder on how to add the
+functions.
 
+C++ Reference Documentation
+---------------------------
 
-Document C++
-------------
-We use the doxgen format to document c++ functions.
-The following snippet shows an example of c++ docstring.
+We use the doxgen format to document c++ functions.  The following snippet
+shows an example of c++ docstring.
 
 .. code:: c++
 
@@ -89,21 +194,27 @@ The following snippet shows an example of c++ docstring.
       // When necessary, also add comment to clarify internal logics
     }
 
-Besides documenting function usages, we also highly recommend contributors
-to add comments about code logics to improve readability.
+Besides documenting function usages, we also highly recommend contributors to
+add comments about code logics to improve readability.
 
+Sphinx Gallery How-Tos
+----------------------
 
-Write Tutorials
----------------
-We use the `sphinx-gallery <https://sphinx-gallery.github.io/>`_ to build python tutorials.
-You can find the source code under `tutorials <https://github.com/apache/tvm/tree/main/tutorials>`_ quite self explanatory.
-One thing that worth noting is that the comment blocks are written in reStructuredText instead of markdown so be aware of the syntax.
+We use the `sphinx-gallery <https://sphinx-gallery.github.io/>`_ to build many
+python how-tos.  You can find the source code under `gallery
+<https://github.com/apache/tvm/tree/main/gallery>`_ quite self explanatory.
+One thing that worth noting is that the comment blocks are written in
+reStructuredText instead of markdown so be aware of the syntax.
 
-The tutorial code will run on our build server to generate the document page.
-So we may have a restriction like not being able to access a remote Raspberry Pi,
-in such case add a flag variable to the tutorial (e.g. `use_rasp`) and allow users to easily switch to the real device by changing one flag.
-Then use the existing environment to demonstrate the usage.
+The how-to code will run on our build server to generate the document page.  So
+we may have a restriction like not being able to access a remote Raspberry Pi,
+in such case add a flag variable to the tutorial (e.g. `use_rasp`) and allow
+users to easily switch to the real device by changing one flag. Then use the
+existing environment to demonstrate the usage.
 
+If you add a new categorization of how-to, you will need to add references to
+`conf.py <https://github.com/apache/tvm/tree/main/docs/conf.py>`_ and the
+`how-to index <https://github.com/apache/tvm/tree/main/docs/how-to/index.rst>`_
 
 Refer to Another Location in the Document
 -----------------------------------------
diff --git a/docs/_sources/contribute/index.rst.txt b/docs/_sources/contribute/index.rst.txt
index e3e4119..acacfdc 100644
--- a/docs/_sources/contribute/index.rst.txt
+++ b/docs/_sources/contribute/index.rst.txt
@@ -15,7 +15,7 @@
     specific language governing permissions and limitations
     under the License.
 
-Contribute to TVM
+Contributor Guide
 =================
 
 TVM has been developed by community members.
diff --git a/docs/_sources/deploy/index.rst.txt b/docs/_sources/deploy/index.rst.txt
deleted file mode 100644
index b127de9..0000000
--- a/docs/_sources/deploy/index.rst.txt
+++ /dev/null
@@ -1,179 +0,0 @@
-..  Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-..    http://www.apache.org/licenses/LICENSE-2.0
-
-..  Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
-.. _deploy-and-integration:
-
-Deploy and Integration
-======================
-
-This page contains guidelines on how to deploy TVM to various platforms
-as well as how to integrate it with your project.
-
-.. image::  https://tvm.apache.org/images/release/tvm_flexible.png
-
-Build the TVM runtime library
------------------------------
-
-.. _build-tvm-runtime-on-target-device:
-
-Unlike traditional deep learning frameworks. TVM stack is divided into two major components:
-
-- TVM compiler, which does all the compilation and optimizations of the model
-- TVM runtime, which runs on the target devices.
-
-In order to integrate the compiled module, we **do not** need to build entire
-TVM on the target device. You only need to build the TVM compiler stack on your 
-desktop and use that to cross-compile modules that are deployed on the target device.
-
-We only need to use a light-weight runtime API that can be integrated into various platforms.
-
-For example, you can run the following commands to build the runtime API
-on a Linux based embedded system such as Raspberry Pi:
-
-.. code:: bash
-
-    git clone --recursive https://github.com/apache/tvm tvm
-    cd tvm
-    mkdir build
-    cp cmake/config.cmake build
-    cd build
-    cmake ..
-    make runtime
-
-Note that we type ``make runtime`` to only build the runtime library.
-
-It is also possible to cross compile the runtime. Cross compiling
-the runtime library should not be confused with cross compiling models
-for embedded devices.
-
-If you want to include additional runtime such as OpenCL,
-you can modify ``config.cmake`` to enable these options.
-After you get the TVM runtime library, you can link the compiled library
-
-.. figure:: https://raw.githubusercontent.com/tlc-pack/web-data/main/images/dev/tvm_deploy_crosscompile.svg
-   :align: center
-   :width: 85%
-
-A model (optimized or not by TVM) can be cross compiled by TVM for
-different architectures such as ``aarch64`` on a ``x64_64`` host. Once the model
-is cross compiled it is neccessary to have a runtime compatible with the target
-architecture to be able to run the cross compiled model.
-
-
-Cross compile the TVM runtime for other architectures
------------------------------------------------------
-
-In the example :ref:`above <build-tvm-runtime-on-target-device>` the runtime library was 
-compiled on a Raspberry Pi. Producing the runtime library can be done much faster on 
-hosts that have high performace processors with ample resources (such as laptops, workstation) 
-compared to a target devices such as a Raspberry Pi. In-order to cross compile the runtime the toolchain
-for the target device must be installed. After installing the correct toolchain,
-the main difference compared to compiling natively is to pass some additional command
-line argument to cmake that specify a toolchain to be used. For reference
-building the TVM runtime library on a modern laptop (using 8 threads) for ``aarch64``
-takes around 20 seconds vs ~10 min to build the runtime on a Raspberry Pi 4.
-
-cross-compile for aarch64
-"""""""""""""""""""""""""
-
-.. code-block:: bash
-
-   sudo apt-get update
-   sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
-
-.. code-block:: bash
-
-    cmake .. \
-        -DCMAKE_SYSTEM_NAME=Linux \
-        -DCMAKE_SYSTEM_VERSION=1 \
-        -DCMAKE_C_COMPILER=/usr/bin/aarch64-linux-gnu-gcc \
-        -DCMAKE_CXX_COMPILER=/usr/bin/aarch64-linux-gnu-g++ \
-        -DCMAKE_FIND_ROOT_PATH=/usr/aarch64-linux-gnu \
-        -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
-        -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
-        -DMACHINE_NAME=aarch64-linux-gnu 
-
-    make -j$(nproc) runtime
-
-For bare metal ARM devices the following toolchain is quite handy to install instead of gcc-aarch64-linux-*
-
-.. code-block:: bash
-
-   sudo apt-get install gcc-multilib-arm-linux-gnueabihf g++-multilib-arm-linux-gnueabihf
-
-
-cross-compile for RISC-V
-"""""""""""""""""""""""""
-
-.. code-block:: bash
-
-   sudo apt-get update
-   sudo apt-get install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu
-
-
-.. code-block:: bash
-
-    cmake .. \
-        -DCMAKE_SYSTEM_NAME=Linux \
-        -DCMAKE_SYSTEM_VERSION=1 \
-        -DCMAKE_C_COMPILER=/usr/bin/riscv64-linux-gnu-gcc \
-        -DCMAKE_CXX_COMPILER=/usr/bin/riscv64-linux-gnu-g++ \
-        -DCMAKE_FIND_ROOT_PATH=/usr/riscv64-linux-gnu \
-        -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
-        -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
-        -DMACHINE_NAME=riscv64-linux-gnu 
-
-    make -j$(nproc) runtime
-
-The ``file`` command can be used to query the architecture of the produced runtime.
-
-
-.. code-block:: bash
-
-   file libtvm_runtime.so
-   libtvm_runtime.so: ELF 64-bit LSB shared object, UCB RISC-V, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=e9ak845b3d7f2c126dab53632aea8e012d89477e, not stripped
-
-    
-Optimize and tune models for target devices
--------------------------------------------
-
-The easiest and recommended way to test, tune and benchmark TVM kernels on
-embedded devices is through TVM's RPC API.
-Here are the links to the related tutorials.
-
-- :ref:`tutorial-cross-compilation-and-rpc`
-- :ref:`tutorial-deploy-model-on-rasp`
-
-Deploy optimized model on target devices
-----------------------------------------
-
-After you finished tuning and benchmarking, you might need to deploy the model on the
-target device without relying on RPC. See the following resources on how to do so.
-
-.. toctree::
-   :maxdepth: 2
-
-   cpp_deploy
-   android
-   integrate
-   hls
-   arm_compute_lib
-   tensorrt
-   vitis_ai
-   bnns
-
-
diff --git a/docs/_sources/deploy/vitis_ai.rst.txt b/docs/_sources/deploy/vitis_ai.rst.txt
deleted file mode 100644
index d3e3ca0..0000000
--- a/docs/_sources/deploy/vitis_ai.rst.txt
+++ /dev/null
@@ -1,709 +0,0 @@
-..  Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-..    http://www.apache.org/licenses/LICENSE-2.0
-
-..  Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
-
-Vitis-AI Integration
-====================
-
-`Vitis-AI <https://github.com/Xilinx/Vitis-AI>`__ is Xilinx's
-development stack for hardware-accelerated AI inference on Xilinx
-platforms, including both edge devices and Alveo cards. It consists of
-optimized IP, tools, libraries, models, and example designs. It is
-designed with high efficiency and ease of use in mind, unleashing the
-full potential of AI acceleration on Xilinx FPGA and ACAP.
-
-The current Vitis-AI Byoc flow inside TVM enables acceleration of Neural
-Network model inference on edge and cloud. The identifiers for the
-supported edge and cloud Deep Learning Processor Units (DPU's) are
-DPUCZDX8G respectively DPUCADX8G. DPUCZDX8G and DPUCADX8G are hardware
-accelerators for convolutional neural networks (CNN's) on top of the
-Xilinx `Zynq Ultrascale+
-MPSoc <https://www.xilinx.com/products/silicon-devices/soc/zynq-ultrascale-mpsoc.html>`__
-respectively
-`Alveo <https://www.xilinx.com/products/boards-and-kits/alveo.html>`__
-(U200/U250) platforms. For more information about the DPU identifiers
-see the section on `DPU naming information <#dpu-naming-information>`__.
-
-On this page you will find information on how to
-`build <#build-instructions>`__ TVM with Vitis-AI and on how to `get
-started <#getting-started>`__ with an example.
-
-DPU naming information
-----------------------
-
-+---------------------------------+-----------------+-------------------------------------------------------------------------+------------------------------------------------------------+---------------------------------------------------+--------------------------------------------------------------------------+
-| DPU                             | Application     | HW Platform                                                             | Quantization Method                                        | Quantization Bitwidth                             | Design Target                                                            |
-+=================================+=================+=========================================================================+============================================================+===================================================+==========================================================================+
-| Deep Learning Processing Unit   | C: CNN R: RNN   | AD: Alveo DDR AH: Alveo HBM VD: Versal DDR with AIE & PL ZD: Zynq DDR   | X: DECENT I: Integer threshold F: Float threshold R: RNN   | 4: 4-bit 8: 8-bit 16: 16-bit M: Mixed Precision   | G: General purpose H: High throughput L: Low latency C: Cost optimized   |
-+---------------------------------+-----------------+-------------------------------------------------------------------------+------------------------------------------------------------+---------------------------------------------------+--------------------------------------------------------------------------+
-
-Build instructions
-------------------
-
-This section lists the instructions for building TVM with Vitis-AI for
-both `cloud <#cloud-dpucadx8g>`__ and `edge <#edge-dpuczdx8g>`__.
-
-Cloud (DPUCADX8G)
-~~~~~~~~~~~~~~~~~
-
-For Vitis-AI acceleration in the cloud TVM has to be built on top of the
-Xilinx Alveo platform.
-
-System requirements
-^^^^^^^^^^^^^^^^^^^
-
-The following table lists system requirements for running docker
-containers as well as Alveo cards.
-
-+-----------------------------------------------------+----------------------------------------------------------+
-| **Component**                                       | **Requirement**                                          |
-+=====================================================+==========================================================+
-| Motherboard                                         | PCI Express 3.0-compliant with one dual-width x16 slot   |
-+-----------------------------------------------------+----------------------------------------------------------+
-| System Power Supply                                 | 225W                                                     |
-+-----------------------------------------------------+----------------------------------------------------------+
-| Operating System                                    | Ubuntu 16.04, 18.04                                      |
-+-----------------------------------------------------+----------------------------------------------------------+
-|                                                     | CentOS 7.4, 7.5                                          |
-+-----------------------------------------------------+----------------------------------------------------------+
-|                                                     | RHEL 7.4, 7.5                                            |
-+-----------------------------------------------------+----------------------------------------------------------+
-| CPU                                                 | Intel i3/i5/i7/i9/Xeon 64-bit CPU                        |
-+-----------------------------------------------------+----------------------------------------------------------+
-| GPU (Optional to accelerate quantization)           | NVIDIA GPU with a compute capability > 3.0               |
-+-----------------------------------------------------+----------------------------------------------------------+
-| CUDA Driver (Optional to accelerate quantization)   | nvidia-410                                               |
-+-----------------------------------------------------+----------------------------------------------------------+
-| FPGA                                                | Xilinx Alveo U200 or U250                                |
-+-----------------------------------------------------+----------------------------------------------------------+
-| Docker Version                                      | 19.03.1                                                  |
-+-----------------------------------------------------+----------------------------------------------------------+
-
-Hardware setup and docker build
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-1. Clone the Vitis AI repository:
-
-   .. code:: bash
-
-      git clone --recurse-submodules https://github.com/Xilinx/Vitis-AI
-
-2. Install Docker, and add the user to the docker group. Link the user
-   to docker installation instructions from the following docker's
-   website:
-
-
-   -  https://docs.docker.com/install/linux/docker-ce/ubuntu/
-   -  https://docs.docker.com/install/linux/docker-ce/centos/
-   -  https://docs.docker.com/install/linux/linux-postinstall/
-
-3. Download the latest Vitis AI Docker with the following command. This container runs on CPU.
-
-   .. code:: bash
-
-      docker pull xilinx/vitis-ai:latest
-
-   To accelerate the quantization, you can optionally use the Vitis-AI GPU docker image. Use the below commands to build the Vitis-AI GPU docker container:
-
-   .. code:: bash
-
-      cd Vitis-AI/docker
-      ./docker_build_gpu.sh
-
-4. Set up Vitis AI to target Alveo cards. To target Alveo cards with
-   Vitis AI for machine learning workloads, you must install the
-   following software components:
-
-   -  Xilinx Runtime (XRT)
-   -  Alveo Deployment Shells (DSAs)
-   -  Xilinx Resource Manager (XRM) (xbutler)
-   -  Xilinx Overlaybins (Accelerators to Dynamically Load - binary
-      programming files)
-
-   While it is possible to install all of these software components
-   individually, a script has been provided to automatically install
-   them at once. To do so:
-
-   -  Run the following commands:
-
-      .. code:: bash
-
-         cd Vitis-AI/alveo/packages
-         sudo su
-         ./install.sh
-
-   -  Power cycle the system.
-
-5. Clone tvm repo and pyxir repo
-
-   .. code:: bash
-
-      git clone --recursive https://github.com/apache/tvm.git
-      git clone --recursive https://github.com/Xilinx/pyxir.git
-
-6. Build and start the tvm runtime Vitis-AI Docker Container.
-
-   .. code:: bash
-
-      ./tvm/docker/build.sh demo_vitis_ai bash
-      ./tvm/docker/bash.sh tvm.demo_vitis_ai
-
-      #Setup inside container
-      source /opt/xilinx/xrt/setup.sh
-      . $VAI_ROOT/conda/etc/profile.d/conda.sh
-      conda activate vitis-ai-tensorflow
-
-7. Install PyXIR
-
-   .. code:: bash
-
-     cd pyxir
-     python3 setup.py install --use_vai_rt_dpucadx8g --user
-
-
-8. Build TVM inside the container with Vitis-AI
-
-   .. code:: bash
-
-      cd tvm
-      mkdir build
-      cp cmake/config.cmake build
-      cd build
-      echo set\(USE_LLVM ON\) >> config.cmake
-      echo set\(USE_VITIS_AI ON\) >> config.cmake
-      cmake ..
-      make -j$(nproc)
-
-9.  Install TVM
-
-    .. code:: bash
-
-      cd tvm/python
-      pip3 install -e . --user
-
-Edge (DPUCZDX8G)
-~~~~~~~~~~~~~~~~
-
-
-For edge deployment we make use of two systems referred to as host and
-edge. The `host <#host-requirements>`__ system is responsible for
-quantization and compilation of the neural network model in a first
-offline step. Afterwards, the model will de deployed on the
-`edge <#edge-requirements>`__ system.
-
-Host requirements
-^^^^^^^^^^^^^^^^^
-
-The following table lists system requirements for running the TVM -
-Vitis-AI docker container.
-
-+-----------------------------------------------------+----------------------------------------------+
-| **Component**                                       | **Requirement**                              |
-+=====================================================+==============================================+
-| Operating System                                    | Ubuntu 16.04, 18.04                          |
-+-----------------------------------------------------+----------------------------------------------+
-|                                                     | CentOS 7.4, 7.5                              |
-+-----------------------------------------------------+----------------------------------------------+
-|                                                     | RHEL 7.4, 7.5                                |
-+-----------------------------------------------------+----------------------------------------------+
-| CPU                                                 | Intel i3/i5/i7/i9/Xeon 64-bit CPU            |
-+-----------------------------------------------------+----------------------------------------------+
-| GPU (Optional to accelerate quantization)           | NVIDIA GPU with a compute capability > 3.0   |
-+-----------------------------------------------------+----------------------------------------------+
-| CUDA Driver (Optional to accelerate quantization)   | nvidia-410                                   |
-+-----------------------------------------------------+----------------------------------------------+
-| FPGA                                                | Not necessary on host                        |
-+-----------------------------------------------------+----------------------------------------------+
-| Docker Version                                      | 19.03.1                                      |
-+-----------------------------------------------------+----------------------------------------------+
-
-Host setup and docker build
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-1. Clone tvm repo
-
-   .. code:: bash
-
-      git clone --recursive https://github.com/apache/tvm.git
-2. Build and start the tvm runtime Vitis-AI Docker Container.
-
-   .. code:: bash
-
-      cd tvm
-      ./tvm/docker/build.sh demo_vitis_ai bash
-      ./tvm/docker/bash.sh tvm.demo_vitis_ai
-
-      #Setup inside container
-      . $VAI_ROOT/conda/etc/profile.d/conda.sh
-      conda activate vitis-ai-tensorflow
-
-3. Install PyXIR
-
-   .. code:: bash
-
-      git clone --recursive https://github.com/Xilinx/pyxir.git
-      cd pyxir
-      python3 setup.py install --user
-
-
-4. Build TVM inside the container with Vitis-AI.
-
-   .. code:: bash
-
-      cd tvm
-      mkdir build
-      cp cmake/config.cmake build
-      cd build
-      echo set\(USE_LLVM ON\) >> config.cmake
-      echo set\(USE_VITIS_AI ON\) >> config.cmake
-      cmake ..
-      make -j$(nproc)
-
-5. Install TVM
-
-   .. code:: bash
-
-      cd tvm/python
-      pip3 install -e . --user
-
-Edge requirements
-^^^^^^^^^^^^^^^^^
-
-The DPUCZDX8G can be deployed on the `Zynq Ultrascale+
-MPSoc <https://www.xilinx.com/products/silicon-devices/soc/zynq-ultrascale-mpsoc.html>`__
-platform. The following development boards can be used out-of-the-box:
-
-+--------------------+----------------------+-----------------------------------------------------------------------+
-| **Target board**   | **TVM identifier**   | **Info**                                                              |
-+====================+======================+=======================================================================+
-| Ultra96            | DPUCZDX8G-ultra96    | https://www.xilinx.com/products/boards-and-kits/1-vad4rl.html         |
-+--------------------+----------------------+-----------------------------------------------------------------------+
-| ZCU104             | DPUCZDX8G-zcu104     | https://www.xilinx.com/products/boards-and-kits/zcu104.html           |
-+--------------------+----------------------+-----------------------------------------------------------------------+
-| ZCU102             | DPUCZDX8G-zcu102     | https://www.xilinx.com/products/boards-and-kits/ek-u1-zcu102-g.html   |
-+--------------------+----------------------+-----------------------------------------------------------------------+
-
-Edge hardware setup
-^^^^^^^^^^^^^^^^^^^
-.. note::
-
-  This section provides instructions for setting up with the `Pynq <http://www.pynq.io/>`__ platform but
-  Petalinux based flows are also supported.
-
-1. Download the Pynq v2.6 image for your target (use Z1 or Z2 for
-   Ultra96 target depending on board version) Link to image:
-   https://github.com/Xilinx/PYNQ/releases/tag/v2.6.0
-2. Follow Pynq instructions for setting up the board: `pynq
-   setup <https://pynq.readthedocs.io/en/latest/getting_started.html>`__
-3. After connecting to the board, make sure to run as root. **Execute**
-   ``su``
-4. Set up DPU on Pynq:
-
-    .. code:: bash
-
-     git clone --branch v1.2.0 --recursive --shallow-submodules https://github.com/Xilinx/DPU-PYNQ.git
-     cd DPU-PYNQ/upgrade
-     make
-     pip3 install pynq-dpu==1.2.0
-
-5. Run the following command to download the DPU bitstream:
-
-   .. code:: bash
-
-     python3 -c 'from pynq_dpu import DpuOverlay ; overlay = DpuOverlay("dpu.bit")'
-
-6. Check whether the DPU kernel is alive:
-
-   .. code:: bash
-
-     dexplorer -w
-
-Edge TVM setup
-^^^^^^^^^^^^^^
-
-.. note::
-
-  When working on Petalinux instead of Pynq, the following steps might take more manual work (e.g building
-  hdf5 from source). Also, TVM has a scipy dependency which you then might have to build from source or
-  circumvent. We don't depend on scipy in our flow.
-
-Building TVM depends on the Xilinx
-`PyXIR <https://github.com/Xilinx/pyxir>`__ package. PyXIR acts as an
-interface between TVM and Vitis-AI tools.
-
-1. First install the PyXIR h5py and pydot dependencies:
-
-   .. code:: bash
-
-      apt-get install libhdf5-dev
-      pip3 install pydot==1.4.1 h5py==2.8.0
-
-2. Install PyXIR
-
-   .. code:: bash
-
-      git clone --recursive https://github.com/Xilinx/pyxir.git
-      cd pyxir
-      sudo python3 setup.py install --use_vai_rt_dpuczdx8g
-
-3. Build TVM with Vitis-AI
-
-   .. code:: bash
-
-      git clone --recursive https://github.com/apache/tvm
-      cd tvm
-      mkdir build
-      cp cmake/config.cmake build
-      cd build
-      echo set\(USE_LLVM OFF\) >> config.cmake
-      echo set\(USE_VITIS_AI ON\) >> config.cmake
-      cmake ..
-      make tvm_runtime -j$(nproc)
-
-4. Install TVM
-
-   .. code:: bash
-
-      cd tvm/python
-      pip3 install -e .
-
-5. Check whether the setup was successful in the Python shell:
-
-   .. code:: bash
-
-      python3 -c 'import pyxir; import tvm'
-
-
-Getting started
----------------
-
-This section shows how to use TVM with Vitis-AI. For this it's important
-to understand that neural network models are quantized for Vitis-AI
-execution in fixed point arithmetic. The approach we take here is to
-quantize on-the-fly using the first N inputs as explained in the next
-section.
-
-On-the-fly quantization
-~~~~~~~~~~~~~~~~~~~~~~~
-
-Usually, to be able to accelerate inference of Neural Network models
-with Vitis-AI DPU accelerators, those models need to quantized upfront.
-In TVM - Vitis-AI flow, we make use of on-the-fly quantization to remove
-this additional preprocessing step. In this flow, one doesn't need to
-quantize his/her model upfront but can make use of the typical inference
-execution calls (module.run) to quantize the model on-the-fly using the
-first N inputs that are provided (see more information below). This will
-set up and calibrate the Vitis-AI DPU and from that point onwards
-inference will be accelerated for all next inputs. Note that the edge
-flow deviates slightly from the explained flow in that inference won't
-be accelerated after the first N inputs but the model will have been
-quantized and compiled and can be moved to the edge device for
-deployment. Please check out the `edge <#Edge%20usage>`__ usage
-instructions below for more information.
-
-Config/Settings
-~~~~~~~~~~~~~~~
-
-A couple of environment variables can be used to customize the Vitis-AI
-Byoc flow.
-
-+----------------------------+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| **Environment Variable**   | **Default if unset**                   | **Explanation**                                                                                                                                                                                                                                                                                                                            |
-+============================+========================================+============================================================================================================================================================================================================================================================================================================================================+
-| PX\_QUANT\_SIZE            | 128                                    | The number of inputs that will be used for quantization (necessary for Vitis-AI acceleration)                                                                                                                                                                                                                                              |
-+----------------------------+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| PX\_BUILD\_DIR             | Use the on-the-fly quantization flow   | Loads the quantization and compilation information from the provided build directory and immediately starts Vitis-AI hardware acceleration. This configuration can be used if the model has been executed before using on-the-fly quantization during which the quantization and comilation information was cached in a build directory.   |
-+----------------------------+----------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-
-Cloud usage
-~~~~~~~~~~~
-
-This section shows how to accelerate a convolutional neural network
-model in TVM with Vitis-AI on the cloud.
-
-To be able to target the Vitis-AI cloud DPUCADX8G we first have
-to import the DPU target in PyXIR. This PyXIR package is the interface being
-used by TVM to integrate with the Vitis-AI stack. Additionaly, import
-the typical TVM and Relay modules and the Vitis-AI contrib module inside
-TVM.
-
-.. code:: python
-
-   import pyxir
-   import pyxir.contrib.target.DPUCADX8G
-
-   import tvm
-   import tvm.relay as relay
-   from tvm.contrib.target import vitis_ai
-   from tvm.contrib import utils, graph_executor
-   from tvm.relay.build_module import bind_params_by_name
-   from tvm.relay.op.contrib.vitis_ai import partition_for_vitis_ai
-
-After importing a convolutional neural network model using the usual
-Relay API's, annotate the Relay expression for the given Vitis-AI DPU
-target and partition the graph.
-
-.. code:: python
-   
-   dpu = 'DPUCADX8G'
-   mod = partition_for_vitis_ai(mod, params, dpu)
-
-Now, we can build the TVM runtime library for executing the model. The
-TVM target is 'llvm' as the operations that can't be handled by the DPU
-are executed on the CPU. The Vitis-AI DPU is DPUCADX8G as we are
-targeting the cloud DPU and this DPU identifier is passed as a config to the TVM
-build call.
-
-.. code:: python
-
-   target = 'llvm'
-
-   with tvm.transform.PassContext(opt_level=3, config= {'relay.ext.vitis_ai.options': {'dpu': dpu}}):
-      lib = relay.build(mod, target, params=params)
-
-As one more step before we can accelerate a model with Vitis-AI in TVM
-we have to quantize and compile the model for execution on the DPU. We
-make use of on-the-fly quantization for this. Using this method one
-doesn’t need to quantize their model upfront and can make use of the
-typical inference execution calls (module.run) to calibrate the model
-on-the-fly using the first N inputs that are provided. After the first N
-iterations, computations will be accelerated on the DPU. So now we will
-feed N inputs to the TVM runtime module. Note that these first N inputs
-will take a substantial amount of time.
-
-.. code:: python
-
-   module = graph_executor.GraphModule(lib["default"](tvm.cpu()))
-
-   # First N (default = 128) inputs are used for quantization calibration and will
-   # be executed on the CPU
-   # This config can be changed by setting the 'PX_QUANT_SIZE' (e.g. export PX_QUANT_SIZE=64)
-   for i in range(128):
-      module.set_input(input_name, inputs[i])
-      module.run()
-
-Afterwards, inference will be accelerated on the DPU.
-
-.. code:: python
-
-   module.set_input(name, data)
-   module.run()
-
-To save and load the built module, one can use the typical TVM API's:
-
-.. code:: python
-
-   lib_path = "deploy_lib.so"
-   lib.export_library(lib_path)
-
-Load the module from compiled files and run inference
-
-.. code:: python
-
-   # load the module into memory
-   loaded_lib = tvm.runtime.load_module(lib_path)
-
-   module = graph_executor.GraphModule(lib["default"](tvm.cpu()))
-   module.set_input(name, data)
-   module.run()
-
-Edge usage
-~~~~~~~~~~
-
-This section shows how to accelerate a convolutional neural network
-model in TVM with Vitis-AI at the edge. The first couple of steps will
-have to be run on the host machine and take care of quantization and
-compilation for deployment at the edge.
-
-A complete ResNet 18 example can be found `here <https://github.com/Xilinx/pyxir/tree/master/examples/tvm>`__.
-
-Host steps
-^^^^^^^^^^
-
-To be able to target the Vitis-AI cloud DPUCZDX8G we first have
-to import the DPU target in PyXIR. This PyXIR package is the interface being
-used by TVM to integrate with the Vitis-AI stack. Additionaly, import
-the typical TVM and Relay modules and the Vitis-AI contrib module inside
-TVM.
-
-.. code:: python
-
-   import pyxir
-   import pyxir.contrib.target.DPUCZDX8G
-
-   import tvm
-   import tvm.relay as relay
-   from tvm.contrib.target import vitis_ai
-   from tvm.contrib import utils, graph_executor
-   from tvm.relay.build_module import bind_params_by_name
-   from tvm.relay.op.contrib.vitis_ai import partition_for_vitis_ai
-
-After importing a convolutional neural network model using the usual
-Relay API's, annotate the Relay expression for the given Vitis-AI DPU
-and partition the graph.
-
-.. note::
-
-    We recommend converting DPU convolutions' data layouts to NHWC and CPU convolutions'
-    data layouts to NCHW for best DPU and out of the box CPU performance. You can use the
-    ConvertLayout transformation pass two times to achieve this as demonstrated in the code
-    block underneath. You can also leave the CPU convolution layouts in NHWC and tune ARM CPU
-    performance for this data layout to avoid the layout transformation overheads introduced by
-    executing DPU convolutions in NHWC and CPU convolutions in NCHW
-    (check out the `AutoScheduling <https://tvm.apache.org/docs/tutorials/index.html#autoscheduler-template-free-auto-scheduling>`__
-    and `AutoTuning <https://tvm.apache.org/docs/tutorials/autotvm/tune_relay_arm.html>`__
-    tutorials for this).
-
-.. code:: python
-
-   mod["main"] = bind_params_by_name(mod["main"], params)
-   
-   # For edge DPU we recommend converting the convolutions' data layout
-   #    to NHWC for best performance. Therefore, we first convert the layouts
-   #    of all convolutions to NHWC before partitioning. Afterwards, we can
-   #    convert any remaining convolutions (to be executed on CPU) back to NCHW.
-   desired_layouts = {'nn.conv2d': ['NHWC', 'default']}
-   seq = tvm.transform.Sequential([relay.transform.RemoveUnusedFunctions(),
-                                   relay.transform.ConvertLayout(desired_layouts),
-                                   relay.transform.FoldConstant()])
-   with tvm.transform.PassContext(opt_level=3):
-       mod = seq(mod)
-   
-   dpu = 'DPUCZDX8G-zcu104'
-   # Annotate and partition the Relay expression for the given DPU
-   mod = partition_for_vitis_ai(mod, params, dpu)
-   
-   # After partitioning we recommend transforming the remaining convolutions
-   #    (that will be executed on CPU, if any) back to NCHW data layout
-   #    for best CPU performance
-   desired_layouts = {'nn.conv2d': ['NCHW', 'default']}
-   seq = tvm.transform.Sequential([relay.transform.RemoveUnusedFunctions(),
-                                   relay.transform.ConvertLayout(desired_layouts),
-                                   relay.transform.FoldConstant()])
-   with tvm.transform.PassContext(opt_level=3):
-       mod = seq(mod)
-
-Now, we can build the TVM runtime library for executing the model. The
-TVM target is 'llvm' as the operations that can't be handled by the DPU
-are executed on the CPU. At this point that means the CPU on the host machine.
-The Vitis-AI DPU identifier is DPUCZDX8G-zcu104 as we are targeting the edge DPU
-on the ZCU104 board and this identifier is passed as a config to the TVM
-build call. Note that different identifiers can be passed for different
-DPU's, see `edge DPU's info <#edge-requirements>`__. Additionally, we
-provide the 'export_runtime_module' config that points to a file to which we
-can export the Vitis-AI runtime module. We have to do this because we will
-first be compiling and quantizing the model on the host machine before building
-the model for edge deployment. As you will see later on, the exported runtime
-module will be passed to the edge build so that the Vitis-AI runtime module
-can be included.
-
-.. code:: python
-
-   target = 'llvm'
-   export_rt_mod_file = "vitis_ai.rtmod"
-   
-   build_options = {
-      'dpu': dpu,
-      'export_runtime_module': export_rt_mod_file
-   }
-   with tvm.transform.PassContext(opt_level=3, config= {'relay.ext.vitis_ai.options': build_options}):
-      lib = relay.build(mod, target, params=params)
-
-We will quantize and compile the model for execution on the DPU using on-the-fly
-quantization on the host machine. This makes use of TVM inference calls
-(module.run) to quantize the model on the host with the first N inputs.
-
-.. code:: python
-
-   module = graph_executor.GraphModule(lib["default"](tvm.cpu()))
-
-   # First N (default = 128) inputs are used for quantization calibration and will
-   # be executed on the CPU
-   # This config can be changed by setting the 'PX_QUANT_SIZE' (e.g. export PX_QUANT_SIZE=64)
-   for i in range(128):
-      module.set_input(input_name, inputs[i])
-      module.run()
-
-Save the TVM lib module so that the Vitis-AI runtime module will also be exported
-(to the 'export_runtime_module' path we previously passed as a config).
-
-.. code:: python
-
-   from tvm.contrib import utils
-
-   temp = utils.tempdir()
-   lib.export_library(temp.relpath("tvm_lib.so"))
-
-After quantizing and compiling the model for Vitis-AI acceleration using the
-first N inputs we can build the model for execution on the ARM edge device.
-Here we pass the previously exported Vitis-AI runtime module so it can be included
-in the TVM build.
-
-.. code:: python
-
-   # Export lib for aarch64 target
-   target = tvm.target.arm_cpu('ultra96')
-   lib_kwargs = {
-        'fcompile': contrib.cc.create_shared,
-        'cc': "/usr/aarch64-linux-gnu/bin/ld"
-   }
-   
-   build_options = {
-        'load_runtime_module': export_rt_mod_file
-   }
-   with tvm.transform.PassContext(opt_level=3, config={'relay.ext.vitis_ai.options': build_options}):
-        lib_arm = relay.build(mod, target, params=params)
-
-   lib_dpuv2.export_library('tvm_dpu_arm.so', **lib_kwargs)
-
-Now, move the TVM build files (tvm\_dpu\_arm.json, tvm\_dpu\_arm.so,
-tvm\_dpu\_arm.params) to the edge device. For information on setting
-up the edge device check out the `edge setup <#edge-dpuczdx8g>`__
-section.
-
-Edge steps
-^^^^^^^^^^
-
-After setting up TVM with Vitis-AI on the edge device, you can now load
-the TVM runtime module into memory and feed inputs for inference. A nearly
-complete runtiem script can be found underneath. Make sure to run the script
-as root (execute ``su`` in terminal to log into root).
-
-
-.. note::
-
-    You will see a warning about the 'cpu-tf' runtime not being found. This warning is
-    expected on the board and can be ignored. Note also that you **shouldn't** import the
-    PyXIR DPU targets in the run script (``import pyxir.contrib.target.DPUCZDX8G``).
-
-.. code:: python
-
-   import pyxir
-   import tvm
-   from tvm.contrib import graph_executor
-
-   dev = tvm.cpu()
-   
-   # input_name = ...
-   # input_data = ...
-
-   # load the module into memory
-   lib = tvm.runtime.load_module("tvm_dpu_arm.so")
-
-   module = graph_executor.GraphModule(lib["default"](dev))
-   module.set_input(input_name, input_data)
-   module.run()
diff --git a/docs/_sources/dev/how_to.rst.txt b/docs/_sources/dev/how_to.rst.txt
deleted file mode 100644
index dcf8df2..0000000
--- a/docs/_sources/dev/how_to.rst.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-..  Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-..    http://www.apache.org/licenses/LICENSE-2.0
-
-..  Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
-.. _dev-how-to:
-
-Developer How-To Guide
-======================
-This section contains a collection of tips about how to work on
-various areas of the TVM stack.
-
-.. toctree::
-   :maxdepth: 1
-
-   relay_add_op
-   relay_add_pass
-   relay_bring_your_own_codegen
-   codebase_walkthrough
-   pytest_target_parametrization
diff --git a/docs/_sources/dev/how_to/how_to.rst.txt b/docs/_sources/dev/how_to/how_to.rst.txt
new file mode 100644
index 0000000..844ae0a
--- /dev/null
+++ b/docs/_sources/dev/how_to/how_to.rst.txt
@@ -0,0 +1,31 @@
+..  Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+..    http://www.apache.org/licenses/LICENSE-2.0
+
+..  Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+.. _dev-how-to:
+
+Developer How-To Guide
+======================
+This section contains a collection of tips about how to work on
+various areas of the TVM stack.
+
+.. toctree::
+   :maxdepth: 1
+
+   relay_add_op
+   relay_add_pass
+   relay_bring_your_own_codegen
+   pytest_target_parametrization
diff --git a/docs/_sources/dev/pytest_target_parametrization.rst.txt b/docs/_sources/dev/how_to/pytest_target_parametrization.rst.txt
similarity index 100%
rename from docs/_sources/dev/pytest_target_parametrization.rst.txt
rename to docs/_sources/dev/how_to/pytest_target_parametrization.rst.txt
diff --git a/docs/_sources/dev/relay_add_op.rst.txt b/docs/_sources/dev/how_to/relay_add_op.rst.txt
similarity index 100%
rename from docs/_sources/dev/relay_add_op.rst.txt
rename to docs/_sources/dev/how_to/relay_add_op.rst.txt
diff --git a/docs/_sources/dev/relay_add_pass.rst.txt b/docs/_sources/dev/how_to/relay_add_pass.rst.txt
similarity index 100%
rename from docs/_sources/dev/relay_add_pass.rst.txt
rename to docs/_sources/dev/how_to/relay_add_pass.rst.txt
diff --git a/docs/_sources/dev/relay_bring_your_own_codegen.rst.txt b/docs/_sources/dev/how_to/relay_bring_your_own_codegen.rst.txt
similarity index 100%
rename from docs/_sources/dev/relay_bring_your_own_codegen.rst.txt
rename to docs/_sources/dev/how_to/relay_bring_your_own_codegen.rst.txt
diff --git a/docs/_sources/dev/microtvm_design.rst.txt b/docs/_sources/dev/microtvm_design.rst.txt
deleted file mode 100644
index 885ef2c..0000000
--- a/docs/_sources/dev/microtvm_design.rst.txt
+++ /dev/null
@@ -1,349 +0,0 @@
-..  Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-..    http://www.apache.org/licenses/LICENSE-2.0
-..  Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
-**************************
-microTVM Design Document
-**************************
-
-.. contents:: Table of Contents
-    :depth: 3
-
-Background
-===========
-
-TVM is a model deployment framework that has demonstrated good performance across a wide range of
-models on traditional operating systems. Given TVM's layered approach to compilation, it is a
-natural extension to target bare metal devices. While most of the compilation flow does not need to
-change for a proof-of-concept implementation on such devices, the runtime cannot depend on:
-
-* **Virtual Memory**, and by extension any system-provided ``malloc``. Additionally, bare metal
-  devices typically have very limited memory (measured in KB). Because of this, libraries designed
-  for such platforms typically need to be more judicious in using memory, and need to release
-  memory when it is not in use.
-* Traditional OS abstractions, such as **files**, **libraries**, and **kernel functions**. Some
-  projects implement support for these, but they are by no means standard.
-* Support for programming languages other than **C**.
-
-Such changes require a different approach from the TVM C++ runtime typically used on traditional
-Operating Systems.
-
-Typical Use
-===========
-
-This section discusses our vision of the "typical" microTVM use case. Each component used to achieve
-this typical use case is intended to be designed for flexibility, but this unifying vision serves to
-motivate the inclusion of each part of the design.
-
-.. figure:: https://raw.githubusercontent.com/tvmai/web-data/main/images/dev/microtvm_workflow.svg
-   :align: center
-   :width: 85%
-
-The parts of this process are described below:
-
-#. **Model Import**. The user imports an existing model or describes a new model to TVM, producing a
-   *Relay module*.
-
-#. **Model Transformations**. The user can apply transformations, such as quantization, to the
-   model. After each transformation, the user should still have a Relay module.
-
-#. **Compilation** (Scheduling and Code Generation). TVM implements each operator into Tensor IR by
-   assigning a schedule and schedule configuration to each Relay operator. Then, code (C source or
-   compiled object) is generated for each operator.
-
-#. **Integration**. The generated code is integrated along with the TVM C Runtime library into a
-   user-supplied binary project. In some cases (such as when the project is standardized across
-   multiple SoC/development boards), this process is handled automatically.
-
-#. **Deployment**. The project is built and the residual firmware binary is flashed onto the device.
-   Model inference is driven either by TVM using an on-device RPC server, or on the device using the
-   on-device Graph Executor.
-
-Design Goals
-============
-
-microTVM aims to achieve these design goals:
-
-1. **Portable Code**. microTVM can translate any Relay model into C code that can compile with only
-   a C standard library.
-2. **Minimal Overhead**. microTVM generates target-specific, highly optimized code. As much overhead
-   from the runtime should be removed.
-3. **Accessible Code**. microTVM considers C source code as a first-class output mechanism so that
-   it is easier for a firmware engineer to understand and tweak.
-
-Overview
-========
-
-microTVM requires changes at all levels of the TVM compiler stack. The following sub-sections enumerate
-these changes at a high level, and follow-on sections discuss the specifics in more detail.
-
-Modeling Target Platforms
--------------------------
-
-TVM's search-based optimization approach allows it to largely avoid system-level modeling of targets
-in favor of experimental results. However, some modeling is necessary in order to ensure TVM is
-comparing apples-to-apples search results, and to avoid wasting time during the search by attempting
-to compile invalid code for a target.
-
-microTVM models these parts of the target:
-
-* The CPU used, through the ``-mcpu`` and ``-march`` target flags.
-* The presence or absence of accelerators, through the device components of the target (Currently
-  only the absence of accelerators can be expressed, but this mechanism should extend well).
-
-microTVM aims to model these parts of the target in the future:
-
-* Memory, modeled as a set of disjoint memory spaces, each with a label and size and prefetch/flush
-  behavior. Some memory may be shared with accelerators.
-* Target runtime configuration (i.e. clock tree configuration, clock speed, etc). This is intended
-  only to contribute to the AutoTVM schedule key and not for any other use.
-
-At this time, TVM does not intend to model:
-
-* Size, type, or relationship of caches, with the exception of prefetching or cache flushing.
... 884951 lines suppressed ...