动态形状模式在TF-TRT中利用TensorRT的动态形状特性来提高网络的转换率并高效处理具有未知输入形状的网络。此问题跟踪了通过TF-TRT使TRT的动态形状模式得以实现的工作。
谁将从这个功能中受益?
以下推理问题的转换率和性能将得到改善:
- 具有未知输入形状的网络(例如完全卷积目标检测网络)
- 图中Tensor的第一个(批次)维度发生变化的网络(例如BERT)
- 具有子图的网络,其中Tensor的非相同第一维度
此外,内存使用量也将得到改善:要处理具有不同形状的输入Tensor(例如图像大小、序列长度),目前需要为每个输入单独创建TRT引擎。使用动态形状模式,单个引擎可以处理各种输入形状。
这会改变当前的API吗?如何?
为了启用/禁用动态形状模式并提供选择优化配置文件的方法,一些转换参数将需要进行必要的更改。
第1阶段
此工作的第一阶段是基本脚手架,以使TF-TRT转换器可以使用TRT的动态形状API。
- 添加隐式批实验Add implicit batch experimental #34293
- 启用显式批模式Enable TF-TRT explicit batch mode #36379
- 改进绑定索引查询Improve TensorRT binding index query #36434
- 添加绑定大小规范Add TensorRT binding size dimension specification #36435
- 定义具有动态形状的网络Define TensorRT network with dynamic shapes #36439
- 添加优化配置文件Add TensorRT optimization profiles #36660
- 执行上下文管理Execution context management for TensorRT profiles #36664
- TensorRT配置文件生成模式TensorRT profile generation mode #36729
第2阶段
为MobileNet、ResNet、Bert等使用的ops启用动态形状模式。这包括改进转换器以及增加它们的单元测试覆盖。请注意,在此阶段,动态形状模式仍处于实验阶段。
- 重构ExecuteTrtEngine Refactor ExecuteTrtEngine. #38118
- 在TRT opconverter测试中使用统一内存Use Unified Memory in TRT opconverter tests #38124
- ConvertSqueeze Test Squeeze op converter in dynamic shape mode #38146
- ConvertUnary, ConvertRsqrt TF-TRT test ConvertUnary in dynamic shape mode. #39153
- ConvertTranspose TF-TRT ConvertTranspose in dynamic shape mode #39151
- ConvertActivation, ConvertLeakyRelu TF-TRT test activation converter #39155
- BiasAdd - ConvertBiasAdd TF-TRT enable BiasAdd op in dynamic shape mode #39156
- Conv2D, DepthWiseConv2dNative TF-TRT Conv2d op conversion dynamic shape mode #39204
- ConvertConv2dBackPropInput TF-TRT Enable Conv2DBackpropInput conversion in explicit batch mode #47840
- ConvertPack TF-TRT Pack op conversion in dynamic shape mode #39859
- ConvertReshape TF-TRT Improve reshape op converter #40545
- ConvertExpandDims TF-TRT ExpandDims converter dynamic shape mode #39282
- ConvertSlice, ConvertStridedSlice TF-TRT Slice op converters explicit batch mode #40736
- ConvertGather TF-TRT GatherV2 op conversion dynamic shape mode #39848
- ConvertMatMul and ConvertBatchMatMul TF-TRT Improve matrix multiplication conversion and enable dynamic shape mode #47215
- ConvertBinary TF-TRT test Binary op conversion in dynamic shape mode #39785
- ConvertSquaredDifference TF-TRT test SquaredDiff op conversion in dynamic shape mode #39758
- ConvertReduce TF-TRT reduction op converter tests #40201
- ConvertFusedBatchNorm TF-TRT test FusedBatchNorm op converter #40179
- ConvertSoftMax TF-TRT Dynamic shape mode test for Softmax op converter #47039
- ConvertShape Add TF-TRT converter for Shape op #39990
- ConvertPool TF-TRT Improve test coverage of pool op converters #40184
- 更新相关的Python集成测试:Unary_test.py, Batch_matmul_test.py, biasadd_matmul_test.py, Conv2d_test.py, reshape_traspose_test.py
第3阶段
这是第2阶段的直接延续。确保所有op转换器支持动态形状模式并对其进行测试。我们有近20个转换器需要更新和测试。大部分工作是提高测试覆盖率。
- ConvertSquare [TFTRT] Add Dynamic Shape Testing for ConvertSquare #40483
- ConvertClipByValue [TFTRT - Dynamic Shape Phase 3] Add Dynamic Shape Testing for ConvertClipByValue #45589
- ConvertPad TF-TRT ConvertPad in dynamic shape mode #45597
- ConvertResize [TFTRT - Dynamic Shape Phase 3] Add Dynamic Shape Testing for ConvertResize & Various TF2TRT Node Convert Unittest Improvements #46376
- ConvertArgMinMax [TFTRT - Dynamic Shape Phase 3] Add Dynamic Shape Testing for ConvertArgMinMax #45862
- ConvertQuantize TF-TRT Test ConvertQuantize in dynamic shape mode #45599
- ConvertTopK TF-TRT Test ConvertTopK in dynamic shape mode #46299
- ConvertUnpack [TFTRT] Add Dynamic Shape Testing and fix Explicit Batch Mode for ConvertUnpack #48049
- ConvertAddN [TFTRT - Dynamic Shape Phase 3] Add Dynamic Shape Testing for ConvertAddN and DebugString templated for nested numerical vectors #46675
- ConvertConcat x
7条答案
按热度按时间kcrjzv8t1#
你好,关于“在图中(例如BERT)Tensor的第一个(批次)维度发生变化的网络”的问题。
为什么在图中第一个维度会发生变化?我假设一旦确定了批量大小,BERT图中的形状就不会发生变化。
vdzxcuhz2#
为什么图中的第一维度会发生变化?
有些网络在进行重塑操作时,会改变第一维度。这样做是为了更方便地表达某些操作,通常在输出之后再次重塑以获得预期的批量大小。一个例子是BERT TF1模型。
TF-TRT的动态形状特性可以改进这类网络的TRT转换。
dphi5xsq3#
你好,@tfeher,现在的tf-trt dynamic_batch是否支持被划分为多个trt子图的情况?我们应该如何设置内部子图的最小值、最大值和优化器的形状信息?
bjp0bcyl4#
can tf-trt dynamic_batch支持现在被划分为多个trt子图的情况吗?
是的,动态形状模式支持具有多个TRT子图的图形。有一个已知的问题tensorflow/tensorrt#251,如果trt_engine_op试图输出形状Tensor,就会发生这个问题。否则它应该可以工作。
我们应该如何设置内部子图的最小值、最大值和优化器的形状信息?
您只需要设置模型输入的形状信息。从这些信息中,我们可以计算图中任何Tensor的大小,并为内部TRT子图设置输入形状信息(
trt_engine_ops
)。exdqitrt5#
PR for Conv2dBackpropInput #51468
bvn4nwqk6#
你好,
感谢你打开这个问题。由于这个问题已经开放了很长时间,这个问题的代码/调试信息可能与当前代码库的状态不相关。此外,已提出的PR已合并,更改已反映。
#55166
Tensorflow团队正在不断通过修复错误和添加新功能来改进框架。我们建议你尝试使用最新版本的TensorFlow version,并使用最新的兼容硬件配置,这可能会潜在地解决该问题。如果你仍然遇到问题,请创建一个新的GitHub issue,附上你的最新发现以及所有有助于我们调查的调试信息。
请按照release notes了解Tensorflow空间中正在发生的最新发展。
svmlkihl7#
这个问题已经过期,因为它已经开放了7天,没有活动。如果没有进一步的活动发生,它将被关闭。谢谢。