tensorRT--- 动态shape

本文主要探讨了TensorRT中动态shape的概念,强调在编译时指定动态范围[L-H],在推理过程中允许形状值在L到H之间变化,从而实现更灵活的模型部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态shape,即编译时指定可动态的范围[L-H],推理时可以允许 L <= shape <= H

重点提炼:

1. OptimizationProfile 是一个优化配置文件,用来指定输入的 shape 可以变换的范围的,不要被优化两个字蒙蔽了双眼
2. 如果 onnx 的输入某个维度是 -1 ,表示该维度动态,否则表示该维度是明确的,明确维度的 minDims , optDims , maxDims 一定是一样的

动态shape,即编译时指定可动态的范围[L-H],推理时可以允许 L <= shape <= H

重点提炼:

### TensorRT for LLM Implementation and Optimization #### 使用TensorRT优化大语言模型(LLM) NVIDIA 的 TensorRT 是一种高性能深度学习推理库,专为加速神经网络部署而设计。它通过多种方式显著提升大语言模型的性能和效率[^1]。 对于大语言模型的应用场景,TensorRT 提供了专门针对 Transformer 架构的支持,这是当前大多数 LLM 所采用的核心架构之一。具体而言,TensorRT 支持以下功能来实现高效的大规模推理: - **层融合(Layer Fusion)**: TensorRT 能够自动识别并融合多个连续的操作(如 GEMMs 和激活函数),从而减少内存访问次数并提高计算吞吐量[^3]。 - **稀疏性支持(Sparsity Support)**: 利用权重剪枝后的稀疏矩阵结构进一步降低运算复杂度,在不牺牲精度的情况下加快推断速度。 - **混合精度推理(Mixed Precision Inference)**: 结合 FP16 或 BF16 数据类型执行部分操作可以有效节省显存空间同时保持较高的准确性水平[^2]。 以下是基于 Python API 实现的一个简单示例程序片段展示如何加载预训练好的 BERT 模型并通过 TensorRT 进行序列分类任务: ```python import tensorrt as trt from transformers import BertTokenizerFast def build_engine(onnx_file_path, engine_file_path): TRT_LOGGER = trt.Logger(trt.Logger.WARNING) builder = trt.Builder(TRT_LOGGER) network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)) parser = trt.OnnxParser(network, TRT_LOGGER) with open(onnx_file_path, 'rb') as model: if not parser.parse(model.read()): print('ERROR: Failed to parse the ONNX file.') for error in range(parser.num_errors): print(parser.get_error(error)) return None config = builder.create_builder_config() profile = builder.create_optimization_profile() input_shape_min = (1,) input_shape_max = (batch_size,) profile.set_shape("input_ids", min=input_shape_min, opt=(batch_size//2,), max=input_shape_max) profile.set_shape("attention_mask", min=input_shape_min, opt=(batch_size//2,), max=input_shape_max) config.add_optimization_profile(profile) serialized_engine = builder.build_serialized_network(network, config) with open(engine_file_path, "wb") as f: f.write(serialized_engine) tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased') text = ["example sentence"] encoded_input = tokenizer(text, padding=True, truncation=True, return_tensors='pt') build_engine('./model.onnx', './engine.trt') ``` 此脚本首先定义了一个 `build_engine` 函数用于从给定的 ONNX 文件构建 TensorRT 引擎文件;接着实例化了一个 HuggingFace 的 BERT Tokenizer 对输入文本进行了编码处理最后调用了上述方法完成整个流程[^4]。 #### 性能评估与实际效果 利用 TensorRT 可以极大地改善 LLM 推理阶段的表现指标比如延迟时间以及每秒查询数量(QPS),尤其是在 GPU 平台上更是如此。例如,在某些测试条件下相比原始 PyTorch 版本能够获得超过两倍以上的增益比率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值