From 6174b2c9db7f84eb2178f14d2a2f9d7bef7e2370 Mon Sep 17 00:00:00 2001 From: "junq (generated by with_the_same_user script)" Date: Mon, 22 Jun 2026 10:54:31 +0000 Subject: [PATCH 1/3] [None][feat] Remove legacy TensorRT Python backend Remove the TensorRT execution backend from the Python package so that tensorrt_llm imports and runs without the `tensorrt` package installed. PyTorch becomes the sole supported backend; autodeploy is preserved. The C++ TensorRT-library (nvinfer1) decoupling lands in a follow-up. Shared-symbol extraction (TensorRT-free homes, extract-before-delete): - functional enums / AllReduce types / RopeEmbeddingUtils -> functional_enums.py - QuantConfig/LayerQuantConfig -> quantization/quant_config.py; QuantAlgo redirect - runtime ModelConfig -> runtime/model_config.py; CUASSERT -> _utils - quant weight-preprocessing -> quantization/preprocessing.py - PretrainedConfig/SpeculativeDecodingMode trimmed into a TensorRT-free models/modeling_utils.py; QuantModeWrapper kept TensorRT-free in _utils - TensorRT-free package init (_init_runtime) replaces _common._init - extract TensorRT-free CustomAllReduceHelper; relocate _is_building Backend removal: - delete builder/network/functional/graph_rewriting/_common/module/parameter/ python_plugin/plugin/layers, TRT model impls, TRT runtime classes (Session/GenerationSession/ModelRunner*/EncDec/Multimodal), _tensorrt_engine, TRT quant (layers/quantize/functional), TRT tools, bench/build, trtllm-build/refit/prune commands - reject backend="tensorrt"/"trt" with ValueError across LLM API and CLIs; drop trtllm-build/refit/prune console scripts and 'tensorrt' telemetry - remove module-level _tensorrt_engine imports + dispatch in serve/eval/openai_server/bench/evaluate - decouple executor workers from builder.Engine; decouple logger/profiler from tensorrt Sweep: - remove TensorRT Triton engine backend paths + L0_backend_trtllm CI - delete TensorRT docs + example dirs; add migration guide - remove TensorRT unit tests and their CI test-list entries Signed-off-by: junq (generated by with_the_same_user script) --- ...practice_on_DeepSeek-R1_in_TensorRT-LLM.md | 4 +- docs/source/blogs/XQA-kernel.md | 2 +- docs/source/commands/trtllm-build.rst | 7 - docs/source/index.rst | 5 +- .../legacy/advanced/disaggregated-service.md | 86 - docs/source/legacy/advanced/executor.md | 153 - .../legacy/advanced/expert-parallelism.md | 30 - docs/source/legacy/advanced/gpt-attention.md | 343 - docs/source/legacy/advanced/gpt-runtime.md | 202 - .../source/legacy/advanced/graph-rewriting.md | 197 - .../images/8x_l20_L40S_node_architecture.png | Bin 267638 -> 0 bytes .../images/disaggregated-service_usage.png | Bin 39888 -> 0 bytes .../legacy/advanced/kv-cache-management.md | 75 - docs/source/legacy/advanced/kv-cache-reuse.md | 94 - docs/source/legacy/advanced/lora.md | 142 - .../advanced/lowprecision-pcie-allreduce.md | 61 - .../advanced/open-sourced-cutlass-kernels.md | 26 - .../legacy/advanced/speculative-decoding.md | 182 - .../legacy/advanced/weight-streaming.md | 58 - docs/source/legacy/architecture/add-model.md | 95 - docs/source/legacy/architecture/checkpoint.md | 251 - .../legacy/architecture/core-concepts.md | 389 - .../architecture/model-weights-loader.md | 256 - docs/source/legacy/architecture/workflow.md | 241 - .../dev-on-cloud/build-image-to-dockerhub.md | 56 - .../legacy/dev-on-cloud/dev-on-runpod.md | 47 - docs/source/legacy/key-features.md | 10 - .../legacy/performance/perf-analysis.md | 91 - .../legacy/performance/perf-benchmarking.md | 871 -- .../benchmarking-default-performance.md | 243 - .../deciding-model-sharding-strategy.md | 50 - .../fp8-quantization.md | 217 - .../performance-tuning-guide/index.rst | 15 - .../performance-tuning-guide/introduction.md | 17 - ...uning-max-batch-size-and-max-num-tokens.md | 126 - .../useful-build-time-flags.md | 171 - .../useful-runtime-flags.md | 224 - .../python-api/tensorrt_llm.functional.rst | 11 - .../legacy/python-api/tensorrt_llm.layers.rst | 69 - .../legacy/python-api/tensorrt_llm.models.rst | 11 - .../legacy/python-api/tensorrt_llm.plugin.rst | 10 - .../python-api/tensorrt_llm.quantization.rst | 10 - .../python-api/tensorrt_llm.runtime.rst | 11 - docs/source/legacy/reference/memory.md | 140 - .../multimodal-feature-support-matrix.md | 13 - docs/source/legacy/reference/precision.md | 184 - .../source/legacy/reference/support-matrix.md | 185 - .../legacy/reference/troubleshooting.md | 328 - .../source/legacy/tensorrt-backend-removal.md | 93 + docs/source/legacy/tensorrt_quickstart.md | 9 - docs/source/legacy/torch.md | 44 - docs/source/release-notes.md | 1 + docs/source/torch/arch_overview.md | 2 +- docs/source/torch/kv_cache_manager.md | 2 +- examples/draft_target_model/README.md | 364 - examples/draft_target_model/requirements.txt | 6 - examples/eagle/README.md | 195 - examples/eagle/convert_checkpoint.py | 493 -- examples/eagle/requirements.txt | 6 - .../_tensorrt_engine/llm_eagle2_decoding.py | 55 - .../_tensorrt_engine/llm_eagle_decoding.py | 60 - .../llm_inference_customize.py | 55 - .../llm_inference_kv_events.py | 49 - .../llm_lookahead_decoding.py | 38 - .../_tensorrt_engine/llm_medusa_decoding.py | 93 - .../_tensorrt_engine/llm_quantization.py | 80 - .../_tensorrt_engine/quickstart_example.py | 39 - examples/lookahead/README.md | 108 - examples/lookahead/requirements.txt | 6 - examples/medusa/README.md | 232 - examples/medusa/convert_checkpoint.py | 487 -- examples/medusa/requirements.txt | 6 - examples/models/contrib/baichuan/README.md | 314 - .../contrib/baichuan/convert_checkpoint.py | 263 - .../models/contrib/baichuan/requirements.txt | 8 - examples/models/contrib/bloom/.gitignore | 2 - examples/models/contrib/bloom/README.md | 242 - .../contrib/bloom/convert_checkpoint.py | 962 --- .../models/contrib/bloom/requirements.txt | 6 - .../contrib/cogvlm/convert_checkpoint.py | 501 -- examples/models/contrib/dbrx/README.md | 238 - .../models/contrib/dbrx/convert_checkpoint.py | 654 -- examples/models/contrib/dbrx/requirements.txt | 6 - examples/models/contrib/deepseek_v1/README.md | 103 - .../models/contrib/deepseek_v1/__init__.py | 14 - .../contrib/deepseek_v1/convert_checkpoint.py | 210 - .../contrib/deepseek_v1/requirements.txt | 5 - examples/models/contrib/deepseek_v2/README.md | 267 - .../contrib/deepseek_v2/convert_checkpoint.py | 231 - .../contrib/deepseek_v2/requirements.txt | 3 - examples/models/contrib/dit/README.md | 133 - .../models/contrib/dit/convert_checkpoint.py | 334 - examples/models/contrib/dit/diffusion.py | 116 - .../models/contrib/dit/figs/sample.fp8.png | Bin 772223 -> 0 bytes examples/models/contrib/dit/figs/sample.png | Bin 821852 -> 0 bytes examples/models/contrib/dit/sample.py | 268 - examples/models/contrib/dit/utils_modelopt.py | 186 - .../models/contrib/dit/vae_decoder_trt.py | 139 - examples/models/contrib/falcon/README.md | 364 - .../contrib/falcon/convert_checkpoint.py | 202 - .../models/contrib/falcon/requirements.txt | 8 - examples/models/contrib/gptj/.gitignore | 4 - examples/models/contrib/gptj/README.md | 269 - .../models/contrib/gptj/convert_checkpoint.py | 166 - examples/models/contrib/gptj/requirements.txt | 5 - examples/models/contrib/gptneox/.gitignore | 3 - examples/models/contrib/gptneox/README.md | 235 - .../contrib/gptneox/convert_checkpoint.py | 732 -- .../models/contrib/gptneox/gptq_convert.sh | 9 - .../models/contrib/gptneox/requirements.txt | 5 - examples/models/contrib/grok/README.md | 92 - .../models/contrib/grok/convert_checkpoint.py | 366 - examples/models/contrib/grok/requirements.txt | 10 - examples/models/contrib/mmdit/README.md | 95 - .../contrib/mmdit/assets/sd3.5-mmdit.png | Bin 1569467 -> 0 bytes .../contrib/mmdit/convert_checkpoint.py | 123 - .../models/contrib/mmdit/requirements.txt | 2 - examples/models/contrib/mmdit/sample.py | 266 - examples/models/contrib/mpt/.gitignore | 3 - examples/models/contrib/mpt/README.md | 182 - .../models/contrib/mpt/convert_checkpoint.py | 923 -- examples/models/contrib/mpt/requirements.txt | 5 - examples/models/contrib/opt/README.md | 252 - .../models/contrib/opt/convert_checkpoint.py | 361 - examples/models/contrib/opt/requirements.txt | 5 - examples/models/contrib/stdit/README.md | 94 - examples/models/contrib/stdit/aspect.py | 526 -- .../stdit/assets/a_beautiful_waterfall.mp4 | Bin 418644 -> 0 bytes .../contrib/stdit/convert_checkpoint.py | 252 - .../models/contrib/stdit/pipeline_tllm.py | 607 -- .../models/contrib/stdit/requirements.txt | 13 - examples/models/contrib/stdit/sample.py | 170 - examples/models/contrib/stdit/scheduler.py | 101 - examples/models/contrib/stdit/text_encoder.py | 445 - examples/models/contrib/stdit/utils.py | 997 --- examples/models/contrib/stdit/vae.py | 802 -- .../models/contrib/stdit/video_transforms.py | 581 -- examples/models/core/bert/.gitignore | 2 - examples/models/core/bert/README.md | 117 - examples/models/core/bert/__init__.py | 0 .../models/core/bert/convert_checkpoint.py | 192 - examples/models/core/bert/run.py | 338 - examples/models/core/bert/utils.py | 217 - examples/models/core/commandr/README.md | 213 - .../core/commandr/convert_checkpoint.py | 187 - .../models/core/commandr/requirements.txt | 5 - examples/models/core/enc_dec/README.md | 444 - examples/models/core/enc_dec/__init__.py | 0 .../models/core/enc_dec/convert_checkpoint.py | 1958 ----- examples/models/core/enc_dec/helper.py | 121 - examples/models/core/enc_dec/run.py | 512 -- examples/models/core/gemma/README.md | 895 -- .../models/core/gemma/convert_checkpoint.py | 290 - examples/models/core/gemma/requirements.txt | 14 - examples/models/core/glm-4-9b/README.md | 292 - .../core/glm-4-9b/convert_checkpoint.py | 271 - .../models/core/glm-4-9b/requirements.txt | 8 - .../core/glm-4-9b/tokenization_chatglm.py | 343 - examples/models/core/gpt/.gitignore | 5 - examples/models/core/gpt/README.md | 786 -- .../models/core/gpt/convert_checkpoint.py | 343 - .../models/core/gpt/merge_ptuning_tables.py | 44 - examples/models/core/gpt/nemo_lora_convert.py | 206 - .../models/core/gpt/nemo_prompt_convert.py | 145 - examples/models/core/gpt/requirements.txt | 6 - examples/models/core/gpt/run_hf.py | 162 - examples/models/core/internlm2/.gitignore | 2 - examples/models/core/internlm2/README.md | 207 - .../core/internlm2/convert_checkpoint.py | 549 -- .../models/core/internlm2/requirements.txt | 1 - examples/models/core/llama/.gitignore | 5 - examples/models/core/llama/README.md | 1592 ---- .../models/core/llama/convert_checkpoint.py | 593 -- examples/models/core/llama/requirements.txt | 7 - examples/models/core/llama/summarize_long.py | 409 - examples/models/core/mamba/README.md | 232 - .../models/core/mamba/convert_checkpoint.py | 227 - examples/models/core/mamba/requirements.txt | 7 - examples/models/core/mllama/README.md | 3 - .../models/core/mllama/convert_checkpoint.py | 490 -- examples/models/core/mllama/requirements.txt | 2 - examples/models/core/nemotron_nas/README.md | 139 - .../core/nemotron_nas/calibration_utils.py | 39 - .../core/nemotron_nas/convert_checkpoint.py | 161 - examples/models/core/phi/README.md | 195 - .../models/core/phi/convert_checkpoint.py | 191 - examples/models/core/phi/phi4-mm.md | 88 - examples/models/core/phi/requirements.txt | 7 - examples/models/core/qwen/README.md | 904 -- .../models/core/qwen/convert_checkpoint.py | 347 - examples/models/core/qwen/requirements.txt | 17 - .../models/core/recurrentgemma/.gitignore | 10 - examples/models/core/recurrentgemma/README.md | 337 - .../core/recurrentgemma/convert_checkpoint.py | 529 -- .../core/recurrentgemma/requirements.txt | 12 - examples/models/core/vit/README.md | 91 - .../models/core/vit/convert_checkpoint.py | 149 - examples/models/core/whisper/README.md | 205 - .../models/core/whisper/convert_checkpoint.py | 452 - .../convert_from_distil_whisper.py | 136 - examples/models/core/whisper/requirements.txt | 11 - examples/models/core/whisper/run.py | 631 -- examples/models/core/whisper/tokenizer.py | 182 - examples/models/core/whisper/whisper_utils.py | 365 - examples/redrafter/README.md | 129 - examples/redrafter/convert_checkpoint.py | 459 - examples/redrafter/requirements.txt | 6 - setup.py | 3 - tensorrt_llm/__init__.py | 34 +- tensorrt_llm/_common.py | 306 - tensorrt_llm/_init_runtime.py | 86 + tensorrt_llm/_tensorrt_engine/__init__.py | 3 - .../_torch/attention_backend/flashinfer.py | 4 +- .../fmha/flashinfer_trtllm_gen.py | 2 +- .../_torch/attention_backend/interface.py | 4 +- .../_torch/attention_backend/sparse/dsa.py | 2 +- .../_torch/attention_backend/sparse/rocket.py | 2 +- .../attention_backend/star_flashinfer.py | 4 +- .../_torch/attention_backend/trtllm.py | 4 +- .../_torch/attention_backend/utils.py | 2 +- .../_torch/attention_backend/vanilla.py | 2 +- tensorrt_llm/_torch/auto_deploy/_compat.py | 2 +- .../custom_ops/attention/trtllm_attention.py | 2 +- .../auto_deploy/custom_ops/mla/trtllm_mla.py | 2 +- .../_torch/custom_ops/cpp_custom_ops.py | 4 +- .../_torch/custom_ops/torch_custom_ops.py | 5 +- .../_torch/disaggregation/native/transfer.py | 2 +- tensorrt_llm/_torch/distributed/__init__.py | 2 +- .../_torch/distributed/allreduce_helper.py | 172 + tensorrt_llm/_torch/distributed/ops.py | 5 +- tensorrt_llm/_torch/model_config.py | 4 +- .../checkpoints/hf/qwen3_moe_weight_mapper.py | 4 +- .../checkpoints/mistral/config_loader.py | 2 +- tensorrt_llm/_torch/models/modeling_afmoe.py | 2 +- .../_torch/models/modeling_cohere2.py | 2 +- .../_torch/models/modeling_deepseekv3.py | 4 +- .../_torch/models/modeling_exaone4.py | 2 +- .../_torch/models/modeling_exaone_moe.py | 4 +- tensorrt_llm/_torch/models/modeling_gemma3.py | 2 +- tensorrt_llm/_torch/models/modeling_gemma4.py | 2 +- tensorrt_llm/_torch/models/modeling_glm.py | 4 +- .../_torch/models/modeling_gpt_oss.py | 2 +- .../_torch/models/modeling_hunyuan_dense.py | 2 +- .../_torch/models/modeling_hunyuan_moe.py | 2 +- tensorrt_llm/_torch/models/modeling_laguna.py | 2 +- tensorrt_llm/_torch/models/modeling_llama.py | 2 +- .../models/modeling_llama_min_latency.py | 2 +- .../_torch/models/modeling_minimaxm2.py | 2 +- .../_torch/models/modeling_minimaxm3.py | 2 +- .../_torch/models/modeling_mistral.py | 2 +- .../_torch/models/modeling_mixtral.py | 2 +- .../_torch/models/modeling_nemotron.py | 2 +- .../_torch/models/modeling_nemotron_h.py | 4 +- .../_torch/models/modeling_nemotron_nas.py | 2 +- tensorrt_llm/_torch/models/modeling_phi3.py | 2 +- tensorrt_llm/_torch/models/modeling_qwen.py | 2 +- .../_torch/models/modeling_qwen2vl.py | 2 +- tensorrt_llm/_torch/models/modeling_qwen3.py | 2 +- .../_torch/models/modeling_qwen3vl.py | 2 +- .../_torch/models/modeling_qwen_moe.py | 2 +- tensorrt_llm/_torch/models/modeling_radio.py | 2 +- .../_torch/models/modeling_seedoss.py | 2 +- .../_torch/models/modeling_speculative.py | 2 +- .../_torch/models/modeling_starcoder2.py | 2 +- .../_torch/models/modeling_step3p7.py | 6 +- tensorrt_llm/_torch/models/modeling_t5.py | 2 +- tensorrt_llm/_torch/models/modeling_utils.py | 2 +- tensorrt_llm/_torch/modules/embedding.py | 2 +- .../fused_moe/communication/deep_ep.py | 2 +- .../communication/deep_ep_low_latency.py | 2 +- .../modules/fused_moe/configurable_moe.py | 2 +- .../_torch/modules/fused_moe/create_moe.py | 2 +- .../modules/fused_moe/fused_moe_cute_dsl.py | 2 +- .../fused_moe/fused_moe_cute_dsl_b12x.py | 2 +- .../modules/fused_moe/fused_moe_cutlass.py | 2 +- .../modules/fused_moe/fused_moe_deepgemm.py | 2 +- .../modules/fused_moe/fused_moe_densegemm.py | 2 +- .../modules/fused_moe/fused_moe_triton.py | 2 +- .../modules/fused_moe/fused_moe_trtllm_gen.py | 2 +- .../_torch/modules/fused_moe/interface.py | 6 +- .../fused_moe/mega_moe/mega_moe_cute_dsl.py | 2 +- .../fused_moe/mega_moe/mega_moe_deepgemm.py | 2 +- .../_torch/modules/fused_moe/quantization.py | 2 +- tensorrt_llm/_torch/modules/linear.py | 6 +- tensorrt_llm/_torch/modules/triton_linear.py | 2 +- .../_torch/pyexecutor/model_loader.py | 2 +- tensorrt_llm/_torch/pyexecutor/py_executor.py | 2 +- .../_torch/pyexecutor/resource_manager.py | 2 +- .../visual_gen/attention_backend/trtllm.py | 2 +- .../visual_gen/attention_backend/utils.py | 2 +- tensorrt_llm/_torch/visual_gen/config.py | 4 +- .../models/cosmos3/transformer_cosmos3.py | 2 +- .../models/flux/transformer_flux.py | 2 +- .../models/flux/transformer_flux2.py | 2 +- .../models/ltx2/transformer_ltx2.py | 2 +- .../visual_gen/models/wan/transformer_wan.py | 2 +- .../_torch/visual_gen/modules/rms_norm.py | 2 +- tensorrt_llm/_utils.py | 203 +- tensorrt_llm/bench/benchmark/__init__.py | 8 +- .../bench/benchmark/utils/asynchronous.py | 3 +- tensorrt_llm/bench/benchmark/utils/general.py | 65 +- tensorrt_llm/bench/build/__init__.py | 0 tensorrt_llm/bench/build/build.py | 370 - tensorrt_llm/bench/build/dataclasses.py | 396 - tensorrt_llm/bench/build/tuning.py | 231 - tensorrt_llm/bench/build/utils.py | 34 - tensorrt_llm/builder.py | 1292 --- tensorrt_llm/commands/bench.py | 2 - tensorrt_llm/commands/build.py | 553 -- tensorrt_llm/commands/eval.py | 20 +- tensorrt_llm/commands/prune.py | 122 - tensorrt_llm/commands/refit.py | 183 - tensorrt_llm/commands/serve.py | 54 +- tensorrt_llm/disaggregated_params.py | 5 - tensorrt_llm/evaluate/cnn_dailymail.py | 3 +- tensorrt_llm/evaluate/covost2.py | 3 +- tensorrt_llm/evaluate/json_mode_eval.py | 3 +- tensorrt_llm/evaluate/lm_eval.py | 15 +- tensorrt_llm/evaluate/longbench_v2.py | 3 +- tensorrt_llm/evaluate/mmlu.py | 3 +- tensorrt_llm/executor/base_worker.py | 34 +- tensorrt_llm/executor/executor.py | 3 +- tensorrt_llm/executor/ray_gpu_worker.py | 5 +- tensorrt_llm/executor/rpc_worker.py | 7 +- tensorrt_llm/executor/worker.py | 7 +- tensorrt_llm/functional.py | 7691 ----------------- tensorrt_llm/functional_enums.py | 520 ++ tensorrt_llm/graph_rewriting.py | 645 -- tensorrt_llm/grpc/grpc_request_manager.py | 2 +- tensorrt_llm/layers/__init__.py | 79 - tensorrt_llm/layers/activation.py | 22 - tensorrt_llm/layers/attention.py | 2808 ------ tensorrt_llm/layers/cast.py | 29 - tensorrt_llm/layers/conv.py | 260 - tensorrt_llm/layers/embedding.py | 673 -- tensorrt_llm/layers/language_adapter.py | 94 - tensorrt_llm/layers/linear.py | 551 -- tensorrt_llm/layers/lora.py | 181 - tensorrt_llm/layers/mlp.py | 565 -- tensorrt_llm/layers/moe.py | 1553 ---- tensorrt_llm/layers/normalization.py | 341 - tensorrt_llm/layers/pooling.py | 38 - tensorrt_llm/layers/recurrent.py | 316 - tensorrt_llm/layers/ssm.py | 358 - tensorrt_llm/llmapi/__init__.py | 7 +- tensorrt_llm/llmapi/build_cache.py | 20 +- tensorrt_llm/llmapi/llm.py | 227 +- tensorrt_llm/llmapi/llm_args.py | 377 +- tensorrt_llm/llmapi/llm_utils.py | 564 +- tensorrt_llm/logger.py | 34 +- tensorrt_llm/lora_manager.py | 67 +- tensorrt_llm/models/__init__.py | 226 +- tensorrt_llm/models/baichuan/__init__.py | 14 - tensorrt_llm/models/baichuan/config.py | 92 - tensorrt_llm/models/baichuan/convert.py | 931 -- tensorrt_llm/models/baichuan/model.py | 253 - tensorrt_llm/models/bert/__init__.py | 14 - tensorrt_llm/models/bert/config.py | 117 - tensorrt_llm/models/bert/convert.py | 309 - tensorrt_llm/models/bert/model.py | 548 -- tensorrt_llm/models/bloom/__init__.py | 14 - tensorrt_llm/models/bloom/model.py | 165 - tensorrt_llm/models/chatglm/__init__.py | 14 - tensorrt_llm/models/chatglm/config.py | 182 - tensorrt_llm/models/chatglm/convert.py | 727 -- tensorrt_llm/models/chatglm/model.py | 372 - tensorrt_llm/models/clip/__init__.py | 14 - tensorrt_llm/models/clip/model.py | 213 - tensorrt_llm/models/cogvlm/__init__.py | 14 - tensorrt_llm/models/cogvlm/config.py | 44 - tensorrt_llm/models/cogvlm/convert.py | 240 - tensorrt_llm/models/cogvlm/model.py | 291 - tensorrt_llm/models/commandr/__init__.py | 14 - tensorrt_llm/models/commandr/config.py | 88 - tensorrt_llm/models/commandr/model.py | 195 - tensorrt_llm/models/dbrx/__init__.py | 14 - tensorrt_llm/models/dbrx/config.py | 59 - tensorrt_llm/models/dbrx/model.py | 188 - tensorrt_llm/models/deepseek_v1/__init__.py | 14 - tensorrt_llm/models/deepseek_v1/config.py | 105 - tensorrt_llm/models/deepseek_v1/convert.py | 290 - tensorrt_llm/models/deepseek_v1/model.py | 279 - tensorrt_llm/models/deepseek_v2/__init__.py | 14 - tensorrt_llm/models/deepseek_v2/config.py | 148 - tensorrt_llm/models/deepseek_v2/convert.py | 929 -- tensorrt_llm/models/deepseek_v2/model.py | 361 - tensorrt_llm/models/dit/__init__.py | 14 - tensorrt_llm/models/dit/model.py | 382 - tensorrt_llm/models/eagle/__init__.py | 14 - tensorrt_llm/models/eagle/config.py | 222 - tensorrt_llm/models/eagle/model.py | 1327 --- tensorrt_llm/models/enc_dec/__init__.py | 14 - tensorrt_llm/models/enc_dec/model.py | 2195 ----- tensorrt_llm/models/falcon/__init__.py | 14 - tensorrt_llm/models/falcon/config.py | 118 - tensorrt_llm/models/falcon/convert.py | 499 -- tensorrt_llm/models/falcon/model.py | 273 - tensorrt_llm/models/gemma/__init__.py | 14 - tensorrt_llm/models/gemma/config.py | 224 - tensorrt_llm/models/gemma/convert.py | 926 -- tensorrt_llm/models/gemma/model.py | 396 - tensorrt_llm/models/gemma/smoothquant.py | 848 -- tensorrt_llm/models/gemma/utils/__init__.py | 14 - tensorrt_llm/models/gemma/utils/layers.py | 39 - tensorrt_llm/models/gemma/utils/modules.py | 206 - tensorrt_llm/models/gemma/utils/params.py | 72 - .../gemma/utils/positional_embeddings.py | 92 - tensorrt_llm/models/gemma/utils/sampler.py | 191 - .../models/gemma/utils/transformer.py | 114 - tensorrt_llm/models/gemma/weight.py | 181 - tensorrt_llm/models/generation_mixin.py | 889 -- tensorrt_llm/models/gpt/__init__.py | 14 - tensorrt_llm/models/gpt/config.py | 324 - tensorrt_llm/models/gpt/convert.py | 1455 ---- tensorrt_llm/models/gpt/model.py | 417 - tensorrt_llm/models/gptj/__init__.py | 14 - tensorrt_llm/models/gptj/config.py | 55 - tensorrt_llm/models/gptj/convert.py | 170 - tensorrt_llm/models/gptj/model.py | 202 - tensorrt_llm/models/gptneox/__init__.py | 14 - tensorrt_llm/models/gptneox/model.py | 147 - tensorrt_llm/models/grok/__init__.py | 14 - tensorrt_llm/models/grok/convert.py | 518 -- tensorrt_llm/models/grok/model.py | 273 - tensorrt_llm/models/grok/weight.py | 35 - tensorrt_llm/models/llama/__init__.py | 14 - tensorrt_llm/models/llama/config.py | 280 - tensorrt_llm/models/llama/convert.py | 2449 ------ tensorrt_llm/models/llama/model.py | 614 -- tensorrt_llm/models/mamba/__init__.py | 14 - tensorrt_llm/models/mamba/config.py | 313 - tensorrt_llm/models/mamba/convert.py | 245 - tensorrt_llm/models/mamba/model.py | 471 - tensorrt_llm/models/medusa/__init__.py | 14 - tensorrt_llm/models/medusa/config.py | 114 - tensorrt_llm/models/medusa/model.py | 267 - tensorrt_llm/models/medusa/weight.py | 648 -- tensorrt_llm/models/mllama/__init__.py | 14 - tensorrt_llm/models/mllama/config.py | 256 - tensorrt_llm/models/mllama/model.py | 1569 ---- tensorrt_llm/models/mmdit_sd3/__init__.py | 14 - tensorrt_llm/models/mmdit_sd3/config.py | 132 - tensorrt_llm/models/mmdit_sd3/model.py | 620 -- tensorrt_llm/models/model_weights_loader.py | 402 - tensorrt_llm/models/modeling_utils.py | 1727 +--- tensorrt_llm/models/mpt/__init__.py | 14 - tensorrt_llm/models/mpt/model.py | 176 - .../models/multimodal_encoders/__init__.py | 14 - .../models/multimodal_encoders/config.py | 116 - .../models/multimodal_encoders/model.py | 175 - tensorrt_llm/models/nemotron_nas/__init__.py | 14 - tensorrt_llm/models/nemotron_nas/config.py | 208 - tensorrt_llm/models/nemotron_nas/convert.py | 381 - .../models/nemotron_nas/layer_config.py | 86 - tensorrt_llm/models/nemotron_nas/model.py | 816 -- tensorrt_llm/models/opt/__init__.py | 14 - tensorrt_llm/models/opt/model.py | 181 - tensorrt_llm/models/phi/__init__.py | 14 - tensorrt_llm/models/phi/config.py | 87 - tensorrt_llm/models/phi/convert.py | 145 - tensorrt_llm/models/phi/model.py | 217 - tensorrt_llm/models/phi3/__init__.py | 14 - tensorrt_llm/models/phi3/config.py | 143 - tensorrt_llm/models/phi3/convert.py | 134 - tensorrt_llm/models/phi3/model.py | 316 - tensorrt_llm/models/phi3/split_weights.py | 218 - tensorrt_llm/models/qwen/__init__.py | 14 - tensorrt_llm/models/qwen/config.py | 211 - tensorrt_llm/models/qwen/convert.py | 1284 --- tensorrt_llm/models/qwen/model.py | 545 -- tensorrt_llm/models/qwen/utils.py | 116 - .../models/recurrentgemma/__init__.py | 14 - tensorrt_llm/models/recurrentgemma/model.py | 624 -- tensorrt_llm/models/redrafter/__init__.py | 14 - tensorrt_llm/models/redrafter/drafter.py | 117 - tensorrt_llm/models/redrafter/model.py | 317 - .../models/redrafter/redrafter_helper.py | 759 -- tensorrt_llm/models/stdit/__init__.py | 14 - tensorrt_llm/models/stdit/config.py | 115 - tensorrt_llm/models/stdit/model.py | 1624 ---- tensorrt_llm/models/unet/__init__.py | 14 - tensorrt_llm/models/unet/attention.py | 332 - tensorrt_llm/models/unet/embeddings.py | 117 - tensorrt_llm/models/unet/pp/__init__.py | 0 tensorrt_llm/models/unet/pp/attention.py | 107 - tensorrt_llm/models/unet/pp/conv2d.py | 109 - tensorrt_llm/models/unet/pp/groupnorm.py | 57 - tensorrt_llm/models/unet/pp/unet_pp.py | 131 - tensorrt_llm/models/unet/resnet.py | 254 - tensorrt_llm/models/unet/unet_2d_blocks.py | 636 -- tensorrt_llm/models/unet/unet_2d_condition.py | 249 - tensorrt_llm/models/unet/weights.py | 197 - tensorrt_llm/module.py | 288 - tensorrt_llm/network.py | 959 -- tensorrt_llm/parameter.py | 281 - tensorrt_llm/plugin/__init__.py | 23 - tensorrt_llm/plugin/plugin.py | 780 -- tensorrt_llm/profiler.py | 9 +- tensorrt_llm/python_plugin.py | 578 -- tensorrt_llm/quantization/__init__.py | 5 +- tensorrt_llm/quantization/functional.py | 1460 ---- tensorrt_llm/quantization/layers.py | 3383 -------- tensorrt_llm/quantization/preprocessing.py | 120 + tensorrt_llm/quantization/quant_config.py | 269 + tensorrt_llm/quantization/quantize.py | 611 -- tensorrt_llm/runtime/__init__.py | 41 +- tensorrt_llm/runtime/enc_dec_model_runner.py | 537 -- tensorrt_llm/runtime/generation.py | 4785 ---------- tensorrt_llm/runtime/kv_cache_manager.py | 473 - tensorrt_llm/runtime/medusa_utils.py | 182 - tensorrt_llm/runtime/memory_pools/__init__.py | 0 .../memory_pools/memory_pools_allocator.py | 80 - tensorrt_llm/runtime/memory_pools/pool.py | 7 - .../memory_pools/pools_kv_cache_manager.py | 59 - tensorrt_llm/runtime/model_config.py | 118 + tensorrt_llm/runtime/model_runner.py | 1001 --- tensorrt_llm/runtime/model_runner_cpp.py | 1223 --- .../runtime/multimodal_model_runner.py | 2744 ------ .../runtime/processor_wrapper/__init__.py | 20 - .../mllama_processor_wrapper.py | 76 - .../processor_wrapper/processor_wrapper.py | 37 - tensorrt_llm/runtime/redrafter_utils.py | 341 - tensorrt_llm/runtime/session.py | 324 - tensorrt_llm/serialization.py | 2 +- tensorrt_llm/serve/openai_server.py | 6 +- tensorrt_llm/tools/multimodal_builder.py | 1844 ---- tensorrt_llm/tools/onnx_utils.py | 80 - tensorrt_llm/tools/plugin_gen/__init__.py | 0 tensorrt_llm/tools/plugin_gen/core.py | 713 -- tensorrt_llm/tools/plugin_gen/plugin_gen.py | 374 - tensorrt_llm/tools/plugin_gen/shape_infer.py | 355 - .../plugin_gen/templates/CMakeLists.txt.tpl | 86 - .../plugin_gen/templates/functional.py.tpl | 70 - .../tools/plugin_gen/templates/plugin.cpp.tpl | 310 - .../tools/plugin_gen/templates/plugin.h.tpl | 120 - .../plugin_gen/templates/plugin_common.cpp | 96 - .../plugin_gen/templates/plugin_common.h | 208 - .../templates/tritonPlugins.cpp.tpl | 147 - tensorrt_llm/top_model_mixin.py | 72 - tensorrt_llm/usage/llmapi_config.py | 3 +- tensorrt_llm/usage/usage_lib.py | 6 +- tensorrt_llm/visual_gen/__init__.py | 2 +- tensorrt_llm/visual_gen/args.py | 2 +- .../defs/triton_server/build_engines.py | 1600 ---- .../defs/triton_server/test_triton.py | 8 - .../defs/triton_server/test_triton_llm.py | 3886 --------- .../defs/triton_server/test_triton_llmapi.py | 309 + .../defs/triton_server/test_triton_memleak.py | 149 - .../triton_server/test_triton_multi_node.py | 73 - .../defs/triton_server/test_triton_rcca.py | 809 -- .../test_lists/qa/llm_triton_integration.txt | 357 +- .../integration/test_lists/test-db/l0_a10.yml | 12 - .../test_lists/test-db/l0_a100.yml | 3 - .../integration/test_lists/test-db/l0_a30.yml | 37 +- .../test_lists/test-db/l0_b200.yml | 2 - .../test_lists/test-db/l0_dgx_h200.yml | 3 +- .../test_lists/test-db/l0_gb203.yml | 7 - .../test_lists/test-db/l0_gh200.yml | 9 - .../test_lists/test-db/l0_h100.yml | 12 - .../test_lists/test-db/l0_l40s.yml | 8 - tests/integration/test_lists/waives.txt | 14 +- tests/unittest/others/test_builder.py | 86 - tests/unittest/others/test_graph_rewriter.py | 524 -- tests/unittest/others/test_layer.py | 2226 ----- .../unittest/others/test_precision_control.py | 71 - tests/unittest/others/test_session.py | 78 - tests/unittest/test_model_runner_cpp.py | 82 - tests/unittest/trt/__init__.py | 0 .../trt/attention/hf_dynamic_cache_compat.py | 52 - .../trt/attention/test_bert_attention.py | 175 - .../trt/attention/test_gpt_attention.py | 1523 ---- .../trt/attention/test_gpt_attention_IFB.py | 1111 --- .../attention/test_gpt_attention_no_cache.py | 304 - .../trt/attention/test_sage_attention.py | 144 - tests/unittest/trt/functional/__init__.py | 0 tests/unittest/trt/functional/test_alibi.py | 96 - .../trt/functional/test_allreduce_norm.py | 169 - .../test_allreduce_prepost_residual_norm.py | 183 - tests/unittest/trt/functional/test_arange.py | 97 - tests/unittest/trt/functional/test_argmax.py | 63 - .../unittest/trt/functional/test_assertion.py | 57 - .../trt/functional/test_avg_pool2d.py | 62 - tests/unittest/trt/functional/test_cast.py | 59 - tests/unittest/trt/functional/test_conv2d.py | 62 - tests/unittest/trt/functional/test_conv3d.py | 72 - tests/unittest/trt/functional/test_cos.py | 55 - tests/unittest/trt/functional/test_cumsum.py | 164 - tests/unittest/trt/functional/test_dora.py | 293 - tests/unittest/trt/functional/test_einsum.py | 65 - .../functional/test_embedding_single_gpu.py | 85 - tests/unittest/trt/functional/test_exp.py | 54 - tests/unittest/trt/functional/test_expand.py | 153 - tests/unittest/trt/functional/test_flatten.py | 235 - tests/unittest/trt/functional/test_flip.py | 57 - .../unittest/trt/functional/test_fp4_gemm.py | 390 - .../trt/functional/test_fp4_gemm_ootb.py | 162 - tests/unittest/trt/functional/test_gather.py | 75 - .../unittest/trt/functional/test_gather_nd.py | 196 - tests/unittest/trt/functional/test_geglu.py | 60 - tests/unittest/trt/functional/test_gelu.py | 73 - .../trt/functional/test_gemm_swiglu.py | 143 - .../trt/functional/test_group_norm.py | 63 - .../unittest/trt/functional/test_identity.py | 61 - .../trt/functional/test_index_select.py | 57 - .../trt/functional/test_interpolate.py | 379 - .../trt/functional/test_logsoftmax.py | 163 - tests/unittest/trt/functional/test_lora.py | 155 - .../trt/functional/test_low_latency_gemm.py | 112 - .../trt/functional/test_mamba_conv1d.py | 248 - .../trt/functional/test_masked_scatter.py | 88 - .../trt/functional/test_masked_select.py | 84 - tests/unittest/trt/functional/test_matmul.py | 133 - .../trt/functional/test_meshgrid2d.py | 68 - tests/unittest/trt/functional/test_moe.py | 1421 --- tests/unittest/trt/functional/test_nccl.py | 115 - tests/unittest/trt/functional/test_nonzero.py | 79 - tests/unittest/trt/functional/test_outer.py | 59 - tests/unittest/trt/functional/test_pad.py | 69 - tests/unittest/trt/functional/test_permute.py | 61 - .../trt/functional/test_pp_reduce_scatter.py | 193 - tests/unittest/trt/functional/test_quant.py | 118 - .../unittest/trt/functional/test_rearrange.py | 83 - tests/unittest/trt/functional/test_repeat.py | 59 - .../trt/functional/test_repeat_interleave.py | 61 - tests/unittest/trt/functional/test_rg_lru.py | 314 - tests/unittest/trt/functional/test_sample.py | 122 - tests/unittest/trt/functional/test_scatter.py | 98 - .../trt/functional/test_scatter_nd.py | 81 - tests/unittest/trt/functional/test_select.py | 84 - .../trt/functional/test_selective_scan.py | 674 -- tests/unittest/trt/functional/test_sigmoid.py | 55 - tests/unittest/trt/functional/test_silu.py | 55 - tests/unittest/trt/functional/test_sin.py | 55 - tests/unittest/trt/functional/test_slice.py | 117 - .../unittest/trt/functional/test_softplus.py | 55 - tests/unittest/trt/functional/test_split.py | 83 - tests/unittest/trt/functional/test_squeeze.py | 69 - tests/unittest/trt/functional/test_swiglu.py | 56 - tests/unittest/trt/functional/test_topk.py | 68 - .../unittest/trt/functional/test_transpose.py | 58 - tests/unittest/trt/functional/test_unbind.py | 105 - .../unittest/trt/functional/test_unsqueeze.py | 58 - tests/unittest/trt/functional/test_view.py | 108 - tests/unittest/trt/functional/test_where.py | 90 - tests/unittest/trt/model/__init__.py | 0 .../eagle/test_decode_draft_tokens_plugin.py | 2356 ----- .../test_prepare_drafter_inputs_plugin.py | 1078 --- .../test_sample_accept_draft_tokens_plugin.py | 694 -- .../trt/model/redrafter/test_beams2tree.py | 201 - .../trt/model/redrafter/test_draft_token.py | 173 - .../redrafter/test_draft_token_indices.py | 88 - .../trt/model/redrafter/test_gather_beams.py | 93 - .../unittest/trt/model/redrafter/test_mask.py | 113 - .../redrafter/test_packed_position_ids.py | 114 - .../redrafter/test_prefix_match_indices.py | 89 - .../trt/model/redrafter/test_prepare_input.py | 169 - .../model/redrafter/test_process_logits.py | 294 - .../unittest/trt/model/redrafter/test_top1.py | 78 - .../model/redrafter/test_unpack_gen_data.py | 148 - .../trt/model/redrafter/test_validate.py | 173 - tests/unittest/trt/model/test_gpt.py | 1088 --- tests/unittest/trt/model/test_gpt_e2e.py | 238 - tests/unittest/trt/model/test_llama.py | 608 -- tests/unittest/trt/model/test_mamba.py | 500 -- tests/unittest/trt/model/test_mistral.py | 628 -- tests/unittest/trt/model/test_nemotron_nas.py | 994 --- tests/unittest/trt/model/test_phi.py | 377 - tests/unittest/trt/model/test_unet.py | 864 -- tests/unittest/trt/model_api/profile_utils.py | 26 - .../trt/model_api/test_model_api_multi_gpu.py | 118 - .../trt/python_plugin/plugin_wrapper_utils.py | 37 - .../trt/python_plugin/test_plugin_wrapper.py | 163 - tests/unittest/trt/quantization/__init__.py | 0 tests/unittest/trt/quantization/_utils.py | 254 - .../trt/quantization/test_fp8_quantization.py | 237 - .../trt/quantization/test_fp8_rowwise_gemm.py | 146 - .../trt/quantization/test_functional.py | 219 - tests/unittest/trt/quantization/test_mode.py | 185 - .../test_moe_weight_only_quant_matmul.py | 430 - .../trt/quantization/test_qserve_gemm.py | 304 - tests/unittest/trt/quantization/test_quant.py | 228 - .../trt/quantization/test_quant_layer.py | 1166 --- .../quantization/test_smooth_quant_gemm.py | 130 - .../test_smooth_quant_layer_norm.py | 139 - .../test_smooth_quant_rms_norm.py | 159 - ...test_weight_only_groupwise_quant_matmul.py | 448 - .../test_weight_only_quant_matmul.py | 170 - .../all_models/gpt/tensorrt_llm/1/model.py | 203 - .../all_models/gpt/tensorrt_llm/config.pbtxt | 160 - .../tensorrt_llm/1/model.py | 1625 ---- .../tensorrt_llm/config.pbtxt | 887 -- .../multimodal/multimodal_encoders/1/model.py | 870 -- .../base_metrics_verification_tests.py | 400 - .../custom_metrics_verification_tests.py | 169 - .../ci/L0_backend_trtllm/generate_engines.sh | 82 - .../ci/L0_backend_trtllm/simple_data.json | 67 - triton_backend/ci/L0_backend_trtllm/test.sh | 663 -- triton_backend/ci/README.md | 107 - .../inflight_batcher_llm/CMakeLists.txt | 319 - .../inflight_batcher_llm/client/README.md | 31 - .../inflight_batcher_llm/client/__init__.py | 0 .../e2e_grpc_speculative_decoding_client.py | 562 -- .../client/end_to_end_grpc_client.py | 736 -- .../client/inflight_batcher_llm_client.py | 1250 --- .../TritonTensorRTLLMBackendConfig.cmake.in | 39 - .../cmake/modules/set_ifndef.cmake | 24 - .../inflight_batcher_llm/scripts/build.sh | 76 - .../custom_metrics_reporter.cc | 283 - .../custom_metrics_reporter.h | 196 - .../src/libtensorrtllm.cc | 225 - .../src/libtriton_tensorrtllm.ldscript | 33 - .../src/model_instance_state.cc | 1559 ---- .../src/model_instance_state.h | 295 - .../inflight_batcher_llm/src/model_state.cc | 336 - .../inflight_batcher_llm/src/model_state.h | 158 - .../inflight_batcher_llm/src/namedTensor.cpp | 121 - .../inflight_batcher_llm/src/namedTensor.h | 93 - .../inflight_batcher_llm/src/utils.cc | 1142 --- .../inflight_batcher_llm/src/utils.h | 444 - .../inflight_batcher_llm/tests/CMakeLists.txt | 66 - .../inflight_batcher_llm/tests/first.json | 25 - .../tests/modelInstanceStateTest.cpp | 94 - .../inflight_batcher_llm/tests/modelState.cpp | 105 - .../inflight_batcher_llm/tests/second.json | 25 - .../inflight_batcher_llm/tests/third.json | 25 - .../inflight_batcher_llm/tests/utilsTest.cpp | 787 -- 726 files changed, 2078 insertions(+), 182181 deletions(-) delete mode 100644 docs/source/commands/trtllm-build.rst delete mode 100644 docs/source/legacy/advanced/disaggregated-service.md delete mode 100644 docs/source/legacy/advanced/executor.md delete mode 100644 docs/source/legacy/advanced/expert-parallelism.md delete mode 100644 docs/source/legacy/advanced/gpt-attention.md delete mode 100644 docs/source/legacy/advanced/gpt-runtime.md delete mode 100644 docs/source/legacy/advanced/graph-rewriting.md delete mode 100644 docs/source/legacy/advanced/images/8x_l20_L40S_node_architecture.png delete mode 100644 docs/source/legacy/advanced/images/disaggregated-service_usage.png delete mode 100644 docs/source/legacy/advanced/kv-cache-management.md delete mode 100644 docs/source/legacy/advanced/kv-cache-reuse.md delete mode 100644 docs/source/legacy/advanced/lora.md delete mode 100644 docs/source/legacy/advanced/lowprecision-pcie-allreduce.md delete mode 100644 docs/source/legacy/advanced/open-sourced-cutlass-kernels.md delete mode 100644 docs/source/legacy/advanced/speculative-decoding.md delete mode 100644 docs/source/legacy/advanced/weight-streaming.md delete mode 100644 docs/source/legacy/architecture/add-model.md delete mode 100644 docs/source/legacy/architecture/checkpoint.md delete mode 100644 docs/source/legacy/architecture/core-concepts.md delete mode 100644 docs/source/legacy/architecture/model-weights-loader.md delete mode 100644 docs/source/legacy/architecture/workflow.md delete mode 100644 docs/source/legacy/dev-on-cloud/build-image-to-dockerhub.md delete mode 100644 docs/source/legacy/dev-on-cloud/dev-on-runpod.md delete mode 100644 docs/source/legacy/key-features.md delete mode 100644 docs/source/legacy/performance/perf-analysis.md delete mode 100644 docs/source/legacy/performance/perf-benchmarking.md delete mode 100644 docs/source/legacy/performance/performance-tuning-guide/benchmarking-default-performance.md delete mode 100644 docs/source/legacy/performance/performance-tuning-guide/deciding-model-sharding-strategy.md delete mode 100644 docs/source/legacy/performance/performance-tuning-guide/fp8-quantization.md delete mode 100644 docs/source/legacy/performance/performance-tuning-guide/index.rst delete mode 100644 docs/source/legacy/performance/performance-tuning-guide/introduction.md delete mode 100644 docs/source/legacy/performance/performance-tuning-guide/tuning-max-batch-size-and-max-num-tokens.md delete mode 100644 docs/source/legacy/performance/performance-tuning-guide/useful-build-time-flags.md delete mode 100644 docs/source/legacy/performance/performance-tuning-guide/useful-runtime-flags.md delete mode 100644 docs/source/legacy/python-api/tensorrt_llm.functional.rst delete mode 100644 docs/source/legacy/python-api/tensorrt_llm.layers.rst delete mode 100644 docs/source/legacy/python-api/tensorrt_llm.models.rst delete mode 100644 docs/source/legacy/python-api/tensorrt_llm.plugin.rst delete mode 100644 docs/source/legacy/python-api/tensorrt_llm.quantization.rst delete mode 100644 docs/source/legacy/python-api/tensorrt_llm.runtime.rst delete mode 100644 docs/source/legacy/reference/memory.md delete mode 100644 docs/source/legacy/reference/multimodal-feature-support-matrix.md delete mode 100644 docs/source/legacy/reference/precision.md delete mode 100644 docs/source/legacy/reference/support-matrix.md delete mode 100644 docs/source/legacy/reference/troubleshooting.md create mode 100644 docs/source/legacy/tensorrt-backend-removal.md delete mode 100644 docs/source/legacy/tensorrt_quickstart.md delete mode 100644 docs/source/legacy/torch.md delete mode 100644 examples/draft_target_model/README.md delete mode 100644 examples/draft_target_model/requirements.txt delete mode 100644 examples/eagle/README.md delete mode 100644 examples/eagle/convert_checkpoint.py delete mode 100644 examples/eagle/requirements.txt delete mode 100755 examples/llm-api/_tensorrt_engine/llm_eagle2_decoding.py delete mode 100644 examples/llm-api/_tensorrt_engine/llm_eagle_decoding.py delete mode 100644 examples/llm-api/_tensorrt_engine/llm_inference_customize.py delete mode 100644 examples/llm-api/_tensorrt_engine/llm_inference_kv_events.py delete mode 100644 examples/llm-api/_tensorrt_engine/llm_lookahead_decoding.py delete mode 100644 examples/llm-api/_tensorrt_engine/llm_medusa_decoding.py delete mode 100644 examples/llm-api/_tensorrt_engine/llm_quantization.py delete mode 100644 examples/llm-api/_tensorrt_engine/quickstart_example.py delete mode 100644 examples/lookahead/README.md delete mode 100644 examples/lookahead/requirements.txt delete mode 100644 examples/medusa/README.md delete mode 100644 examples/medusa/convert_checkpoint.py delete mode 100644 examples/medusa/requirements.txt delete mode 100644 examples/models/contrib/baichuan/README.md delete mode 100644 examples/models/contrib/baichuan/convert_checkpoint.py delete mode 100644 examples/models/contrib/baichuan/requirements.txt delete mode 100644 examples/models/contrib/bloom/.gitignore delete mode 100644 examples/models/contrib/bloom/README.md delete mode 100644 examples/models/contrib/bloom/convert_checkpoint.py delete mode 100644 examples/models/contrib/bloom/requirements.txt delete mode 100644 examples/models/contrib/cogvlm/convert_checkpoint.py delete mode 100644 examples/models/contrib/dbrx/README.md delete mode 100644 examples/models/contrib/dbrx/convert_checkpoint.py delete mode 100644 examples/models/contrib/dbrx/requirements.txt delete mode 100755 examples/models/contrib/deepseek_v1/README.md delete mode 100644 examples/models/contrib/deepseek_v1/__init__.py delete mode 100644 examples/models/contrib/deepseek_v1/convert_checkpoint.py delete mode 100644 examples/models/contrib/deepseek_v1/requirements.txt delete mode 100644 examples/models/contrib/deepseek_v2/README.md delete mode 100755 examples/models/contrib/deepseek_v2/convert_checkpoint.py delete mode 100644 examples/models/contrib/deepseek_v2/requirements.txt delete mode 100644 examples/models/contrib/dit/README.md delete mode 100644 examples/models/contrib/dit/convert_checkpoint.py delete mode 100644 examples/models/contrib/dit/diffusion.py delete mode 100644 examples/models/contrib/dit/figs/sample.fp8.png delete mode 100644 examples/models/contrib/dit/figs/sample.png delete mode 100644 examples/models/contrib/dit/sample.py delete mode 100644 examples/models/contrib/dit/utils_modelopt.py delete mode 100644 examples/models/contrib/dit/vae_decoder_trt.py delete mode 100644 examples/models/contrib/falcon/README.md delete mode 100644 examples/models/contrib/falcon/convert_checkpoint.py delete mode 100644 examples/models/contrib/falcon/requirements.txt delete mode 100644 examples/models/contrib/gptj/.gitignore delete mode 100644 examples/models/contrib/gptj/README.md delete mode 100644 examples/models/contrib/gptj/convert_checkpoint.py delete mode 100644 examples/models/contrib/gptj/requirements.txt delete mode 100644 examples/models/contrib/gptneox/.gitignore delete mode 100644 examples/models/contrib/gptneox/README.md delete mode 100644 examples/models/contrib/gptneox/convert_checkpoint.py delete mode 100644 examples/models/contrib/gptneox/gptq_convert.sh delete mode 100644 examples/models/contrib/gptneox/requirements.txt delete mode 100644 examples/models/contrib/grok/README.md delete mode 100644 examples/models/contrib/grok/convert_checkpoint.py delete mode 100644 examples/models/contrib/grok/requirements.txt delete mode 100644 examples/models/contrib/mmdit/README.md delete mode 100644 examples/models/contrib/mmdit/assets/sd3.5-mmdit.png delete mode 100644 examples/models/contrib/mmdit/convert_checkpoint.py delete mode 100644 examples/models/contrib/mmdit/requirements.txt delete mode 100644 examples/models/contrib/mmdit/sample.py delete mode 100644 examples/models/contrib/mpt/.gitignore delete mode 100644 examples/models/contrib/mpt/README.md delete mode 100644 examples/models/contrib/mpt/convert_checkpoint.py delete mode 100644 examples/models/contrib/mpt/requirements.txt delete mode 100644 examples/models/contrib/opt/README.md delete mode 100644 examples/models/contrib/opt/convert_checkpoint.py delete mode 100644 examples/models/contrib/opt/requirements.txt delete mode 100644 examples/models/contrib/stdit/README.md delete mode 100644 examples/models/contrib/stdit/aspect.py delete mode 100644 examples/models/contrib/stdit/assets/a_beautiful_waterfall.mp4 delete mode 100644 examples/models/contrib/stdit/convert_checkpoint.py delete mode 100644 examples/models/contrib/stdit/pipeline_tllm.py delete mode 100644 examples/models/contrib/stdit/requirements.txt delete mode 100644 examples/models/contrib/stdit/sample.py delete mode 100644 examples/models/contrib/stdit/scheduler.py delete mode 100644 examples/models/contrib/stdit/text_encoder.py delete mode 100644 examples/models/contrib/stdit/utils.py delete mode 100644 examples/models/contrib/stdit/vae.py delete mode 100644 examples/models/contrib/stdit/video_transforms.py delete mode 100644 examples/models/core/bert/.gitignore delete mode 100644 examples/models/core/bert/README.md delete mode 100644 examples/models/core/bert/__init__.py delete mode 100644 examples/models/core/bert/convert_checkpoint.py delete mode 100644 examples/models/core/bert/run.py delete mode 100644 examples/models/core/bert/utils.py delete mode 100644 examples/models/core/commandr/README.md delete mode 100644 examples/models/core/commandr/convert_checkpoint.py delete mode 100644 examples/models/core/commandr/requirements.txt delete mode 100644 examples/models/core/enc_dec/README.md delete mode 100644 examples/models/core/enc_dec/__init__.py delete mode 100755 examples/models/core/enc_dec/convert_checkpoint.py delete mode 100755 examples/models/core/enc_dec/helper.py delete mode 100644 examples/models/core/enc_dec/run.py delete mode 100644 examples/models/core/gemma/README.md delete mode 100644 examples/models/core/gemma/convert_checkpoint.py delete mode 100644 examples/models/core/gemma/requirements.txt delete mode 100644 examples/models/core/glm-4-9b/README.md delete mode 100644 examples/models/core/glm-4-9b/convert_checkpoint.py delete mode 100644 examples/models/core/glm-4-9b/requirements.txt delete mode 100644 examples/models/core/glm-4-9b/tokenization_chatglm.py delete mode 100644 examples/models/core/gpt/.gitignore delete mode 100644 examples/models/core/gpt/README.md delete mode 100644 examples/models/core/gpt/convert_checkpoint.py delete mode 100644 examples/models/core/gpt/merge_ptuning_tables.py delete mode 100644 examples/models/core/gpt/nemo_lora_convert.py delete mode 100755 examples/models/core/gpt/nemo_prompt_convert.py delete mode 100644 examples/models/core/gpt/requirements.txt delete mode 100644 examples/models/core/gpt/run_hf.py delete mode 100644 examples/models/core/internlm2/.gitignore delete mode 100644 examples/models/core/internlm2/README.md delete mode 100644 examples/models/core/internlm2/convert_checkpoint.py delete mode 100644 examples/models/core/internlm2/requirements.txt delete mode 100644 examples/models/core/llama/.gitignore delete mode 100644 examples/models/core/llama/README.md delete mode 100644 examples/models/core/llama/convert_checkpoint.py delete mode 100644 examples/models/core/llama/requirements.txt delete mode 100644 examples/models/core/llama/summarize_long.py delete mode 100644 examples/models/core/mamba/README.md delete mode 100644 examples/models/core/mamba/convert_checkpoint.py delete mode 100644 examples/models/core/mamba/requirements.txt delete mode 100644 examples/models/core/mllama/README.md delete mode 100644 examples/models/core/mllama/convert_checkpoint.py delete mode 100644 examples/models/core/mllama/requirements.txt delete mode 100644 examples/models/core/nemotron_nas/README.md delete mode 100644 examples/models/core/nemotron_nas/calibration_utils.py delete mode 100644 examples/models/core/nemotron_nas/convert_checkpoint.py delete mode 100644 examples/models/core/phi/README.md delete mode 100644 examples/models/core/phi/convert_checkpoint.py delete mode 100644 examples/models/core/phi/phi4-mm.md delete mode 100644 examples/models/core/phi/requirements.txt delete mode 100644 examples/models/core/qwen/README.md delete mode 100644 examples/models/core/qwen/convert_checkpoint.py delete mode 100644 examples/models/core/qwen/requirements.txt delete mode 100644 examples/models/core/recurrentgemma/.gitignore delete mode 100644 examples/models/core/recurrentgemma/README.md delete mode 100644 examples/models/core/recurrentgemma/convert_checkpoint.py delete mode 100644 examples/models/core/recurrentgemma/requirements.txt delete mode 100644 examples/models/core/vit/README.md delete mode 100644 examples/models/core/vit/convert_checkpoint.py delete mode 100755 examples/models/core/whisper/README.md delete mode 100644 examples/models/core/whisper/convert_checkpoint.py delete mode 100644 examples/models/core/whisper/distil_whisper/convert_from_distil_whisper.py delete mode 100644 examples/models/core/whisper/requirements.txt delete mode 100755 examples/models/core/whisper/run.py delete mode 100644 examples/models/core/whisper/tokenizer.py delete mode 100644 examples/models/core/whisper/whisper_utils.py delete mode 100644 examples/redrafter/README.md delete mode 100644 examples/redrafter/convert_checkpoint.py delete mode 100644 examples/redrafter/requirements.txt delete mode 100644 tensorrt_llm/_common.py create mode 100644 tensorrt_llm/_init_runtime.py delete mode 100644 tensorrt_llm/_tensorrt_engine/__init__.py create mode 100644 tensorrt_llm/_torch/distributed/allreduce_helper.py delete mode 100644 tensorrt_llm/bench/build/__init__.py delete mode 100644 tensorrt_llm/bench/build/build.py delete mode 100755 tensorrt_llm/bench/build/dataclasses.py delete mode 100755 tensorrt_llm/bench/build/tuning.py delete mode 100644 tensorrt_llm/bench/build/utils.py delete mode 100644 tensorrt_llm/builder.py delete mode 100644 tensorrt_llm/commands/build.py delete mode 100644 tensorrt_llm/commands/prune.py delete mode 100644 tensorrt_llm/commands/refit.py delete mode 100755 tensorrt_llm/functional.py create mode 100644 tensorrt_llm/functional_enums.py delete mode 100644 tensorrt_llm/graph_rewriting.py delete mode 100755 tensorrt_llm/layers/__init__.py delete mode 100644 tensorrt_llm/layers/activation.py delete mode 100755 tensorrt_llm/layers/attention.py delete mode 100644 tensorrt_llm/layers/cast.py delete mode 100644 tensorrt_llm/layers/conv.py delete mode 100644 tensorrt_llm/layers/embedding.py delete mode 100755 tensorrt_llm/layers/language_adapter.py delete mode 100644 tensorrt_llm/layers/linear.py delete mode 100644 tensorrt_llm/layers/lora.py delete mode 100644 tensorrt_llm/layers/mlp.py delete mode 100755 tensorrt_llm/layers/moe.py delete mode 100644 tensorrt_llm/layers/normalization.py delete mode 100644 tensorrt_llm/layers/pooling.py delete mode 100644 tensorrt_llm/layers/recurrent.py delete mode 100644 tensorrt_llm/layers/ssm.py delete mode 100644 tensorrt_llm/models/baichuan/__init__.py delete mode 100644 tensorrt_llm/models/baichuan/config.py delete mode 100644 tensorrt_llm/models/baichuan/convert.py delete mode 100644 tensorrt_llm/models/baichuan/model.py delete mode 100644 tensorrt_llm/models/bert/__init__.py delete mode 100644 tensorrt_llm/models/bert/config.py delete mode 100644 tensorrt_llm/models/bert/convert.py delete mode 100644 tensorrt_llm/models/bert/model.py delete mode 100644 tensorrt_llm/models/bloom/__init__.py delete mode 100644 tensorrt_llm/models/bloom/model.py delete mode 100644 tensorrt_llm/models/chatglm/__init__.py delete mode 100644 tensorrt_llm/models/chatglm/config.py delete mode 100644 tensorrt_llm/models/chatglm/convert.py delete mode 100644 tensorrt_llm/models/chatglm/model.py delete mode 100644 tensorrt_llm/models/clip/__init__.py delete mode 100644 tensorrt_llm/models/clip/model.py delete mode 100644 tensorrt_llm/models/cogvlm/__init__.py delete mode 100644 tensorrt_llm/models/cogvlm/config.py delete mode 100644 tensorrt_llm/models/cogvlm/convert.py delete mode 100644 tensorrt_llm/models/cogvlm/model.py delete mode 100644 tensorrt_llm/models/commandr/__init__.py delete mode 100644 tensorrt_llm/models/commandr/config.py delete mode 100644 tensorrt_llm/models/commandr/model.py delete mode 100644 tensorrt_llm/models/dbrx/__init__.py delete mode 100644 tensorrt_llm/models/dbrx/config.py delete mode 100644 tensorrt_llm/models/dbrx/model.py delete mode 100644 tensorrt_llm/models/deepseek_v1/__init__.py delete mode 100755 tensorrt_llm/models/deepseek_v1/config.py delete mode 100755 tensorrt_llm/models/deepseek_v1/convert.py delete mode 100755 tensorrt_llm/models/deepseek_v1/model.py delete mode 100644 tensorrt_llm/models/deepseek_v2/__init__.py delete mode 100644 tensorrt_llm/models/deepseek_v2/config.py delete mode 100755 tensorrt_llm/models/deepseek_v2/convert.py delete mode 100755 tensorrt_llm/models/deepseek_v2/model.py delete mode 100644 tensorrt_llm/models/dit/__init__.py delete mode 100644 tensorrt_llm/models/dit/model.py delete mode 100644 tensorrt_llm/models/eagle/__init__.py delete mode 100644 tensorrt_llm/models/eagle/config.py delete mode 100644 tensorrt_llm/models/eagle/model.py delete mode 100644 tensorrt_llm/models/enc_dec/__init__.py delete mode 100644 tensorrt_llm/models/enc_dec/model.py delete mode 100644 tensorrt_llm/models/falcon/__init__.py delete mode 100644 tensorrt_llm/models/falcon/config.py delete mode 100644 tensorrt_llm/models/falcon/convert.py delete mode 100644 tensorrt_llm/models/falcon/model.py delete mode 100644 tensorrt_llm/models/gemma/__init__.py delete mode 100644 tensorrt_llm/models/gemma/config.py delete mode 100644 tensorrt_llm/models/gemma/convert.py delete mode 100644 tensorrt_llm/models/gemma/model.py delete mode 100644 tensorrt_llm/models/gemma/smoothquant.py delete mode 100644 tensorrt_llm/models/gemma/utils/__init__.py delete mode 100644 tensorrt_llm/models/gemma/utils/layers.py delete mode 100644 tensorrt_llm/models/gemma/utils/modules.py delete mode 100644 tensorrt_llm/models/gemma/utils/params.py delete mode 100644 tensorrt_llm/models/gemma/utils/positional_embeddings.py delete mode 100644 tensorrt_llm/models/gemma/utils/sampler.py delete mode 100644 tensorrt_llm/models/gemma/utils/transformer.py delete mode 100644 tensorrt_llm/models/gemma/weight.py delete mode 100644 tensorrt_llm/models/generation_mixin.py delete mode 100644 tensorrt_llm/models/gpt/__init__.py delete mode 100644 tensorrt_llm/models/gpt/config.py delete mode 100644 tensorrt_llm/models/gpt/convert.py delete mode 100644 tensorrt_llm/models/gpt/model.py delete mode 100644 tensorrt_llm/models/gptj/__init__.py delete mode 100644 tensorrt_llm/models/gptj/config.py delete mode 100644 tensorrt_llm/models/gptj/convert.py delete mode 100644 tensorrt_llm/models/gptj/model.py delete mode 100644 tensorrt_llm/models/gptneox/__init__.py delete mode 100644 tensorrt_llm/models/gptneox/model.py delete mode 100644 tensorrt_llm/models/grok/__init__.py delete mode 100644 tensorrt_llm/models/grok/convert.py delete mode 100644 tensorrt_llm/models/grok/model.py delete mode 100644 tensorrt_llm/models/grok/weight.py delete mode 100644 tensorrt_llm/models/llama/__init__.py delete mode 100644 tensorrt_llm/models/llama/config.py delete mode 100644 tensorrt_llm/models/llama/convert.py delete mode 100644 tensorrt_llm/models/llama/model.py delete mode 100644 tensorrt_llm/models/mamba/__init__.py delete mode 100644 tensorrt_llm/models/mamba/config.py delete mode 100644 tensorrt_llm/models/mamba/convert.py delete mode 100644 tensorrt_llm/models/mamba/model.py delete mode 100644 tensorrt_llm/models/medusa/__init__.py delete mode 100644 tensorrt_llm/models/medusa/config.py delete mode 100644 tensorrt_llm/models/medusa/model.py delete mode 100644 tensorrt_llm/models/medusa/weight.py delete mode 100644 tensorrt_llm/models/mllama/__init__.py delete mode 100644 tensorrt_llm/models/mllama/config.py delete mode 100644 tensorrt_llm/models/mllama/model.py delete mode 100644 tensorrt_llm/models/mmdit_sd3/__init__.py delete mode 100644 tensorrt_llm/models/mmdit_sd3/config.py delete mode 100644 tensorrt_llm/models/mmdit_sd3/model.py delete mode 100644 tensorrt_llm/models/model_weights_loader.py delete mode 100644 tensorrt_llm/models/mpt/__init__.py delete mode 100644 tensorrt_llm/models/mpt/model.py delete mode 100644 tensorrt_llm/models/multimodal_encoders/__init__.py delete mode 100644 tensorrt_llm/models/multimodal_encoders/config.py delete mode 100644 tensorrt_llm/models/multimodal_encoders/model.py delete mode 100644 tensorrt_llm/models/nemotron_nas/__init__.py delete mode 100644 tensorrt_llm/models/nemotron_nas/config.py delete mode 100644 tensorrt_llm/models/nemotron_nas/convert.py delete mode 100644 tensorrt_llm/models/nemotron_nas/layer_config.py delete mode 100644 tensorrt_llm/models/nemotron_nas/model.py delete mode 100644 tensorrt_llm/models/opt/__init__.py delete mode 100644 tensorrt_llm/models/opt/model.py delete mode 100644 tensorrt_llm/models/phi/__init__.py delete mode 100644 tensorrt_llm/models/phi/config.py delete mode 100644 tensorrt_llm/models/phi/convert.py delete mode 100644 tensorrt_llm/models/phi/model.py delete mode 100644 tensorrt_llm/models/phi3/__init__.py delete mode 100644 tensorrt_llm/models/phi3/config.py delete mode 100644 tensorrt_llm/models/phi3/convert.py delete mode 100644 tensorrt_llm/models/phi3/model.py delete mode 100644 tensorrt_llm/models/phi3/split_weights.py delete mode 100644 tensorrt_llm/models/qwen/__init__.py delete mode 100644 tensorrt_llm/models/qwen/config.py delete mode 100644 tensorrt_llm/models/qwen/convert.py delete mode 100644 tensorrt_llm/models/qwen/model.py delete mode 100644 tensorrt_llm/models/qwen/utils.py delete mode 100644 tensorrt_llm/models/recurrentgemma/__init__.py delete mode 100644 tensorrt_llm/models/recurrentgemma/model.py delete mode 100644 tensorrt_llm/models/redrafter/__init__.py delete mode 100644 tensorrt_llm/models/redrafter/drafter.py delete mode 100644 tensorrt_llm/models/redrafter/model.py delete mode 100644 tensorrt_llm/models/redrafter/redrafter_helper.py delete mode 100644 tensorrt_llm/models/stdit/__init__.py delete mode 100644 tensorrt_llm/models/stdit/config.py delete mode 100644 tensorrt_llm/models/stdit/model.py delete mode 100644 tensorrt_llm/models/unet/__init__.py delete mode 100644 tensorrt_llm/models/unet/attention.py delete mode 100644 tensorrt_llm/models/unet/embeddings.py delete mode 100755 tensorrt_llm/models/unet/pp/__init__.py delete mode 100755 tensorrt_llm/models/unet/pp/attention.py delete mode 100755 tensorrt_llm/models/unet/pp/conv2d.py delete mode 100755 tensorrt_llm/models/unet/pp/groupnorm.py delete mode 100755 tensorrt_llm/models/unet/pp/unet_pp.py delete mode 100644 tensorrt_llm/models/unet/resnet.py delete mode 100644 tensorrt_llm/models/unet/unet_2d_blocks.py delete mode 100644 tensorrt_llm/models/unet/unet_2d_condition.py delete mode 100644 tensorrt_llm/models/unet/weights.py delete mode 100644 tensorrt_llm/module.py delete mode 100644 tensorrt_llm/network.py delete mode 100644 tensorrt_llm/parameter.py delete mode 100644 tensorrt_llm/plugin/__init__.py delete mode 100644 tensorrt_llm/plugin/plugin.py delete mode 100644 tensorrt_llm/python_plugin.py delete mode 100644 tensorrt_llm/quantization/functional.py delete mode 100644 tensorrt_llm/quantization/layers.py create mode 100644 tensorrt_llm/quantization/preprocessing.py create mode 100644 tensorrt_llm/quantization/quant_config.py delete mode 100644 tensorrt_llm/quantization/quantize.py delete mode 100644 tensorrt_llm/runtime/enc_dec_model_runner.py delete mode 100755 tensorrt_llm/runtime/generation.py delete mode 100644 tensorrt_llm/runtime/kv_cache_manager.py delete mode 100644 tensorrt_llm/runtime/medusa_utils.py delete mode 100644 tensorrt_llm/runtime/memory_pools/__init__.py delete mode 100644 tensorrt_llm/runtime/memory_pools/memory_pools_allocator.py delete mode 100644 tensorrt_llm/runtime/memory_pools/pool.py delete mode 100644 tensorrt_llm/runtime/memory_pools/pools_kv_cache_manager.py create mode 100644 tensorrt_llm/runtime/model_config.py delete mode 100644 tensorrt_llm/runtime/model_runner.py delete mode 100644 tensorrt_llm/runtime/model_runner_cpp.py delete mode 100644 tensorrt_llm/runtime/multimodal_model_runner.py delete mode 100644 tensorrt_llm/runtime/processor_wrapper/__init__.py delete mode 100644 tensorrt_llm/runtime/processor_wrapper/mllama_processor_wrapper.py delete mode 100644 tensorrt_llm/runtime/processor_wrapper/processor_wrapper.py delete mode 100644 tensorrt_llm/runtime/redrafter_utils.py delete mode 100644 tensorrt_llm/runtime/session.py delete mode 100644 tensorrt_llm/tools/multimodal_builder.py delete mode 100644 tensorrt_llm/tools/onnx_utils.py delete mode 100644 tensorrt_llm/tools/plugin_gen/__init__.py delete mode 100644 tensorrt_llm/tools/plugin_gen/core.py delete mode 100644 tensorrt_llm/tools/plugin_gen/plugin_gen.py delete mode 100644 tensorrt_llm/tools/plugin_gen/shape_infer.py delete mode 100644 tensorrt_llm/tools/plugin_gen/templates/CMakeLists.txt.tpl delete mode 100644 tensorrt_llm/tools/plugin_gen/templates/functional.py.tpl delete mode 100644 tensorrt_llm/tools/plugin_gen/templates/plugin.cpp.tpl delete mode 100644 tensorrt_llm/tools/plugin_gen/templates/plugin.h.tpl delete mode 100644 tensorrt_llm/tools/plugin_gen/templates/plugin_common.cpp delete mode 100644 tensorrt_llm/tools/plugin_gen/templates/plugin_common.h delete mode 100644 tensorrt_llm/tools/plugin_gen/templates/tritonPlugins.cpp.tpl delete mode 100644 tensorrt_llm/top_model_mixin.py delete mode 100755 tests/integration/defs/triton_server/build_engines.py delete mode 100644 tests/integration/defs/triton_server/test_triton_llm.py create mode 100644 tests/integration/defs/triton_server/test_triton_llmapi.py delete mode 100644 tests/integration/defs/triton_server/test_triton_memleak.py delete mode 100644 tests/integration/defs/triton_server/test_triton_multi_node.py delete mode 100644 tests/integration/defs/triton_server/test_triton_rcca.py delete mode 100644 tests/unittest/others/test_builder.py delete mode 100644 tests/unittest/others/test_graph_rewriter.py delete mode 100644 tests/unittest/others/test_layer.py delete mode 100644 tests/unittest/others/test_precision_control.py delete mode 100644 tests/unittest/others/test_session.py delete mode 100644 tests/unittest/test_model_runner_cpp.py delete mode 100644 tests/unittest/trt/__init__.py delete mode 100644 tests/unittest/trt/attention/hf_dynamic_cache_compat.py delete mode 100644 tests/unittest/trt/attention/test_bert_attention.py delete mode 100644 tests/unittest/trt/attention/test_gpt_attention.py delete mode 100644 tests/unittest/trt/attention/test_gpt_attention_IFB.py delete mode 100644 tests/unittest/trt/attention/test_gpt_attention_no_cache.py delete mode 100644 tests/unittest/trt/attention/test_sage_attention.py delete mode 100644 tests/unittest/trt/functional/__init__.py delete mode 100644 tests/unittest/trt/functional/test_alibi.py delete mode 100644 tests/unittest/trt/functional/test_allreduce_norm.py delete mode 100644 tests/unittest/trt/functional/test_allreduce_prepost_residual_norm.py delete mode 100644 tests/unittest/trt/functional/test_arange.py delete mode 100644 tests/unittest/trt/functional/test_argmax.py delete mode 100644 tests/unittest/trt/functional/test_assertion.py delete mode 100644 tests/unittest/trt/functional/test_avg_pool2d.py delete mode 100644 tests/unittest/trt/functional/test_cast.py delete mode 100644 tests/unittest/trt/functional/test_conv2d.py delete mode 100644 tests/unittest/trt/functional/test_conv3d.py delete mode 100644 tests/unittest/trt/functional/test_cos.py delete mode 100644 tests/unittest/trt/functional/test_cumsum.py delete mode 100644 tests/unittest/trt/functional/test_dora.py delete mode 100644 tests/unittest/trt/functional/test_einsum.py delete mode 100644 tests/unittest/trt/functional/test_embedding_single_gpu.py delete mode 100644 tests/unittest/trt/functional/test_exp.py delete mode 100644 tests/unittest/trt/functional/test_expand.py delete mode 100644 tests/unittest/trt/functional/test_flatten.py delete mode 100644 tests/unittest/trt/functional/test_flip.py delete mode 100644 tests/unittest/trt/functional/test_fp4_gemm.py delete mode 100644 tests/unittest/trt/functional/test_fp4_gemm_ootb.py delete mode 100644 tests/unittest/trt/functional/test_gather.py delete mode 100644 tests/unittest/trt/functional/test_gather_nd.py delete mode 100644 tests/unittest/trt/functional/test_geglu.py delete mode 100644 tests/unittest/trt/functional/test_gelu.py delete mode 100644 tests/unittest/trt/functional/test_gemm_swiglu.py delete mode 100644 tests/unittest/trt/functional/test_group_norm.py delete mode 100644 tests/unittest/trt/functional/test_identity.py delete mode 100644 tests/unittest/trt/functional/test_index_select.py delete mode 100644 tests/unittest/trt/functional/test_interpolate.py delete mode 100644 tests/unittest/trt/functional/test_logsoftmax.py delete mode 100644 tests/unittest/trt/functional/test_lora.py delete mode 100644 tests/unittest/trt/functional/test_low_latency_gemm.py delete mode 100644 tests/unittest/trt/functional/test_mamba_conv1d.py delete mode 100644 tests/unittest/trt/functional/test_masked_scatter.py delete mode 100644 tests/unittest/trt/functional/test_masked_select.py delete mode 100644 tests/unittest/trt/functional/test_matmul.py delete mode 100644 tests/unittest/trt/functional/test_meshgrid2d.py delete mode 100644 tests/unittest/trt/functional/test_moe.py delete mode 100644 tests/unittest/trt/functional/test_nccl.py delete mode 100644 tests/unittest/trt/functional/test_nonzero.py delete mode 100644 tests/unittest/trt/functional/test_outer.py delete mode 100644 tests/unittest/trt/functional/test_pad.py delete mode 100644 tests/unittest/trt/functional/test_permute.py delete mode 100644 tests/unittest/trt/functional/test_pp_reduce_scatter.py delete mode 100644 tests/unittest/trt/functional/test_quant.py delete mode 100644 tests/unittest/trt/functional/test_rearrange.py delete mode 100644 tests/unittest/trt/functional/test_repeat.py delete mode 100644 tests/unittest/trt/functional/test_repeat_interleave.py delete mode 100644 tests/unittest/trt/functional/test_rg_lru.py delete mode 100644 tests/unittest/trt/functional/test_sample.py delete mode 100644 tests/unittest/trt/functional/test_scatter.py delete mode 100644 tests/unittest/trt/functional/test_scatter_nd.py delete mode 100644 tests/unittest/trt/functional/test_select.py delete mode 100644 tests/unittest/trt/functional/test_selective_scan.py delete mode 100644 tests/unittest/trt/functional/test_sigmoid.py delete mode 100644 tests/unittest/trt/functional/test_silu.py delete mode 100644 tests/unittest/trt/functional/test_sin.py delete mode 100644 tests/unittest/trt/functional/test_slice.py delete mode 100644 tests/unittest/trt/functional/test_softplus.py delete mode 100644 tests/unittest/trt/functional/test_split.py delete mode 100644 tests/unittest/trt/functional/test_squeeze.py delete mode 100644 tests/unittest/trt/functional/test_swiglu.py delete mode 100644 tests/unittest/trt/functional/test_topk.py delete mode 100644 tests/unittest/trt/functional/test_transpose.py delete mode 100644 tests/unittest/trt/functional/test_unbind.py delete mode 100644 tests/unittest/trt/functional/test_unsqueeze.py delete mode 100644 tests/unittest/trt/functional/test_view.py delete mode 100644 tests/unittest/trt/functional/test_where.py delete mode 100644 tests/unittest/trt/model/__init__.py delete mode 100644 tests/unittest/trt/model/eagle/test_decode_draft_tokens_plugin.py delete mode 100644 tests/unittest/trt/model/eagle/test_prepare_drafter_inputs_plugin.py delete mode 100644 tests/unittest/trt/model/eagle/test_sample_accept_draft_tokens_plugin.py delete mode 100644 tests/unittest/trt/model/redrafter/test_beams2tree.py delete mode 100644 tests/unittest/trt/model/redrafter/test_draft_token.py delete mode 100644 tests/unittest/trt/model/redrafter/test_draft_token_indices.py delete mode 100644 tests/unittest/trt/model/redrafter/test_gather_beams.py delete mode 100644 tests/unittest/trt/model/redrafter/test_mask.py delete mode 100644 tests/unittest/trt/model/redrafter/test_packed_position_ids.py delete mode 100644 tests/unittest/trt/model/redrafter/test_prefix_match_indices.py delete mode 100644 tests/unittest/trt/model/redrafter/test_prepare_input.py delete mode 100644 tests/unittest/trt/model/redrafter/test_process_logits.py delete mode 100644 tests/unittest/trt/model/redrafter/test_top1.py delete mode 100644 tests/unittest/trt/model/redrafter/test_unpack_gen_data.py delete mode 100644 tests/unittest/trt/model/redrafter/test_validate.py delete mode 100644 tests/unittest/trt/model/test_gpt.py delete mode 100644 tests/unittest/trt/model/test_gpt_e2e.py delete mode 100644 tests/unittest/trt/model/test_llama.py delete mode 100644 tests/unittest/trt/model/test_mamba.py delete mode 100644 tests/unittest/trt/model/test_mistral.py delete mode 100644 tests/unittest/trt/model/test_nemotron_nas.py delete mode 100644 tests/unittest/trt/model/test_phi.py delete mode 100644 tests/unittest/trt/model/test_unet.py delete mode 100644 tests/unittest/trt/model_api/profile_utils.py delete mode 100644 tests/unittest/trt/model_api/test_model_api_multi_gpu.py delete mode 100644 tests/unittest/trt/python_plugin/plugin_wrapper_utils.py delete mode 100644 tests/unittest/trt/python_plugin/test_plugin_wrapper.py delete mode 100644 tests/unittest/trt/quantization/__init__.py delete mode 100644 tests/unittest/trt/quantization/_utils.py delete mode 100644 tests/unittest/trt/quantization/test_fp8_quantization.py delete mode 100644 tests/unittest/trt/quantization/test_fp8_rowwise_gemm.py delete mode 100644 tests/unittest/trt/quantization/test_functional.py delete mode 100644 tests/unittest/trt/quantization/test_mode.py delete mode 100644 tests/unittest/trt/quantization/test_moe_weight_only_quant_matmul.py delete mode 100644 tests/unittest/trt/quantization/test_qserve_gemm.py delete mode 100644 tests/unittest/trt/quantization/test_quant.py delete mode 100644 tests/unittest/trt/quantization/test_quant_layer.py delete mode 100644 tests/unittest/trt/quantization/test_smooth_quant_gemm.py delete mode 100644 tests/unittest/trt/quantization/test_smooth_quant_layer_norm.py delete mode 100644 tests/unittest/trt/quantization/test_smooth_quant_rms_norm.py delete mode 100644 tests/unittest/trt/quantization/test_weight_only_groupwise_quant_matmul.py delete mode 100644 tests/unittest/trt/quantization/test_weight_only_quant_matmul.py delete mode 100644 triton_backend/all_models/gpt/tensorrt_llm/1/model.py delete mode 100644 triton_backend/all_models/gpt/tensorrt_llm/config.pbtxt delete mode 100755 triton_backend/all_models/inflight_batcher_llm/tensorrt_llm/1/model.py delete mode 100644 triton_backend/all_models/inflight_batcher_llm/tensorrt_llm/config.pbtxt delete mode 100755 triton_backend/all_models/multimodal/multimodal_encoders/1/model.py delete mode 100644 triton_backend/ci/L0_backend_trtllm/base_metrics_verification_tests.py delete mode 100644 triton_backend/ci/L0_backend_trtllm/custom_metrics_verification_tests.py delete mode 100644 triton_backend/ci/L0_backend_trtllm/generate_engines.sh delete mode 100644 triton_backend/ci/L0_backend_trtllm/simple_data.json delete mode 100644 triton_backend/ci/L0_backend_trtllm/test.sh delete mode 100644 triton_backend/ci/README.md delete mode 100644 triton_backend/inflight_batcher_llm/CMakeLists.txt delete mode 100644 triton_backend/inflight_batcher_llm/client/README.md delete mode 100644 triton_backend/inflight_batcher_llm/client/__init__.py delete mode 100644 triton_backend/inflight_batcher_llm/client/e2e_grpc_speculative_decoding_client.py delete mode 100644 triton_backend/inflight_batcher_llm/client/end_to_end_grpc_client.py delete mode 100755 triton_backend/inflight_batcher_llm/client/inflight_batcher_llm_client.py delete mode 100644 triton_backend/inflight_batcher_llm/cmake/TritonTensorRTLLMBackendConfig.cmake.in delete mode 100644 triton_backend/inflight_batcher_llm/cmake/modules/set_ifndef.cmake delete mode 100644 triton_backend/inflight_batcher_llm/scripts/build.sh delete mode 100644 triton_backend/inflight_batcher_llm/src/custom_metrics_reporter/custom_metrics_reporter.cc delete mode 100644 triton_backend/inflight_batcher_llm/src/custom_metrics_reporter/custom_metrics_reporter.h delete mode 100644 triton_backend/inflight_batcher_llm/src/libtensorrtllm.cc delete mode 100644 triton_backend/inflight_batcher_llm/src/libtriton_tensorrtllm.ldscript delete mode 100644 triton_backend/inflight_batcher_llm/src/model_instance_state.cc delete mode 100644 triton_backend/inflight_batcher_llm/src/model_instance_state.h delete mode 100644 triton_backend/inflight_batcher_llm/src/model_state.cc delete mode 100644 triton_backend/inflight_batcher_llm/src/model_state.h delete mode 100644 triton_backend/inflight_batcher_llm/src/namedTensor.cpp delete mode 100644 triton_backend/inflight_batcher_llm/src/namedTensor.h delete mode 100644 triton_backend/inflight_batcher_llm/src/utils.cc delete mode 100644 triton_backend/inflight_batcher_llm/src/utils.h delete mode 100644 triton_backend/inflight_batcher_llm/tests/CMakeLists.txt delete mode 100644 triton_backend/inflight_batcher_llm/tests/first.json delete mode 100644 triton_backend/inflight_batcher_llm/tests/modelInstanceStateTest.cpp delete mode 100644 triton_backend/inflight_batcher_llm/tests/modelState.cpp delete mode 100644 triton_backend/inflight_batcher_llm/tests/second.json delete mode 100644 triton_backend/inflight_batcher_llm/tests/third.json delete mode 100644 triton_backend/inflight_batcher_llm/tests/utilsTest.cpp diff --git a/docs/source/blogs/Best_perf_practice_on_DeepSeek-R1_in_TensorRT-LLM.md b/docs/source/blogs/Best_perf_practice_on_DeepSeek-R1_in_TensorRT-LLM.md index 22d4688c503d..18c5ce06c0f2 100644 --- a/docs/source/blogs/Best_perf_practice_on_DeepSeek-R1_in_TensorRT-LLM.md +++ b/docs/source/blogs/Best_perf_practice_on_DeepSeek-R1_in_TensorRT-LLM.md @@ -414,13 +414,13 @@ Note that, `max_batch_size` and `max_num_tokens` can easily affect the performan Generally, you should make sure that `max_batch_size` is not too low to bottleneck the throughput, and `max_num_tokens` needs to be large enough so that it covers the max input sequence length of the samples in dataset, as mentioned in below section "WIP: Chunked context support on DeepSeek models". -For more details on `max_batch_size` and `max_num_tokens`, refer to [Tuning Max Batch Size and Max Num Tokens](../legacy/performance/performance-tuning-guide/tuning-max-batch-size-and-max-num-tokens.md). +For more details on `max_batch_size` and `max_num_tokens`, refer to the performance tuning guidance in the developer documentation. ### MLA chunked context MLA currently supports the chunked context feature on both Hopper and Blackwell GPUs. You can use `--enable_chunked_context` to enable it. This feature is primarily designed to reduce TPOT (Time Per Output Token). The default chunk size is set to `max_num_tokens`. If you want to achieve a lower TPOT, you can appropriately reduce the chunk size. However, please note that this will also decrease overall throughput. Therefore, a trade-off needs to be considered. -For more details on `max_num_tokens`, refer to [Tuning Max Batch Size and Max Num Tokens](../legacy/performance/performance-tuning-guide/tuning-max-batch-size-and-max-num-tokens.md). +For more details on `max_num_tokens`, refer to the performance tuning guidance in the developer documentation. ### Out of memory issues diff --git a/docs/source/blogs/XQA-kernel.md b/docs/source/blogs/XQA-kernel.md index d4018966cd2d..456024a10ed5 100644 --- a/docs/source/blogs/XQA-kernel.md +++ b/docs/source/blogs/XQA-kernel.md @@ -2,7 +2,7 @@ XQA kernel provides optimization for [MQA](https://arxiv.org/abs/1911.02150) and [GQA](https://arxiv.org/abs/2305.13245v3) during generation phase. It also provides optimization for beam search. Using tensor cores for acceleration, reducing data loading and conversion, it delivers increased throughput within the same latency budget. Increased throughput allows serving greater number of user requests while providing the same experience. -Support matrix and usage flags are described in [docs/source/legacy/advanced/gpt-attention](../legacy/advanced/gpt-attention.md#xqa-optimization). +Support matrix and usage flags are described in the [Attention](../features/attention.md) documentation. **Increased Throughput:** Looking at the Throughput-Latency curves below, we see that the enabling of XQA optimization increases throughput. Higher throughput equates to serving more users, and we can see that TPOT on the Y-axis flattens out when XQA gets enabled. diff --git a/docs/source/commands/trtllm-build.rst b/docs/source/commands/trtllm-build.rst deleted file mode 100644 index d209d3eac9ca..000000000000 --- a/docs/source/commands/trtllm-build.rst +++ /dev/null @@ -1,7 +0,0 @@ -trtllm-build -=========================== - -.. argparse:: - :module: tensorrt_llm.commands.build - :func: parse_arguments - :prog: trtllm-build diff --git a/docs/source/index.rst b/docs/source/index.rst index 9d92a8770148..07fde255c0c9 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -127,10 +127,9 @@ Welcome to TensorRT LLM's Documentation! .. toctree:: :maxdepth: 2 - :caption: Use TensorRT Engine - :hidden: + :caption: Migration - legacy/tensorrt_quickstart.md + legacy/tensorrt-backend-removal.md Indices and tables ================== diff --git a/docs/source/legacy/advanced/disaggregated-service.md b/docs/source/legacy/advanced/disaggregated-service.md deleted file mode 100644 index ac6cbad472e9..000000000000 --- a/docs/source/legacy/advanced/disaggregated-service.md +++ /dev/null @@ -1,86 +0,0 @@ -(disaggregated-service)= - -# Disaggregated-Service (Prototype) - -```{note} -Note: -This feature is currently in prototype, and the related API is subject to change in future versions. -``` -Currently TRT-LLM supports `disaggregated-service`, where the context and generation phases of a request can run on different executors. TRT-LLM's disaggregated service relies on the executor API, please make sure to read the [executor page](executor.md) before reading the document. - -For more information on disaggregated service in LLM inference, one can refer to papers such as [DistServe](https://arxiv.org/abs/2401.09670), [SplitWise](https://arxiv.org/abs/2311.18677). - -An [architectural and performance overview](../../../docs/source/blogs/tech_blog/blog05_Disaggregated_Serving_in_TensorRT-LLM.md), as well as [usage examples](../../../examples/disaggregated/README.md), are provided. - -## Environment Variables - -TRT-LLM uses some environment variables to control the behavior of disaggregated service. - - -* `TRTLLM_DISABLE_KV_CACHE_TRANSFER_OVERLAP`: If set to `1`, generationExecutor will not overlap KV cache transfer with model inference. The default value is `0`. - -* `TRTLLM_ENABLE_KVCACHE_RECEIVE_PARALLEL`: When the generation rank receives KV cache from multiple context ranks within a single context instance, it will receive KV cache from each rank sequentially. If set to `1`, the generation rank will receive KV cache from each rank within one context instance in parallel. The default value is `0`. - -* `TRTLLM_REQUEST_KV_CACHE_CONCURRENT`: If set to `1`, generationExecutor prepares independent resources for each context executor to receive KV cache, requests whose KV cache are received from different context executors will be processed concurrently. If set to `0`, the generation executor will reuse the same resource to process KV cache transfer for each request sequentially, reducing the resources used by KV cache transmission and thereby lowering the risk of running out of memory. The default value is `0`. - -* `TRTLLM_TRY_ZCOPY_FOR_KVCACHE_TRANSFER`: TRT-LLM typically copies non-contiguous data into a temporary buffer before sending KV cache. If set to `1`, TRT-LLM will attempt to directly transmit each KV cache block, eliminating extra copies. The default value is `0`. - -* `TRTLLM_KVCACHE_TRANSFER_BUFFER_SIZE`: By default, TRT-LLM uses a `stream-ordered memory allocator` to allocate temporary buffers. If this environment variable is set to #Size, TRT-LLM will use `cudaMalloc` to allocate buffer of size #Size for KV cache transmission. The default value is `512MB`. Users can set `TRTLLM_KVCACHE_TRANSFER_BUFFER_SIZE=1GB` to allocate a 1 GB buffer with `cudaMalloc` for KV cache transmission. - -* `TRTLLM_KVCACHE_TRANSFER_USE_ASYNC_BUFFER`: If set to `1`, TRT-LLM will use `cudaMallocAsync` to allocate buffers for KV cache transmission. The default value is `0`. This environment variable only takes effect when `TRTLLM_KVCACHE_TRANSFER_BUFFER_SIZE` is greater than 0. - -* `TRTLLM_KVCACHE_SEND_MAX_CONCURRENCY_NUM`: The maximum number of concurrent KV cache sends. The default value is `1`. This environment variable only takes effect when `TRTLLM_KVCACHE_TRANSFER_BUFFER_SIZE` is greater than 0. - -There are some other useful environment variables that may help when encountering failures or performance issues. - -* `NCCL_GRAPH_MIXING_SUPPORT`: With the default value `1`, the CUDA driver may create too many CUDA streams while working with one CUDA graph, leading to performance drop. Setting it to `0` will reduce the number of CUDA streams, but please make sure there are no other NCCL ops outside the one CUDA graph, otherwise it's unsafe. - -* `UCX_MAX_RNDV_RAILS`: With the default value `2`, UCX attempts to use two InfiniBand (IB) NIC devices per GPU for Rendezvous (RNDV) transfers. When both the context and generation instances enable tensor- and expert-parallel (TEP), multiple TP ranks may transfer KV cache concurrently. Because each TP rank can use up to two NIC devices, some NIC devices can be shared across GPUs, causing contention and reduced throughput. Setting `UCX_MAX_RNDV_RAILS=1` can reduce contention in this case. - -## Troubleshooting and FAQ - -### General FAQs - -*Q. What are the limitations of disaggregated-service in TRT-LLM?* - -A. Currently, only `decoder-only engine` and `beamWidth=1` are supported, and the KV cache at each layer of the model is required to be homogeneous, with the same data type and the same number of attention heads. - -*Q. Is the engine used by disaggregated-service different from other engines?* - -A. No. There are no special requirements for the arguments to build engine. - -*Q. Do the engines used by the context executor and generation executor need to be the same?* - -A. No. The engines used by context executor and generation executor can be different, and their parallelism can be heterogeneous, i.e., TP,PP can be different, and TRT-LLM will handle the heterogeneity of KV cache. - -*Q. Does TRT-LLM support running multiple context executor instances and generation executor instances?* - -A. Yes. TRT-LLM supports running multiple context executors and generation executors at the same time, and each executor can use different engine, but it is the user's responsibility to route requests to different executors and manage `requestId`. - -*Q. Can an executor handle both context-only requests and generation-only requests?* - -A. Yes, but it's not recommended, TRT-LLM does not implement proper scheduling for the case where the executor handles mixed context-only requests and generation-only requests, it's better to run context-only requests and generation-only requests on different executors. - -*Q. Does disaggregated-service in TRT-LLM support multi-gpu and multi-node?* - -A. Yes, it's recommended that different executor use different GPUs. We support context-only executor and generation-only executor run on same node or different nodes. The `participantIds` and `deviceIds` used by each executor need to be explicitly set by the user, and the `participantIds` of each executor must not be intersecting. - -### Debugging FAQs - -*Q. Does TRT-LLM support using GPU direct RDMA for inter-node KV Cache transfer?* - -A. Yes, TRT-LLM supports using GPU direct RDMA for inter-node KV cache transfer. - -*Q. What causes the substantial bandwidth fluctuations in kvCache transfers, especially during the first few requests following service initialization?* - -A. The communication for kvCache transfer between executors are established dynamically. The connection establishment process incurs significant overhead, which explains the apparently lower kvCache transfer bandwidth observed during the initial requests after service startup. This lower bandwidth reflects the inclusion of connection establishment overhead. When conducting benchmarks, it is recommended to perform a warm-up phase to ensure accurate performance measurements. - -*Q. When my servers are running on different NVLink domains, some servers hang or have a lower performance. How to fix that?* - -A. NVLink domain can be found with `nvidia-smi -q` in the `Fabric.ClusterUUID` field. A few UCX environment variables can be adjusted when your servers have different NVLink domains: - -* `UCX_CUDA_IPC_ENABLE_MNNVL`: Set to `n`. This also can reduce UCX timeout error messages like `UCX ERROR cuMemImportFromShareableHandle failed: invalid resource handle`, although these errors don't necessarily cause your trtllm-serve to fail. - -* `UCX_NET_DEVICES`: Check if this is set correctly, or unset this variable to allow UCX to use all possible devices. - -* `UCX_RNDV_SCHEME`: Set to `get_zcopy` or `put_zcopy` on GB200 for better performance. The default value is `auto`. diff --git a/docs/source/legacy/advanced/executor.md b/docs/source/legacy/advanced/executor.md deleted file mode 100644 index 1f59d0802a16..000000000000 --- a/docs/source/legacy/advanced/executor.md +++ /dev/null @@ -1,153 +0,0 @@ -(executor)= - -# Executor API - -TensorRT-LLM includes a high-level C++ API called the Executor API which allows you to execute requests -asynchronously, with in-flight batching, and without the need to define callbacks. - -A software component (referred to as "the client" in the text that follows) can interact -with the executor using the API defined in the [`executor.h`](source:cpp/include/tensorrt_llm/executor/executor.h) file. -For details about the API, refer to the {ref}`_cpp_gen/executor.rst`. - -The following sections provide an overview of the main classes defined in the Executor API. - -## API - -### The Executor Class - -The `Executor` class is responsible for receiving requests from the client, and providing responses for those requests. The executor is constructed by providing a path to a directory containing the TensorRT-LLM engine or buffers containing the engine and the model JSON configuration. The client can create requests and enqueue those requests for execution using the `enqueueRequest` or `enqueueRequests` methods of the `Executor` class. Enqueued requests will be scheduled for execution by the executor, and multiple independent requests can be batched together at every iteration of the main execution loop (a process often referred to as continuous batching or iteration-level batching). Responses for a particular request can be awaited for by calling the `awaitResponses` method, and by providing the request id. Alternatively, responses for any requests can be awaited for by omitting to provide the request id when calling `awaitResponses`. The `Executor` class also allows to cancel requests using the `cancelRequest` method and to obtain per-iteration and per-request statistics using the `getLatestIterationStats`. - -### The Request Class - -The `Request` class is used to define properties of the request, such as the input token ids and the maximum number of tokens to generate. The `streaming` parameter can be used to indicate if the request should generate a response for each new generated tokens (`streaming = true`) or only after all tokens have been generated (`streaming = false`). Other mandatory parameters of the request include the sampling configuration (defined by the `SamplingConfig` class) which contains parameters controlling the decoding process and the output configuration (defined by the `OutputConfig` class) which controls what information should be included in the `Result` for a particular response. - -Optional parameters can also be provided when constructing a request such as a list of bad words, a list of stop words, a client id, or configurations objects for prompt tuning, LoRA, or speculative decoding, or a number of sequences to generate for example. - -### The Response Class - -The `awaitResponses` method of the `Executor` class returns a vector of responses. Each response contains the request id associated with this response, and also contains either an error or a `Result`. Check if the response has an error by using the `hasError` method before trying to obtain the `Result` associated with this response using the `getResult` method. - -### The Result Class - -The `Result` class holds the result for a given request. It contains a Boolean parameter called `isFinal` that indicates if this is the last `Result` that will be returned for the given request id. It also contains the generated tokens. If the request is configured with `streaming = false` and `numReturnSequences = 1`, a single response will be returned, the `isFinal` Boolean will be set to `true` and all generated tokens will be included in the `outputTokenIds`. If `streaming = true` and `numReturnSequences = 1` is used, a `Result` will include one or more tokens (depending on the request `returnAllGeneratedTokens` parameter) except the last result and the `isFinal` flag will be set to `true` for the last result associated with this request. - -The request `numReturnSequences` parameter controls the number of output sequences to generate for each prompt. When this option is used, the Executor will return at least `numReturnSequences` responses for each request, each containing one Result. In beam search (`beamWidth > 1`), the number of beams to be returned will be limited by `numReturnSequences` and the `sequenceIndex` attribute of the `Result` class will always be zero. Otherwise, in sampling (`beamWidth = 1`), the `sequenceIndex` attribute indicates the index of the generated sequence in the result (`0 <= sequenceIndex < numReturnSequences`). It contains a Boolean parameter called `isSequenceFinal` that indicates if this is the last result for the sequence and also contains a Boolean parameter `isFinal` that indicates when all sequences for the request have been generated. When `numReturnSequences = 1`, `isFinal` is identical to `isSequenceFinal`. - -Here is an example that shows how a subset of 3 responses might look like for `numReturnSequences = 3`: - -``` -Response 1: requestId = 1, Result with sequenceIndex = 0, isSequenceFinal = false, isFinal = false -Response 2: requestId = 1, Result with sequenceIndex = 1, isSequenceFinal = true, isFinal = false -Response 3: requestId = 1, Result with sequenceIndex = 2, isSequenceFinal = false, isFinal = false -``` - -In this example, each response contains one result for different sequences. The `isSequenceFinal` flag of the second Result is set to true, indicating that it is the last result for `sequenceIndex = 1`, however, the isFinal flag of each Response is set to false because sequences 0 and 2 are not completed. - -### Sending Requests with Different Beam Widths - -The executor can process requests with different beam widths if the following conditions are met: - -- The model was built with a `max_beam_width > 1`. -- The executor is configured with a `maxBeamWidth > 1` (the configured `maxBeamWidth` must be less than or equal to the model's `max_beam_width`). -- The requested beam widths are less than or equal to the configured `maxBeamWidth`. - -The executor may schedule successive requests with the same beam width at the same time. For successive requests with two different beam widths, `x` and `y`, requests with beam width `y` are not scheduled until all requests with beam width `x` have been processed. -This allows the runtime to reconfigure itself for a new beam width when no requests are in flight. The reconfiguration happens automatically each time requests with a different beam width than currently configured are detected. Waiting for previous requests to finish and reconfiguring the runtime may cause significant overhead and reduce overall throughput. - -### Controlling output with Logits Post-Processor - -Optionally, you can alter the logits produced by the network by providing an instance of `Executor::LogitsPostProcessorConfig`. For instance, this feature can be used to generate JSON formatted output. {cpp:class}`Executor::LogitsPostProcessorConfig ` specifies a map of named callbacks in the following form - -```cpp -std::unordered_map)>> -``` - -The map key is the name associated with that logits post-processing callback. Each request can then specify the name of the logits post-processor to use for that particular request, if any. - -The first argument to the callback is the request id, second is the logits tensor, third are the tokens produced by the request so far, fourth is the operation stream used by the logits tensor, and last one is an optional client id. The callback returns a modified tensor of logits. Multiple requests can share same client id and callback can use different logic based on client id. - -You must use the stream to access the logits tensor. For example, to perform an addition with a bias tensor, the addition operation is enqueued on that stream. Alternatively, you can call `stream->synchronize()`, however, that will slow down the entire execution pipeline. - -The executor also includes a {cpp:class}`LogitsPostProcessorBatched ` method that enables altering logits of multiple requests in a batch. The batched method allows further optimizations and reduces callback overheads. - -```cpp -std::function const&, std::vector&, std::vector> const&, StreamPtr const&, std::vector> const&)> -``` - -A single batched callback can be specified in `LogitsPostProcessorConfig`. Each request can opt to apply this callback by specifying the name of the logits post-processor as `Request::kBatchedPostProcessorName`. - -Note: Neither callback variant is supported with the `STATIC` batching type for the moment. - -In a multi-GPU run, the callback is invoked on all ranks in the first tensor-parallel group, by default. To ensure correct execution, replicate the client-side state that is accessed by the callback on these ranks. If replication is expensive or infeasible, use `LogitsPostProcessorConfig::setReplicate(false)` to invoke the callback only on rank 0. The executor broadcasts the sampled tokens internally to ensure correct execution. - -### Structured output with guided decoding -Guided decoding controls the generation outputs to be amenable to pre-defined structured formats, e.g., JSON or XML. Currently, guided decoding is supported with the [XGrammar](https://github.com/mlc-ai/xgrammar) backend. - -To enable guided decoding, a valid instance of `GuidedDecodingConfig` must be provided when constructing `Executor`. `GuidedDecodingConfig` should be constructed with some tokenizer information, including `encodedVocab`, `tokenizerStr` (optional) and `stopTokenIds` (optional). Given a Hugging Face tokenizer, these can be extracted by: - -```python -encoded_vocab = tokenizer.get_vocab() -encoded_vocab = [token for token, _ in sorted(encoded_vocab.items(), key=lambda x: x[1])] -tokenizer_str = tokenizer.backend_tokenizer.to_str() -stop_token_ids = [tokenizer.eos_token_id] -``` - -Refer to [`tensorrt_llm/llmapi/tokenizer.py`](source:tensorrt_llm/llmapi/tokenizer.py) for more details. You may dump these materials to disk, and reload them to C++ runtime for use. - -Each request can be optionally specified with a `GuidedDecodingParams`, which defines the desired structured format. Currently, it supports four types: -* `GuidedDecodingParams::GuideType::kJSON`: The generated text is amenable to JSON format; -* `GuidedDecodingParams::GuideType::kJSON_SCHEMA`: The generated text is amenable to JSON format with additional restrictions; -* `GuidedDecodingParams::GuideType::kREGEX`: The generated text is amenable to regular expression; -* `GuidedDecodingParams::GuideType::kEBNF_GRAMMAR`: The generated text is amenable to the extended Backus-Naur form (EBNF) grammar. - -The latter three types should be used with the schema/regex/grammar provided to `GuidedDecodingParams`. - -### Obtaining Arbitrary Output Tensors -The executor API gives the user the possibility to read the arbitrary outputs from the model. For example, it is possible to obtain hidden states or logits. - -#### Mark Tensors As Output -For a tensor to be obtainable using this feature, it needs to be marked as an output in the model definition (e.g. add `topk_logits.mark_output("TopKLogits")`) before building the TRT engine. - -#### Configure The Executor -Assuming the TensorRT engine you are planning to use has a tensor named `TopKLogits` marked as output, you should then configure the `Executor` to read from this output tensor by passing its name to the `ExecutorConfig` configuration object: -```cpp -auto const executorConfig = ExecutorConfig{}; - -std::vector additionalOutputs{ - executor::AdditionalModelOutput{"TopKLogits", /*whether or not to get the output for the context too */ true}}; -executorConfig.setAdditionalModelOutputs(additionalOutputs); - -// ... set more configuration options if needed -// ... create the `Executor` instance -``` - -### Request Additional Output -Construct a request to enqueue in the executor to query this tensor output: -```cpp -executor::Request request{requestTokens, parameters.maxOutputLength, true, executor::SamplingConfig{}, - executor::OutputConfig{false, false, false, true, false, false, additionalOutputs}}; -executor.enqueueRequest(request); -``` - -The output can be found at the `additionalOutputs` property of each response. - -#### Note on context outputs - -If KV cache reuse is enabled, context outputs will not contain outputs for the part of the context that has been reused. This part of the outputs can only be obtained from the prior request with the same prefix that generated this part of the KV cache. - -## C++ Executor API Example - -Two C++ examples are provided that show how to use the Executor API and can be found in the [`examples/cpp/executor`](source:examples/cpp/executor/) folder. - -## Python Bindings for the Executor API - -Python bindings for the Executor API are also available to use the Executor API from Python. The Python bindings are defined in [bindings.cpp](source:cpp/tensorrt_llm/nanobind/executor/bindings.cpp) and once built, are available in package `tensorrt_llm.bindings.executor`. Running `help('tensorrt_llm.bindings.executor')` in a Python interpreter will provide an overview of the classes available. - -In addition, three Python examples are provided to demonstrate how to use the Python bindings to the Executor API for single and multi-GPU models. They can be found in [`examples/bindings`](source:examples/bindings). - -## In-flight Batching with the Triton Inference Server - -A Triton Inference Server C++ [backend](https://github.com/triton-inference-server/tensorrtllm_backend) is provided with TensorRT-LLM that -includes the mechanisms needed to serve models using in-flight batching. That -backend is also a good starting example of how to implement in-flight batching using -the TensorRT-LLM C++ Executor API. diff --git a/docs/source/legacy/advanced/expert-parallelism.md b/docs/source/legacy/advanced/expert-parallelism.md deleted file mode 100644 index 55d948a80cae..000000000000 --- a/docs/source/legacy/advanced/expert-parallelism.md +++ /dev/null @@ -1,30 +0,0 @@ -(expert-parallelism)= - -# Expert Parallelism in TensorRT-LLM - -## Mixture of Experts (MoE) - -Mixture of Experts (MoE) architectures have become widespread, with models such as [Mistral Mixtral 8×7B](https://huggingface.co/mistralai/Mixtral-8x7B-v0.1). Specifically, MoE’s structure supports multiple parallel feed-forward neural-network (FFN) layers (called experts) in place of the single FFN layer in a dense model. When tokens arrive, the router layer selects the top-k experts for each token, and the corresponding hidden state of each token is dispatched to those experts. As a result, there are multiple tokens’ hidden states that are dispatched to each expert. - -moe_structure - -the MOE structure in Switch Transformer: [https://arxiv.org/pdf/2101.03961.pdf](https://arxiv.org/pdf/2101.03961.pdf) - -## Tensor Parallel vs Expert Parallel - -Parallelism on multi-GPUs is necessary if the MoE model cannot be accommodated by a single GPU’s memory. We support three kinds of parallel patterns for MoE structure: Tensor Parallel (default pattern), Expert Parallel, and a hybrid of the two. - -tensor parallel vs expert parallel - -Tensor Parallel evenly splits each expert’s weight and distributes them to different GPUs, which means each GPU holds partial weight of all experts, While Expert Parallel evenly distributes some of the experts’ full weight to different GPUs, which means each GPU holds part of the experts’ full weight. As a result, each GPU rank in the Tensor Parallel group receives all tokens’ hidden states for all experts, then computes using the partial weights, while for Expert Parallel, each GPU rank only receives part of tokens’ hidden states for experts on this rank, then computes using the full weights. - -When both Tensor Parallel and Expert Parallel are enabled, each GPU handles a portion of the expert weights matrices (as in EP mode) and these weights are further sliced across multiple GPUs (as in TP mode). This hybrid approach aims to balance the workload more evenly across GPUs, enhancing efficiency and reducing the likelihood of bottlenecks associated with EP mode alone. - - -## How to Enable - -The default parallel pattern is Tensor Parallel. You can enable Expert Parallel or hybrid parallel by setting `--moe_tp_size` and `--moe_ep_size` when calling `convert_checkpoint.py`. If only `--moe_tp_size` is provided, TRT-LLM will use Tensor Parallel for the MoE model; if only `--moe_ep_size` is provided, TRT-LLM will use Expert Parallel; if both are provided, the hybrid parallel will be used. - -Ensure the product of `moe_tp_size` and `moe_ep_size` is equal to `tp_size`, since the total number of MoE parallelism across all GPUs must match the total number of parallelism in other parts of the model. - -The other parameters related to the MoE structure, such as `num_experts_per_tok` (TopK in previous context) and `num_local_experts`, can be found in the model’s configuration file, such as the one for [Mixtral 8x7B model](https://huggingface.co/mistralai/Mixtral-8x7B-v0.1/blob/main/config.json). diff --git a/docs/source/legacy/advanced/gpt-attention.md b/docs/source/legacy/advanced/gpt-attention.md deleted file mode 100644 index d5b4d29718bf..000000000000 --- a/docs/source/legacy/advanced/gpt-attention.md +++ /dev/null @@ -1,343 +0,0 @@ -(gpt-attention)= - -# Multi-Head, Multi-Query, and Group-Query Attention - -This document details the implementation of multi-head attention (MHA), -multi-query attention (MQA) and group-query attention (GQA) for auto-regressive -GPT-like models in TensorRT-LLM. As a quick reminder, the multi-head attention -is the sequence of a batched matmul, a softmax and another batched matmul -described in the -[Attention Is All You Need](https://arxiv.org/abs/1706.03762) article. [Multi-query Attention (MQA)](https://arxiv.org/abs/1911.02150) and [Group-query Attention (GQA)](https://arxiv.org/abs/2307.09288) are variants of MHA that use fewer, so-called, K/V head than the number of query heads. TensorRT-LLM, MHA, MQA and GQA are implemented by the operator [`tensorrt_llm.functional.gpt_attention`](https://github.com/NVIDIA/TensorRT-LLM/blob/main/tensorrt_llm/functional.py). - -## Important Note - -As discussed below, the current implementation supports two input modes: Padded -and packed (non-padded). As the packed mode is always more memory-efficient and -faster than the padded mode, ***support for padded mode may be removed in the -future***. - -## Padded and Packed Tensors - -In TensorRT-LLM, the GPT attention operator supports two different types -of QKV inputs: Padded and packed (i.e. non padded) inputs. The mode is -determined by the global configuration parameter `remove_input_padding` defined -in [`tensorrt_llm.plugin`](https://github.com/NVIDIA/TensorRT-LLM/blob/main/tensorrt_llm/plugin/plugin.py). - -When padding is enabled (that is, `remove_input_padding` is `False`), the sequences -that are shorter than the `max_sequence_length` are padded to that maximum -length. It may result in excessive memory consumption as well as unneeded -computations on padding tokens (in the various matrix multiplications that -surround the MHA block). - -To overcome that problem, TensorRT-LLM supports a mode without padding where -the different tokens are packed together and the user provides the operator -with a 1D tensor containing the lengths of the different sequences. It is -recommended that users to always use packed mode (and support for the padded -mode may be removed in the future). - -## Context and Generation Phases - -The GPT attention operator encapsulates different implementations for both -context and generation phases in auto-regressive models like GPT. - -### Context Phase - -If the `context_fmha_type` is set to `disabled` (refer to -[`tensorrt_llm.plugin`](https://github.com/NVIDIA/TensorRT-LLM/blob/main/tensorrt_llm/plugin/plugin.py)), -the implementation maps to a sequence of GPU kernels that will store the -intermediate `Q*K^T` tensor in memory before calling the softmax operator. It -is the slowest method and the memory footprint is significant (quadratically -depends on the sequence length). - -Otherwise, if `context_fmha_type` is set to a `enabled` or -`enabled_with_fp32_acc` (accumulation in the first batched matmul is forced to -FP32), that function will trigger a kernel that performs the MHA/MQA block -using a single kernel. For short sequences, that kernel uses a vanilla -implementation of MHA/MQA. For larger sequences, this kernel uses the Flash -Attention algorithm as described in -[FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness](https://arxiv.org/abs/2205.14135) -and -[FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning](https://arxiv.org/abs/2307.08691). - -Currently, the implementation triggers extra kernels that apply pre-processing -to the elements (like RoPE) and populate the KV cache (see below). In a future -release, the number of such kernels is planned on being reduced in order to -improve the overall performance. - -#### FP8 Context FMHA - -When FP8 quantization is activated, the attention can be further accelerated by -enabling FP8 Context FMHA (`use_fp8_context_fmha = enable`). - -FP8 Paged Context FMHA is also supported with the fp8 quantization workflow. -You need to specify `use_fp8_context_fmha = enable` and -`use_paged_context_fmha = enable` at the same time. - -Please be aware that this feature is only supported on Ada and Hopper. - -### Generation Phase - -The generation phase is implemented using a single kernel called the masked -multi-head attention in TensorRT-LLM. That kernel is able to apply -pre-processing on the Q, K, and V elements on-the-fly: adds the QKV bias, applies -RoPE, and performs dequantization and quantization. TensorRT-LLM will continue to add (or -enable) additional features in future releases. For example, enable the support -for IA3. - -_The masked MHA kernel has a special version that distributes the work across -multiple CUDA thread-blocks on the GPU for cases where the GPU occupancy is -low. That mode called multi-block is turned on by default starting from TRT-LLM 0.13, -and can be disabled using `--multi_block_mode=False` during runtime. -Users are recommended to test that mode in scenarios where both the batch -size and the number of heads in the model are relatively small. The exact -definition of small in that context will depend on the model of the GPU and is -hard to predict but to provide with a rule of thumb, it is worth testing that -mode when `batch_size * num_heads` is less than the number of multi-processors -on the GPU (that suggestion may evolve in the future as more research is -conducted and the software improves)_. - -_Note that even if the multi-block mode is enabled, the attention operator will -not immediately trigger the multi-block version of the GPU kernel. There is a -minimum number of tokens (input + generated) that are required for the -multi-block version to become more efficient than the "vanilla" implementation -that uses a single CUDA thread-block per head. It is controlled by an internal -heuristic._ - -Another note is that as the masked MHA kernels use shared memory size -proportional to sequence length, so there can be some cases that GPU's shared -memory is not enough when multi-block mode is not enabled. To get masked MHA -kernel work in these cases, multi-block mode is forced on and a warning log is -printed. - -#### XQA Optimization - -Another optimization for MQA/GQA in the generation phase is called XQA optimization. - -Support matrix of the XQA optimization: - - FP16 / BF16 compute data type. - - FP16 / BF16 / FP8 / INT8 KV cache data type. - - Paged KV cache (8 / 16 / 32 / 64 / 128 tokens per block). - -By default, this is enabled. Note that a heuristic algorithm -is also used to decide whether to use XQA kernel or masked MHA kernel to get -better performance. -If you want to use that kernel whenever possible, set `TRTLLM_FORCE_XQA=1` to force use of the XQA kernel when the model config is supported. -Supported configurations can be found using the `shouldUse` function of the `DecoderXQARunner` class in -`cpp/tensorrt_llm/kernels/decoderMaskedMultiheadAttention/decoderXQARunner.h`. - - -(inflight-batching)= - -## In-flight Batching - -TensorRT-LLM supports in-flight batching of requests (also known as continuous -batching or iteration-level batching) for higher serving throughput. With this feature, -sequences in context phase can be processed together with sequences in -generation phase. The purpose of that technique is to better interleave -requests to reduce latency as well as make better use of the GPUs. -For efficiency reasons (1), the support for inflight batching ***requires the -input tensors to be packed (no padding)***. - -***In the current implementation, the sequences that are going through the -context phase must be before the sequences in the generation phase in the input -tensor. For example, for sequences `S0`, `S1` and `S2`, if `S0` and `S2` are in -context phase (and `S1` in generation), tokens from `S0` and `S2` must appear -before the tokens of `S1` in the input tensor***. The constraint may or may not -be relaxed in a future version. - -_(1) Padding sequences in the generation phase, that contain a single token, to -the length of the maximum input sequence is inefficient use of resources_. - - - -## Chunked Context - -In the original state, the common behavior was to process all context tokens at -once. This feature splits the context into several chunks. In this way, the -context chunks can be batched with more tokens during the generation phase, -which is expected to increase the total throughput. Chunking contexts also removes -constraints on input length. To enable this feature, the FMHA paged kv-cache also -needs to be enabled. Except for the last one, the size of the context chunk needs -to be an integer multiple of the kv-cache block size. Refer to -[the chunked context feature](../../features/long-sequence.md) for usage. - -## KV Cache - -In the generation phase, a common optimization is to provide the MHA kernel -with a cache containing the values of the past K and V elements that have -already been computed. That cache is known as the KV cache. TensorRT-LLM uses -that technique to accelerate its generation phase. In TensorRT-LLM, there is -one KV cache per Transformer layer, which means that there are as many KV -caches as layers in a model. The current version of TensorRT-LLM supports two -different types of KV caches: **contiguous** and **paged** KV caches. - -### Contiguous KV Cache - -The contiguous KV cache is a monolithic tensor. Its shape is: -``` -[max_batch_size * max_beam_width, 2, num_heads, max_seqlen, hidden_dim_per_head]. -``` - -That implementation uses a lot more memory than needed when the sequences are -shorter than the maximum sequence length (even if they end up close to the -limit after the generation of many output tokens, it may take a lot of steps to -reach that point). - -### Paged KV Cache - -The paged KV cache decomposes the KV cache into blocks that are distributed to -the different requests by a cache manager during processing. That cache manager -keeps track of the sequences, allocate new blocks from a pool and recycle those -blocks when required. See the simplified implementation of -[`tensorrt_llm.runtime.KVCacheManager`](source:tensorrt_llm/runtime/kv_cache_manager.py). -A more efficient C++ implementation is included in the -[Batch Manager](source:cpp/include/tensorrt_llm/batch_manager). - -## INT8/FP8 KV Caches - -In its current implementation, even if the rest of the network runs in INT8 or -FP8, the GPT attention operator works with FP32, FP16, and BFloat16 inputs and -outputs. However, TensorRT-LLM supports INT8 and FP8 -(`kv_cache_quant_mode=QuantMode.INT8_KV_CACHE` and -`kv_cache_quant_mode=QuantMode.FP8_KV_CACHE`) KV caches. - -The GPT attention operator populates the KV cache. When INT8 or FP8 KV caches -are enabled, the input values have to be quantized to 8 bits using a scaling -factor. For quantization, the scaling factor is stored in the -`kv_cache_scaling_factor` tensor. Its shape is `[1]` and only per-tensor -quantization is supported in the current version. Quantization uses inversed scale -since it does multiply as `fp_value * (1.0 / kv_cache_scaling_factor)` in plugin. - -During generation, the values read from the cache are dequantized on-the-fly in -the MHA/MQA kernel, dequantization can be described as -`quantized_value * kv_cache_scaling_factor`. - - -## Sliding Window Attention, Cyclic (Rolling Buffer) KV Cache - -TensorRT-LLM has a feature called `Cyclic KV Cache`, which treats the kv cache -as a circular buffer. This means that it only stores the kv cache for the last N -tokens, where N is determined by the `max_attention_window_size` parameter in -`GenerationSession.setup`. You can see examples of this in the `run.py` or -`summarize.py` files. When the cache is full, new tokens’ kv cache will -overwrite the "least recently used" caches. - -In the context phase, if the input length surpasses the `max_attention_window_size`, -`Sliding Window Attention` will be activated. This serves the same function as -the `sliding window_size`. - -This feature helps to reduce the memory footprint of the kv cache when -dealing with very long sequences. - -The feature, which allows different `max_attention_window_size` values -for each layer, is also supported. To utilize this feature, simply provide an -`int32 torch.Tensor` or `list` to the `GenerationSession.setup` when using python -runtime session, or provide a vector to the `KvCacheConfig` when using cpp runtime. -If the number of the provided elements is less than the number of layers, the provided -tensor/list/vector will be repeated multiple times to the number of layers and then be -saved as a new tensor. This tensor will serve as the buffer for `max_attention_window_size`, -setting unique values for each layer. However, it’s important to note that the -memory allocation for the kv cache still relies on the buffer’s maximum value. - -_Note that the cyclic kv cache feature doesn't work with beam searching currently as -the context kv cache are shared across beams. - -## StreamingLLM - -The StreamingLLM feature uses a window attention to perform efficient and stable LLM -on long texts, which means that only `N` tokens need to be stored in the KV cache. -Similar to the cyclic KV cache feature in TensorRT-LLM, `max_attention_window_size` -parameter is used to determine `N`. Different from the cyclic KV cache feature, -the first `S` tokens, called sink tokens, are always kept in the attention window, -where `S` is determined by `sink_token_length` parameter in `GenerationSession.setup`. -But in context phase, the self-attention is dense in the official implementation of -StreamingLLM, and it uses all of the tokens for computation and only saves `N` tokens -to the KV cache. - -In addition, the relative position embedding is also changed in StreamingLLM. -When determining the relative distance and adding positional information to tokens, -StreamingLLM uses the positions within the cache rather than those in the original text. - -`streamingllm` flag is used to enable this feature. - -## Beam-Search - -The GPT attention operator supports beam-search. In the context phase, a single -beam is computed per input sequence. In the generation phase, the MHA/MQA/GQA -kernel uses an additional tensor to reconstruct the correct path for each beam. -That tensor is called the `cache_indirection`. Its shape is `[batch_size, -beam_width, max_seqlen]`. - -For a sequence `si`, a beam `bi` and a token `ti`, the element -`cache_indirection[si][bi][ti]` is an integer between `0` and `beam_width-1` -that indicates which path in the beam to read the K and V elements from in the -KV cache. This tensor is populated in the sampling stage. - -## Input QKV tensor - -The input QKV tensor packs the Q, K and V tensors (concatenated along the last -dimension) after the projection of the hidden states. It is a 3D tensor. RoPE -and quantization to INT8 or FP8 (when needed) are performed by the GPT -attention operator. - -In padded mode, its shape is `[batch_beam_size, max_seqlen, 3 * hidden_dim]` -where `batch_beam_size` is the batch size (number of sequences) for the context -phase and the batch size multiplied by the beam width for the generation phase. -Having different beam widths per sequence in padded mode is not supported. - -In packed mode, its shape is `[num_tokens, 3 * hidden_dim]` where -`num_tokens` is the total number of tokens in the batch. For the sequences in -context phase, the number of tokens of a sequence corresponds to its input -length (even if the beam width is greater than `1` for beam search). For the -sequences in generation phase, there are `beam_width` tokens per sequence. The -beam width can be different for each sequence. - -In other words, the pseudo-code to compute the number of tokens is: - -```python -num_tokens = 0 - -# Add the length of each sequence in context phase. -for seq in context_phase: - num_tokens += seq.length - -# Add the width of the beam for each sequence in generation phase. -for seq in generation_phase: - num_tokens += seq.beam_width -``` - -### Rotary Positional Embedding (RoPE) - -The GPT attention operation can perform the computation of the Rotary -Positional Embedding (RoPE). When that operation is enabled, -`rotary_embedding_dim` is set to a value greater than 0, it is fused with other -operations. The GPT operator supports GPT-NeoX and GPT-J forms of RoPE by -setting `position_embedding_type` to `PositionEmbeddingType.rope_gpt_neox` -or `PositionEmbeddingType.rope_gptj`. - -### ALiBi - -The GPT attention operator can apply ALiBi to the result of the `Q*K^T` -product. The bias is computed on-the-fly from the ALiBi slopes in the optimized -kernel. - -### Scaling factor(s) - -In MHA, the output of the `Q*K^T` product is scaled by a constant value that -is computed as: - -``` -norm_factor = 1.f / (q_scaling * sqrt(head_size)). -``` - -### Cross Attention - -On top of the MHA as self attention needed by GPT-style decoder-only models, `gpt_attention` also supports cross attention. - -This enables using `gpt_attention` in a broader aspect as a generic decoder component. For example, the Encoder-Decoder model uses `gpt_attention` to issue both the self attention and cross attention modules in its Decoder. - -### Relative Attention Bias (RAB) - -Relative attention bias (RAB) is a kind of relative position modeling, adding an attention bias (`Q*K^T+bias`) according to relative positions. RAB is a lightweight method to include the information of relative positions, and is used in the popular Encoder-Decoder model [T5](https://huggingface.co/docs/transformers/model_doc/t5) and also other models in the T5 family. - -RAB is supported in two modes: i) regular mode which user passes in relative attention bias computed ahead of MHA. ii) implicit mode which computes the relative attention bias on the fly in MHA. The implicit mode suits the case when the relative attention bias is too large to fit in memory and can be turned on by passing in `max_distance`. diff --git a/docs/source/legacy/advanced/gpt-runtime.md b/docs/source/legacy/advanced/gpt-runtime.md deleted file mode 100644 index e384c45175e4..000000000000 --- a/docs/source/legacy/advanced/gpt-runtime.md +++ /dev/null @@ -1,202 +0,0 @@ -(gpt-runtime)= - -# C++ GPT Runtime - -TensorRT-LLM includes a C++ component to execute TensorRT engines built with -the Python API as described in the {ref}`architecture-overview` section. -That component is called the C++ runtime. - -The API of the C++ runtime is composed of the classes declared in -[`cpp/include/tensorrt_llm/runtime`](https://github.com/NVIDIA/TensorRT-LLM/tree/main/cpp/include/tensorrt_llm/runtime) and -implemented in [`cpp/tensorrt_llm/runtime`](https://github.com/NVIDIA/TensorRT-LLM/tree/main/cpp/tensorrt_llm/runtime). - -Even if the different components described in that document mention GPT in -their name, they are not restricted to this specific model. Those classes can -be used to implement auto-regressive models like BLOOM, GPT-J, GPT-NeoX or -LLaMA, for example. - -Complete support of encoder-decoder models, like T5, will be added to -TensorRT-LLM in a future release. An experimental version, only in Python for -now, can be found in the [`examples/models/core/enc_dec`](https://github.com/NVIDIA/TensorRT-LLM/tree/main/examples/models/core/enc_dec) folder. - -## Overview - -Runtime models are described by an instance of the -[`ModelConfig`](https://github.com/NVIDIA/TensorRT-LLM/blob/main/cpp/include/tensorrt_llm/runtime//modelConfig.h) -class and a pointer to the TensorRT engine that must be -executed to perform the inference. -The environment is configured through the -[`WorldConfig`](https://github.com/NVIDIA/TensorRT-LLM/blob/main/cpp/include/tensorrt_llm/runtime/worldConfig.h) -(that name comes from -[MPI](https://en.wikipedia.org/wiki/Message_Passing_Interface) and its "famous" -`MPI_COMM_WORLD` default communicator). -The [`SamplingConfig`](https://github.com/NVIDIA/TensorRT-LLM/blob/main/cpp/include/tensorrt_llm/runtime/samplingConfig.h) -class encapsulates parameters that control the -[generation](https://huggingface.co/blog/how-to-generate) of new tokens. - -### Model Configuration - -The model configuration is an instance of the -[`ModelConfig`](https://github.com/NVIDIA/TensorRT-LLM/blob/main/cpp/include/tensorrt_llm/runtime//modelConfig.h) class. -That class encapsulates the following parameters (they are declared as private -member variables and exposed through getters and setters): - - * `vocabSize`, the size of the vocabulary, - * `numLayers`, the number of layers in the model, - * `numHeads`, the number of heads in the attention block, - * `numKvHeads`, the number of heads for K and V in the attention component. - When the number of K/V heads is the same as the number of (Q) heads, the - model uses multi-head attention. When the number of K/V heads is 1, it uses - multi-query attention. Otherwise, it uses group-query attention. Refer to {ref}`gpt-attention` for more information, - * `hiddenSize`, the size of the hidden dimension, - * `dataType`, the datatype that was used to build the TensorRT engine and that - must be used to run the model during inference, - * `useGptAttentionPlugin`, indicates if the {ref}`gpt-attention` operator was compiled using the - [GPT Attention plugin](https://github.com/NVIDIA/TensorRT-LLM/tree/main/cpp/tensorrt_llm/plugins/gptAttentionPlugin), - * `inputPacked`, indicates that the input must be packed (or padded when set - to `false`). For performance reasons, it is recommended to always use packed, - even if its default is set to `false` (will be changed in a future release). - Refer to {ref}`gpt-attention` for more information, - * `pagedKvCache`, indicates if the K/V cache uses paging. - Refer to {ref}`gpt-attention` for more information, - * `tokensPerBlock`, is the number of tokens in each block of the K/V cache. - It's relevant when the paged K/V cache is enabled. By default, the value is - 64. Refer to {ref}`gpt-attention` for more information, - * `quantMode`, controls the quantization method. Refer to {ref}`precision` for more information. - * `maxBatchSize`, indicates the maximum batch size that the TensorRT engine - was built for, - * `maxInputLen`, the maximum size of the input sequences, - * `maxSequenceLen`, the maximum total size (input+output) of the sequences. - -### World Configuration - -Familiarity with -[MPI](https://en.wikipedia.org/wiki/Message_Passing_Interface), is not required -to utilize the TensorRT-LMM C++ runtime. There are two main things -you need to know: -* The C++ Runtime in TensorRT-LLM uses -[processes](https://en.wikipedia.org/wiki/Process_(computing)) to execute -TensorRT engines on the different GPUs. Those GPUs can be located on a single -node as well as on different nodes in a cluster. Each process is called a -*rank* in MPI. -* The ranks are grouped in communication groups. The -TensorRT-LLM C++ Runtime calls that group the *world*. - -The world configuration is an instance of the -[`WorldConfig`](https://github.com/NVIDIA/TensorRT-LLM/blob/main/cpp/include/tensorrt_llm/runtime/worldConfig.h) -class, which encapsulates the following parameters: - -* `tensorParallelism`, the number of ranks that collaborate together to - implement Tensor Parallelism (TP). With TP, each GPU performs computations for - all the layers of the model. Some of those computations are distributed - across the GPU. TP is more balanced than Pipeline Parallelism (PP), in most cases, but - requires higher bandwidth between the GPUs. It is the recommended setting in - the presence of NVLINK between GPUs, -* `pipelineParallelism`, the number of ranks that collaborate together to - implement Pipeline Parallelism (PP). With PP, each GPU works on a subset of - consecutive layers. Communications between the GPUs happen only at the - boundaries of the subsets of layers. It is harder to guarantee the full - utilization of the GPUs with PP but it requires less memory bandwidth. It - is the recommended setting in the absence of NVLINK between GPUs, -* `rank`, the unique identifier of the rank, -* `gpusPerNode`, indicates the number of GPUs on each node. Having that - information allows the C++ runtime to optimize communications between GPUs in - a node (like taking advantage of the - [NVLINK](https://www.nvidia.com/en-us/data-center/nvlink/) - interconnect between GPUs of an A100 - [DGX](https://www.nvidia.com/en-us/data-center/dgx-platform/) - node). - -### Sampling Parameters - -The [`SamplingConfig`](https://github.com/NVIDIA/TensorRT-LLM/blob/main/cpp/include/tensorrt_llm/runtime/samplingConfig.h) -class encapsulates parameters that control the -[generation](https://huggingface.co/blog/how-to-generate) of new tokens. -A comparison of selecting decoding method is listed as the table below (`X` means it is not supported yet). -Except for the `beamWidth` parameter, all the fields are optional and the -runtime will use a default value if no values are provided by the user. For -vector fields, the TensorRT-LLM runtime supports one value per sequence (that is, -the vector contains `batchSize` values). If all the sequences use the same -value for a given parameter, the vector can be limited to a single element -(that is, `size() == 1`). - -| Method name in HF | Condition in HF | Method name in TRT-LLM | Condition in TRT-LLM | -| :------------------------------: | :---------------------------------------------------: | :--------------------: | :--------------------------------------------: | -| assisted decoding | `assistant_model` or `prompt_lookup_num_tokens!=None` | X | | -| beam-search decoding | `num_beams>1` and `do_sample=False` | beam search | `beamWidth > 1` | -| beam-search multinomial sampling | `num_beams>1` and `do_sample=True` | X | | -| constrained beam-search decoding | `constraints!=None` or `force_words_ids!=None` | X | | -| contrastive search | `penalty_alpha>0` and `top_k>1` | X | | -| diverse beam-search decoding | `num_beams>1` and `num_beam_groups>1` | X | | -| greedy decoding | `num_beams=1` and `do_sample=False` | sampling | `beamWidth == 1` and `topK=0` and `topP=0.0f` | -| multinomial sampling | `num_beams=1` and `do_sample=True` | sampling | `beamWidth == 1` and (`topK>0` or `topP>0.0f`) | - -***General*** - -| Name in TRT-LLM | Description | Data type | Range of value | Default value | Name in HF | -| :-----------------: | :-------------------------------------------------------------------------------: | :-----------: | :---------------------------------------------------------------------------------------: | :---------------------------------------------------: | :--------------------: | -| `temperature` | modulation of logits in sampling workflow | List\[Float\] | \[0.0f, $+\infty$\) | `1.0f` (no modulation) | `temperature` | -| `minLength` | lower-bound on the number of tokens generated | List\[Int\] | \[0, $+\infty$\) | `0` (no effect (the first generated token can be EOS) | `min_length` | -| `repetitionPenalty` | penalize repetitive tokens
multiplicative, irrespective of appearances count | List\[Float\] | \[0.0f, $+\infty$\)
`< 1.0f` encourages repetition
`> 1.0f` discourages it | `1.0f` (no effect) | `repetition_penalty` | -| `presencePenalty` | penalize existed tokens
additive, irrespective of appearances count | List\[Float\] | \($-\infty$, $+\infty$\)
`< 0.0f` encourages repetition
`> 0.0f` discourages it | `0.0f` (no effect) | no | -| `frequencyPenalty` | penalize existed tokens
additive, dependent on appearances count | List\[Float\] | \($-\infty$, $+\infty$\)
`< 0.0f` encourages repetition
`> 0.0f` discourages it | `0.0f` (no effect) | no | -| `noRepeatNgramSize` | | List\[Int\] | \[0, $+\infty$\)
`> 0` all ngrams of that size can only occur once | `0` (no effect) | `no_repeat_ngram_size` | - -* The tokens of input prompt are included during adopting `repetitionPenalty`, `presencePenalty`, and `frequencyPenalty` onto logits. - -* The parameters `repetitionPenalty`, `presencePenalty`, and `frequencyPenalty` are not mutually exclusive. - -***Sampling*** - -| Name in TRT-LLM | Description | Data type | Range of value | Default value | Name in HF | -| :-------------: | :---------------------------------------------------------------------: | :-----------: | :---------------: | :--------------: | :--------: | -| `randomSeed` | random seed for random number generator | Int64 | \[0, 2^64-1\] | `0` | no | -| `topK` | the number of logits to sample from | List\[Int\] | \[0, 1024\] | `0` | `top_k` | -| `topP` | the top-P probability to sample from | List\[Float\] | \[0.0f, 1.0f\] | `0.0f` | `top_p` | -| `topPDecay` | the decay in the `topP` algorithm | List\[Float\] | \(0.0f, 1.0f\] | `1.0f` | no | -| `topPMin` | the decay in the `topP` algorithm | List\[Float\] | \(0.0f, 1.0f\] | `1.0e-6,f` | no | -| `topPResetIds` | the decay in the `topP` algorithm | List\[Int\] | \[-1, $+\infty$\) | `-1` (no effect) | no | -| `minP` | scale the most likely token to determine the minimum token probability. | List\[Float\] | \[0.0f, 1.0f\] | `0.0` (no effect) | `min_p` | - - * If setting `topK = 0` and `topP = 0.0f`, greedy search is performed. - * If setting `topK > 0` and `topP = 0.0f`, `topK` tokens of highest probabilities will become the candidates of sampling (named `TopK sampling` in TRT-LLM). - * If setting `topK = 0` and `topP > 0.0f`, tokens will be sorted with probability descendly, then the tokens with highest probabilities which the accumulated probability larger than `topP` will become the candidates of sampling (named `TopP sampling` in TRT-LLM). - * If setting `topK > 0` and `topP > 0.0f`, `topK` tokens of highest probabilities will be selected, then those selected tokens will be sorted with probability descendly and their probability will be normalized, then the tokens with highest normalized probabilities which the accumulated probability larger than `topP` will become the candidates of sampling (named `TopKTopP sampling` in TRT-LLM) - - * If different `topK` values are provided for the different sequences in the batch, the performance of the implementation will depend on the largest value. For efficiency reasons, we recommend to batch requests with similar `topK` values together. - - * `topPDecay`, `topPMin` and `topPResetIds` are explained in - [_Factuality Enhanced Language Models for Open-Ended Text Generation_](https://arxiv.org/abs/2206.04624). - `topPDecay` is the decay, `topPMin` is the lower-bound and `topPResetIds` indicates where to reset the decay. - - * `minP` is explained in [_Turning Up the Heat: Min-p Sampling for Creative and Coherent LLM Outputs_](https://arxiv.org/abs/2407.01082). - - * TensorRT-LLM does not generate all possible tokenizations of a word. Therefore, stop words may appear in the output if there are multiple ways to tokenize a stop word and the token sequence in the output differs from the one in `stopWords`. - -***Beam-search*** - -| Name in TRT-LLM | Description | Data type | Range of value | Default value | Name in HF | -| :-----------------------: | :-----------------------------: | :-----------------: | :----------------------: | :-----------------------: | :-----------------: | -| `beamWidth` | width for beam-search algorithm | Int | \[0, 1024\] | `0` (disable beam search) | `beam_width` | -| `beamSearchDiversityRate` | diversity of generated tokens | List\[Float\] | \[0, $+\infty$\) | `0.0f` | `diversity_penalty` | -| `lengthPenalty` | penalize longer sequences | List\[Float\] | \[0, $+\infty$\) | `0.0f` | `length_penalty` | -| `earlyStopping` | see description below | List\[Int\] | \($-\infty$, $+\infty$\) | `0` | `early_stopping` | -| `beamWidthArray` | see description below | List\[List\[Int\]\] | \[0, 1024\] | `` | no | - - * Beam-search algorithm: [beam search](https://en.wikipedia.org/wiki/Beam_search). - * Parameter `diversity_penalty` in HF is only used for `diverse beam-search decoding` (or named `Group-Beam-Search`), which is not supported by TRT-LLM yet. - * If setting `earlyStopping = 1`, decoding will stop once `beamWidth` finished sentences are generated. - * If setting `earlyStopping = 0`, decoding will keep going until no better sentences (with better score) can be generated. - * If setting `earlyStopping` to other values, decoding will stop only depending on `lengthlengthPenalty`. - * `beamWidthArray` is a list of beam width for each step. Using `beamWidthArray = [20,40,80]` as an example, -beam width will be 20 for the first step, 40 for second step, 80 for the later all steps. - * The `beamWidth` parameter is a scalar value. It means that in this release of -TensorRT-LLM, it is not possible to specify a different width for each input -sequence. This limitation is likely to be removed in a future release. - -### Internal Components - -The [`TllmRuntime`](https://github.com/NVIDIA/TensorRT-LLM/blob/main/cpp/tensorrt_llm/runtime/tllmRuntime.h) is in charge of the execution of the TensorRT engine. -The `TllmRuntime` class is an internal component and you are not expected to use that class directly. -The [`GptDecoder`](https://github.com/NVIDIA/TensorRT-LLM/blob/main/cpp/include/tensorrt_llm/runtime/gptDecoder.h) generates tokens from the logits. -The `GptDecoder` can be used directly to implement a custom generation loop and for use cases that cannot be satisfied by the TRT-LLM implementation. diff --git a/docs/source/legacy/advanced/graph-rewriting.md b/docs/source/legacy/advanced/graph-rewriting.md deleted file mode 100644 index 40552a0497d9..000000000000 --- a/docs/source/legacy/advanced/graph-rewriting.md +++ /dev/null @@ -1,197 +0,0 @@ -(graph-rewriting)= - - -# Graph Rewriting Module - -TensorRT-LLM uses a declarative approach to define neural networks and contains -techniques to optimize the underlying graph. It provides a wrapper similar to PyTorch's Module. When a user invokes the `forward` method, the layers are lowered to TensorRT's `ILayer`s and become part of an `INetworkDefinition`. The Graph Rewriting (GW) module can be used to manipulate the network at the `ILayer`/`INetworkDefinition` level. - -## When to Use Graph Rewriting? - -For network manipulation, there are two options in TensorRT-LLM: - -1. **Module Rewriting:** This method modifies the members of `Module` instances before triggering the `forward` method (that is, creating the TensorRT graph). It works on the highest level of the network representation and facilitates the modification of sequences of operations (like modifying the GEMM + activation for SmoothQuant), - -2. **Graph Rewriting:** Graph Rewriting manipulates TensorRT's `INetworkDefinition` after the `forward` method is triggered. It operates at a finer-grained `ILayer` level and can alter the structure across multiple Module instances. It is typically used for layer fusion. - -Graph Rewriting (GW) is ideally used in the following conditions: - -1. When only `ILayer`/`INetworkDefinition` is available, -2. When Module Rewriting would lead to nested control flow or scattered functionality. - -## Graph Rewriting APIs - -Several core APIs are provided for Graph Rewriting: - -### Tensor-Related Methods - -- `Tensor.get_parent`: Get the `ILayer` that produces this tensor, -- `Tensor.get_users`: Get the consumer `ILayer`s of this tensor, -- `replace_all_uses_with`: Replace this tensor with another tensor in all consumer `ILayer`s. - -### FLayerInfo for Retrieving High-Level Information for a Functional - -For all the layers located in `functional.py`, the original input information is missing once lowered to `INetworkDefinition`, especially for TensorRT plugins, which are opaque in the Python world. `FLayerInfo` holds their original information as a high-level signature containing inputs like `Tensor`, Python attributes, and more. There is a Network-wise singleton called `FLayerInfoMemo` to map each `ILayer` to its corresponding `FLayerInfo`. - -For `FLayerInfo`: - -- `FLayerInfo.replace_input_with`: Replace some input tensor with another tensor, -- `FLayerInfo.replace_output_uses_with`: Redirect the usage of the original output tensors to a set of new tensors. - -For `FLayerInfoMemo`: - -- `FLayerInfoMemo.instance()`: Get the singleton instance, -- `FLayerInfoMemo.get`: Get the corresponding `FLayerInfo` for an `ILayer`. - -`FLayerInfo` remains consistent with the actual `ILayer` during GW, making it safe to use. - -### Pattern and Pattern Manager - -There are two kinds of patterns: - -- `PatternRewriter`: Used for defining a rewriting pattern, which actually alters the network. - - `match`: Match the pattern; returns true if a layer is matched, - - `rewrite`: Manipulate a layer, - - `match_and_rewrite`: Combines both `match` and `rewrite`, used for complex states that need to pass from `match` to `rewrite`. - -- `PatternAnalyzer`: Used for defining an analysis pattern, which collects information from the network. - - `match`: Match the pattern, - - `analyze`: Perform analysis on a list of layers. - -There are two managers for managing multiple `PatternRewriter` or `PatternAnalyzer`: - -- `RewritePatternManager`: - - `add`: Add a pattern with its label and benefit; the benefit specifies its privilege, - - `get`: Get a pattern by label, - - `rewrite`: Apply the rewriting patterns contained to a network. - -- `AnalysisPatternManager`: - - `add`: Add a pattern with its label and benefit; the benefit specifies its privilege, - - `get`: Get a pattern by label, - - `analyze`: Apply the analysis patterns contained to a network. - -### @record_signature to Decorate Functionals Requiring FLayerInfo - -The `@record_signature` decorator is used to record the `FLayerInfo` for a functional. While FLayerInfo is vital for GW when analyzing or rewriting certain functionals, it is used in an "add as needed" manner. If you are adding GW patterns, ensure that the functional requires the `@record_signature` decorator. - -## Classical Workflow - -There are specific routines for defining a GW pattern. Let's start with a simple example: replacing a sum layer with a subtract layer, which can also be found in the `test_graph_rewriting.py` file. - -```python -class NaivePatternRewriter_ReplaceAddWithSub(PatternRewriter): - - def __init__(self): - super().__init__('replace_add_with_sub', - root_layer={trt.LayerType.ELEMENTWISE}, - separate_match_rewrite=True) - - def match(self, layer: Layer): - # The rewriter will stop at the first matched layer, and then the Rewriter will enter the rewrite() to do the rewriting. - return layer.as_layer().op == trt.ElementWiseOperation.SUM - - def rewrite(self, layer: Layer) -> None: - # The layer here should be an Elementwise_SUM layer. - with net_guard(layer.network): - # There are several stages to replace some subgraph with another subgraph: - - # Stage 1: Get the input tensors and output tensors of the subgraph to replace. - # - For Elementwise_SUM, there are two inputs and one output. - a, b = layer.get_inputs(0, 1) - o = layer.get_outputs(0)[0] - - # Stage 2: Create a new subgraph that takes the old one's inputs. - # - Here we insert an Elementwise_SUB layer, and 'c' is the output. - c = a - b - - # Stage 3: Redirect all the layers depending on the outputs of the old subgraph to the new subgraph's. - # - After this, the SUM becomes dangling and will be pruned by TensorRT when building the engine. - # - Note that there is no API in TensorRT python to remove a layer explicitly; `replace_all_uses_with` is the only way to "remove" a layer. - o.replace_all_uses_with(c) - - # Stage 4: Mark all the layers in the old subgraph as removed. - # - This helps the PatternRewriter to skip the removed layers. - layer.mark_as_removed() -``` - -In this example, we deal with `ILayer` rather than Plugins, so `FLayerInfo` is unnecessary. As illustrated in the `rewrite` method, there are four stages that are shared across nearly all rewrite patterns. - -Note that in GW, we **NEVER** rewrite a layer directly. Instead, we do it in two steps: first, create another layer with the same input and deprive all the users of the original outputs, redirecting them to the outputs of the new layers. In this way, the old layer will be dangling and pruned automatically by TensorRT during the engine building phase. This is a limitation of TensorRT since remove-layer-like APIs are not available in Python. - -In Stage 2, we rely on operators and layers commonly used during the network building phase. Ideally, you can replace them with any network structure during GW. - -For the usage of `FLayerInfo`, let's rewrite the `gpt_attention` to enable the `remove-padding` feature. `gpt_attention` is actually - - a TensorRT plugin, so we need `FLayerInfo` to hold the original Tensor-wise inputs to help create new `gpt_attention` layers. - -```python -class GPTAttentionPluginRemovePaddingRewritePass(PatternRewriter): - - def __init__(self): - super().__init__('gpt_attention_plugin_remove_padding', - root_layer={trt.LayerType.PLUGIN_V2}) - - def match_and_rewrite(self, layer: Layer) -> bool: - if layer.as_layer().type != trt.LayerType.PLUGIN_V2 or \ - layer.as_layer().plugin.plugin_namespace != 'tensorrt_llm' or \ - layer.as_layer().plugin.plugin_type != 'GPTAttention': - return False - - # Retrieve the FLayerInfo - flayer = FLayerInfoMemo.instance().get(layer.name) - assert flayer - # Although the layer is a plugin, which is a black box, we get some high-level input information from the FLayerInfo. - tensor_input: Tensor = flayer.get_input('qkv') - if tensor_input.shape[0] == 1: # Already in remove-padding mode - return False - - # Some information could be passed in from external - assert self.args is not None, "args should be passed in from RewritePatternManager.rewrite()" - batch_size, in_len, hidden_size = self.args['batch_size'], self.args['in_len'], self.args['hidden_size'] - - with net_guard(layer.network): - new_inputs = flayer.clone_inputs() - - # Step 1: Create new inputs and replace the original arglist. - input = Tensor( - name='qkv', - dtype=trt.float16, - shape=(1, batch_size * in_len, hidden_size), - ) - new_inputs['qkv'] = input - - # Step 2: Create a new plugin instance. - new_outs = gpt_attention(**new_inputs) - - # Step 3: Deprive all the users of the old plugin instance. - flayer.replace_outputs_uses_with(layer.network, new_outs) - - # Step 4: Remove the old plugin instance. - layer.mark_as_removed() - - return True -``` - -This is quite similar to the first example, with the focus on the `FLayerInfo` part. Through the code below, we can get the original inputs of this layer, enabling us to alter the inputs related to remove-padding and create a new layer to replace it. - -```python -flayer = FLayerInfoMemo.instance().get(layer.name) -assert flayer -``` - -```python -new_inputs = flayer.clone_inputs() - -# Step 1: Create new inputs and replace the original arglist. -input = Tensor( - name='tensor', - dtype=trt.float16, - shape=(1, batch_size * in_len, hidden_size), -) -new_inputs['tensor'] = input - -# Step 2: Create a new plugin instance. -new_outs = gpt_attention(**new_inputs) -``` - -For real examples, please refer to the `FuseAttentionWithBiasPass` in the `graph_rewriting.py`. diff --git a/docs/source/legacy/advanced/images/8x_l20_L40S_node_architecture.png b/docs/source/legacy/advanced/images/8x_l20_L40S_node_architecture.png deleted file mode 100644 index 725427f163c4ff957eebbf9c19d771b472f68eb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267638 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 z 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