我有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。
答案 0 :(得分:1)
TensorRT通过结合层和优化来优化网络 选择内核以改善延迟,吞吐量和电源效率 和内存消耗。如果应用程序指定,它将 进一步优化网络以降低精度,进一步 提高性能并减少内存需求。
如 TensorRT开发人员指南中所述,它不仅可以通过以较低的精度运行,而且可以通过组合层并优化内核选择来改善DL模型。也可以。
如果您的GPU不支持混合精度,这并不意味着TensorRT不可用。 TensorRT将进行层融合,并运行各种内核以选择最有效的内核。
如果看不到任何改善,可能还有其他原因。也许是您使用 cmu / cmu_openpose.uff 引擎的方式。
答案 1 :(得分:1)
您对tensorRt的理解不正确。 tensorRt推理可能比tensorflow推理快的主要原因是:
如果您的网络有大量内存密集型操作: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没有任何优势。