加快Tensorrt的速度

时间:2019-06-04 09:42:39

标签: tensorflow tensorrt

我有Openpose的Tensorflow graph

使用convert-to-uff命令将图形转换为uff格式。

输出为

NOTE: UFF has been tested with TensorFlow 1.12.0. Other versions are not guaranteed to work
UFF Version 0.6.3
=== Automatically deduced input nodes ===
[name: "image"
op: "Placeholder"
attr {
  key: "dtype"
  value {
    type: DT_FLOAT
  }
}
attr {
  key: "shape"
  value {
    shape {
      dim {
        size: -1
      }
      dim {
        size: -1
      }
      dim {
        size: -1
      }
      dim {
        size: 3
      }
    }
  }
}
]
=========================================

=== Automatically deduced output nodes ===
[name: "Openpose/concat_stage7"
op: "ConcatV2"
input: "Mconv7_stage6_L2/BiasAdd"
input: "Mconv7_stage6_L1/BiasAdd"
input: "Openpose/concat_stage7/axis"
attr {
  key: "N"
  value {
    i: 2
  }
}
attr {
  key: "T"
  value {
    type: DT_FLOAT
  }
}
attr {
  key: "Tidx"
  value {
    type: DT_INT32
  }
}
]
==========================================

Using output node Openpose/concat_stage7
Converting to UFF graph
No. nodes: 463
UFF Output written to cmu/cmu_openpose.uff

我怎么知道转换正确并且所有节点都转换了?

问题在于运行Tensorrt引擎时速度没有提高/

我使用了Tensorrt 5.1.5 GA。

3 个答案:

答案 0 :(得分:1)

  

TensorRT通过结合层和优化来优化网络   选择内核以改善延迟,吞吐量和电源效率   和内存消耗。如果应用程序指定,它将   进一步优化网络以降低精度,进一步   提高性能并减少内存需求。

TensorRT开发人员指南中所述,它不仅可以通过以较低的精度运行,而且可以通过组合层并优化内核选择来改善DL模型。也可以。

如果您的GPU不支持混合精度,这并不意味着TensorRT不可用。 TensorRT将进行层融合,并运行各种内核以选择最有效的内核。

如果看不到任何改善,可能还有其他原因。也许是您使用 cmu / cmu_openpose.uff 引擎的方式。

答案 1 :(得分:1)

您对tensorRt的理解不正确。 tensorRt推理可能比tensorflow推理快的主要原因是:

  1. 积极地将多个层内核融合到一个内核中。即https://miro.medium.com/max/1155/0 * 7WA6t51EZ46355m6。
  2. 自动调整并根据您的输入大小选择最快的内核实现。
  3. 减少的精度推断。

如果您的网络有大量内存密集型操作:tf.slice,tf.split,tf.concat或许多元素操作(例如tf.exp(tf.exp( a + b - c)),则几乎无法完成tensorRt,因为​​未实现融合内核(无法融合两个连续的exp ops),或者几乎没有针对内存操作进行优化。

也就是说,这还取决于模型的输入大小。 启动cuda内核会产生开销(例如0.1毫秒)。如果输入大小是10x10而不是1000x1000,则与内核启动时间相比,计算时间微不足道。如果所需的计算量很小,那么使用tensorRt不会带来很多收益。

我转换了您的模型,并在TitanXp(FP32)上使用TensoRt5.1.5对其进行了推断。这是我得到的:

B=1 TensorRT avg per image 0.4569686s over 1000 iter.
B=1 Tensorflow avg per image 0.5385810s over 1000 iter.

图片大小为1x3x1200x1920(批处理x通道x高度x宽度)。

答案 2 :(得分:0)

我对TensorRT进行了更多的阅读和理解。 对于那些有同样问题的人,让我描述一下我的理解。如果我的理解有误,请发表评论。

我的uff转换很好。没错我检查了Tensorboard上的图形,所有输入/输出都很好。

我的GPU是Quadro P4000。该图形卡仅支持精度FP32。

TensorRT的处理速度不会比使用FP32在GPU上运行Tensorflow更快,除非graphsurgeon修改了图形。

优点是将TensorRT引擎转换为FP16或INT8格式。然后可以看到使用TensorRT的优势。

在FP32格式中,与在GPU上运行的Tensorflow相比,使用TensorRT没有任何优势。