问题标签 [tensorrt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1922 浏览

android - 在移动设备上运行循环神经网络(推理)的最快方法

我所拥有的:Tensorflow 中经过训练的循环神经网络。

我想要的:一个可以尽可能快地运行这个网络的移动应用程序(仅限推理模式,无需训练)。

我相信有多种方法可以实现我的目标,但我希望您提供反馈/更正和补充,因为我以前从未这样做过。

  1. 张量流精简版。Pro:直截了当,可在 Android 和 iOS 上使用。魂斗罗:可能不是最快的方法,对吧?
  2. 张量RT。Pro:非常快 + 我可以编写自定义 C 代码以使其更快。魂斗罗:用于 Nvidia 设备,所以在 Android 和 iOS 上运行并不容易,对吧?
  3. 自定义代码 + 库,如 openBLAS。Pro:可能非常快,并且有可能在 iOS 上的 Android 上链接到它(如果我没记错的话)。对比:循环神经网络有多大用处?它真的在 Android + iOS 上运行良好吗?
  4. 重新实现 Everything。我还可以用 C/C++ 重写整个计算,这对于循环神经网络来说应该不会太难。Pro:可能是最快的方法,因为我可以优化所有内容。反对:需要很长时间,如果网络发生变化,我也必须更新我的代码(尽管如果它真的是最快的,我愿意这样做)。另外,在 Android 上调用库 (C/C++) 的速度有多快?我是否受到 Java 接口的限制?

有关移动应用程序的一些详细信息。该应用程序将记录用户的声音,进行一些处理(如 Speech2Text)并输出文本。我不想找到“足够快”的解决方案,而是最快的选择,因为这将发生在非常大的声音文件上。所以几乎每一次速度改进都很重要。你有什么建议,我应该如何解决这个问题?

最后一个问题:如果我想雇人来帮助我,我应该寻找 Android/iOS-、Embedded- 或 Tensorflow- 类型的人吗?

0 投票
1 回答
716 浏览

tensorflow - 从子流程创建引擎时,TensorRT 创建异常

遇到从子进程运行 tensorrt 的问题。我不确定这是一个 tensorrt 错误还是我做错了什么。如果这是一个集成错误,我想知道这是否已经在 tensorflow 1.7 的新版本中得到解决。
这是错误的摘要以及如何重现它。

具有单个进程的工作TensorRT 示例 Python 代码:


trt.utils.uff_to_trt_engine()从子进程调用的非工作TensorRT 示例 Python 代码:

控制台错误消息:

0 投票
1 回答
267 浏览

tensorflow - tensorrt 没有找到 argparse

我已经安装了 tensorrt 3.0.4,但是当我尝试使用 tensorrt 3.0.4 安装 tensorflow 时,我得到了以下信息:

但奇怪的是pip showargparse 产生以下输出:

似乎找不到 argpase,而它们tensorrt也在uffroot/env/py3/lib/python3.5/site-packages

我该如何解决?

0 投票
1 回答
879 浏览

python - AttributeError:“模块”对象没有属性“from_tensorflow_frozen_model”

我正在尝试将我的 PB 模型转换为 Tenrorrt uff 模型以使其在 tx2 上工作。

我使用了来自 Nvidia 论坛的示例代码并尝试执行它。我知道这是一些与 python 包相关的问题,但我无法解决它

我收到以下代码的以下错误

我的环境变量:

0 投票
1 回答
482 浏览

python - 可以转换为 TensorRT 的 Tensorflow tf.abs() 替代品

我正在尝试将我的 Tensorflow 冻结模型转换为 NVIDIA TensorRT 引擎。我有 TensorRT 3 版本。TensorRT 不支持某些 Tensorflow 层/函数,例如tf.Cast等。我的模型使用该tf.abs()函数(编辑:实际上由 TensorRT 支持,但不由构建 TensorRT 引擎所需的 UFF 解析器支持),我有能力在将 tensorflow 检查点转换为冻结模型之前更改操作。

我需要换tf.abs()一个替代品。因此,我尝试在 Tensorflow 中进行以下 numpy 操作。

麻木:

Tensorflow:z是一个零张量,形状与x相同

我不确定如何继续,因为我需要将 tensorflow 返回的布尔掩码转换为整数掩码,以便将其与输入相乘,但tf.CastTensorRT 也不支持该操作。

编辑:问题实际上是 UFF 解析器不支持该abs功能,而 TensorRT 实际上支持它。在此处添加错误日志。

使用输出节点 generate_output/deprocess/add 转换为 UFF 图节点数:361 UFF 输出写入 data/tmp.uff UFFParser:解析 generate_output/generator/encoder_9/lrelu/mul/x UFFParser:解析 generate_output/generator/encoder_8/lrelu /mul/x UFFParser: 解析 generate_output/generator/encoder_7/lrelu/mul/x UFFParser: 解析 generate_output/generator/encoder_6/lrelu/mul/x UFFParser: 解析 generate_output/generator/encoder_5/lrelu/mul/x UFFParser: 解析 generate_output /generator/encoder_4/lrelu/mul/x UFFParser: 解析 generate_output/generator/encoder_3/lrelu/mul/x UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul/x UFFParser: 解析 image_tensor UFFParser: 解析 generate_output/load_images/preprocess /mul/y UFFParser: 解析 generate_output/load_images/preprocess/mul UFFParser:解析 generate_output/load_images/preprocess/sub/y UFFParser: 解析 generate_output/load_images/preprocess/sub UFFParser: 解析 generate_output/input_images/Reshape/shape UFFParser: 解析 generate_output/input_images/Reshape UFFParser: 解析 generator/encoder_1/conv/filter UFFParser:解析 generate_output/generator/encoder_1/conv/Conv2D UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul_1/x UFFParser: 解析 generate_output/generator/encoder_2/lrelu/Abs UFFParser:解析器错误:generate_output/generator/encoder_2/lrelu/Abs: Unary not supported for other non-constant node 无法解析 UFF解析 generate_output/input_images/Reshape/shape UFFParser: 解析 generate_output/input_images/Reshape UFFParser: 解析 generator/encoder_1/conv/filter UFFParser: 解析 generate_output/generator/encoder_1/conv/Conv2D UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul UFFParser:解析 generate_output/generator/encoder_2/lrelu/mul_1/x UFFParser:解析 generate_output/generator/encoder_2/lrelu/Abs UFFParser:解析器错误:generate_output/generator/encoder_2/lrelu/Abs:其他非常量节点不支持一元无法解析 UFF解析 generate_output/input_images/Reshape/shape UFFParser: 解析 generate_output/input_images/Reshape UFFParser: 解析 generator/encoder_1/conv/filter UFFParser: 解析 generate_output/generator/encoder_1/conv/Conv2D UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul UFFParser:解析 generate_output/generator/encoder_2/lrelu/mul_1/x UFFParser:解析 generate_output/generator/encoder_2/lrelu/Abs UFFParser:解析器错误:generate_output/generator/encoder_2/lrelu/Abs:其他非常量节点不支持一元无法解析 UFF解析 generate_output/generator/encoder_2/lrelu/mul UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul_1/x UFFParser: 解析 generate_output/generator/encoder_2/lrelu/Abs UFFParser: 解析器错误: generate_output/generator/encoder_2/lrelu/Abs : 其他非常量节点不支持一元 无法解析 UFF解析 generate_output/generator/encoder_2/lrelu/mul UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul_1/x UFFParser: 解析 generate_output/generator/encoder_2/lrelu/Abs UFFParser: 解析器错误: generate_output/generator/encoder_2/lrelu/Abs : 其他非常量节点不支持一元 无法解析 UFF

0 投票
1 回答
2777 浏览

python - 由于 UFF 解析器错误,TensorRT 引擎失败

我正在尝试将基于pix2pix 架构的 Tensorflow 冻结模型转换为 NVIDIA TensorRT 引擎。我有 TensorRT 3 版本。虽然 TensorRT 3 支持我的层,但其中一些不受 UFF 解析器的支持。我面临的问题是由于这条线:

mean, variance = tf.nn.moments(input, axes=[0, 1, 2], keep_dims=False)

内部操作之一是squared differenceTensorRT 不支持的,执行时返回以下错误:

转换为 UFF 图 警告:不支持 keep_dims,忽略...

警告:尚未为图层注册转换函数:SquaredDifference。

转换为自定义运算 SquaredDifference >

generate_output/generator/decoder_2/batchnorm/moments/SquaredDifference 名称:

“generate_output/generator/decoder_2/batchnorm/moments/SquaredDifference”

操作:“平方差”

输入:“generate_output/generator/decoder_2/batchnorm/Identity”

输入:“generate_output/generator/decoder_2/batchnorm/moments/StopGradient”

属性{

键:“T”

价值 {

类型:DT_FLOAT

}

}

回溯(最近一次通话最后):

文件“scripts/convert_plan.py”,第 71 行,在 data_type 中

文件“scripts/convert_plan.py”,第 22 行,frozenToPlan text=False,

文件“/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/conversion_helpers.py”,第 103 行,from_tensorflow_frozen_model return from_tensorflow(graphdef, output_nodes, **kwargs)

文件“/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/conversion_helpers.py”,第 75 行,在 from_tensorflow name="main")

文件“/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py”,第 64 行,convert_tf2uff_graph uff_graph,input_replacements)

文件“/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py”,第 51 行,在 convert_tf2uff_node op、name、tf_node、inputs、uff_graph、tf_nodes=tf_nodes)

文件“/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py”,第 28 行,convert_layer fields = cls.parse_tf_attrs(tf_node.attr)

文件“/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py”,第 177 行,在 parse_tf_attrs 中为 key,val 在 attrs.items()}

文件“/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py”,第 177 行,for key,val in attrs.items()}

文件“/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py”,第 172 行,在 parse_tf_attr_value 返回 cls.convert_tf2uff_field(code, val)

文件“/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py”,第 146 行,在 convert_tf2uff_field 返回 TensorFlowToUFFConverter.convert_tf2numpy_dtype(val)

文件“/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py”,第 74 行,在 convert_tf2numpy_dtype 返回 np.dtype(dt[dtype])

TypeError:列表索引必须是整数,而不是 AttrValue

我尝试tf.nn.moments用 2 种替代方法替换:

  1. mean = tf.reduce_mean(input, axis = [0, 1, 2], keep_dims=False)

    devs_squared = tf.multiply(input - mean, input - mean)

    variance = tf.reduce_mean(devs_squared, axis = [0, 1, 2], keep_dims=False)

虽然 TensorRT 3 都支持这些层,reduce_mean但 UFF 解析器不支持这些层,它会引发以下错误:

UFFParser:解析器错误:

generate_output/generator/encoder_2/batchnorm/Mean: 不支持 Reduce 算子

  1. 第二种方法:

    mean = tf.keras.backend.sum(input, axis = [0, 1, 2])

    div_factor_1 = input.get_shape().as_list()[0]*input.get_shape().as_list()[1]*input.get_shape().as_list()[2]

    mean = mean * (1 / div_factor_1)

    devs_squared = tf.multiply(input - mean, input - mean)

    variance = tf.keras.backend.sum(devs_squared, axis = [0, 1, 2])

    div_factor_2 = devs_squared.get_shape().as_list()[0]*devs_squared.get_shape().as_list()[1]*devs_squared.get_shape().as_list()[2]

    variance = variance * (1 / div_factor_2)

但是我再次遇到了 UFF 解析器错误:

UFFParser:解析器错误:generate_output/generator/encoder_2/batchnorm/Sum:不支持缩减运算符

我还在备用 2 中使用了 reduce_sum 而不是 keras.backend.sum,来遇到同样的错误。

0 投票
2 回答
1656 浏览

tensorflow - tensorflow 新 API:TensorRT create_inference_graph 错误

我有一个用于对象检测的自定义 Faster R-CNN 网络,我在其中定义了一些自定义运算符:nms并将roi_pooling其编译到.so文件中。该.so文件被包装,可以由 tensorflow 框架调用。

将 tensorflow 冻结图转换为.pb文件后,我使用以下代码:

但它报告了很多警告和错误:

这个错误的原因是什么?如何解决?谢谢。

0 投票
1 回答
743 浏览

python - TensorFlow 1.6 中的 SSD_MOBILENET V1 到 TensorRT

伙计们,

我有一个安装了 tensorflow 1.6 和 jetpack 3.2 (tensorrt 3.0) 的 Jetson TX2。我也安装了 UFF。如何将 ssd_mobilenet_v1 冻结图从 tensorflow 转换为等效的 tensorRT?

谢谢,

0 投票
6 回答
4905 浏览

c++ - 带有 TensorRT 的 C++ Tensorflow API

我的目标是在 C++ 应用程序中运行 tensorrt 优化的 tensorflow 图。我正在使用 tensorflow 1.8 和 tensorrt 4。使用 python api,我能够优化图形并看到很好的性能提升。

尝试在 c++ 中运行图形失败并出现以下错误:

Not found: Op type not registered 'TRTEngineOp' in binary running on e15ff5301262. Make sure the Op and Kernel are registered in the binary running in this process.

其他,非张量图工作。我在使用 python api 时遇到了类似的错误,但通过导入 tensorflow.contrib.tensorrt 解决了它。从错误中,我相当确定内核和操作没有注册,但我不知道如何在构建 tensorflow 后在应用程序中这样做。附带说明一下,我不能使用 bazel,但需要使用 cmake。到目前为止,我链接到libtensorflow_cc.soand libtensorflow_framework.so

有人能帮我一下吗?谢谢!

更新:使用 c 或 c++ api 加载_trt_engine_op.so不会在加载时抛出错误,但无法运行

0 投票
1 回答
503 浏览

tensorflow - tensorflow 宽线性模型推断 gpu 慢

我正在训练一个关于 tensorflow 的稀疏逻辑回归模型。这个问题专门针对推理部分。我正在尝试对 cpu 和 gpu 的推理进行基准测试。我在我当前的 GCE 盒子上使用 Nvidia P100 gpu(4 个芯片)。我是 gpu 的新手,很抱歉提出一些幼稚的问题。

该模型相当大~54k 操作(与 dnn 或 imagenet 模型相比,它被认为是大吗?)。当我记录设备放置时,我只看到 gpu:0 正在使用,其余的未使用?我在训练期间不做任何设备放置,但在推理期间我希望它以最佳方式放置和使用 gpu。我观察到的几件事:我的输入节点占位符(feed_dict)放在 cpu 上,所以我假设我的数据正在从 cpu 复制到 gpu?feed_dict 在幕后究竟是如何工作的?

1)如何将我想直接在 GPU 上运行预测的数据放置?注意:我的训练在具有多个 TB 的分布式 cpu 上运行,因此在训练期间我不能直接在我的图表中使用常量或变量,但我的推断我肯定可以有我想直接放在 gpu 上的小批量数据。我有办法做到这一点吗?2)由于我使用的是P100 gpu,我认为它与主机具有统一的内存,是否可以进行零拷贝并直接将我的数据加载到gpu中?我如何从 python、java 和 c++ 代码中做到这一点。目前我使用来自各种谷歌资源的 feed_dict,我认为这根本不是最佳的。3)是否有一些工具或分析器可以用来查看我何时分析代码,例如:

在 1)cpu 到 gpu 数据传输 2)会话运行开销 3)gpu 利用率(目前我定期使用 nvidia-smi 来监控 4)cpu 与 gpu 上的内核调用开销(我假设每次调用 sess.运行调用 1 个内核调用对吗?

我目前的基准测试结果:CPU:

一些值得注意的观察:随着批量大小的增加,我看到我的 gpu 利用率增加(它使用的唯一 gpu 达到 100%,有没有办法我可以告诉 tf 也使用其他 gpu)批量大小 200k 是我唯一看到的时间我幼稚的基准测试表明,与 cpu 相比,gpu 的增益很小。增加给定 epoch 的批大小对 cpu 和 gpu 的时间影响最小,直到批大小 <= 10k。但是在从 10k -> 100k -> 200k 增加批量大小之后,时间也增加得非常快,即对于给定的时期,让我们说 10 个批量大小为 10、100、1k、10k,cpu 时间和 gpu 时间保持相当稳定~5- gpu 为 7 秒,cpu 为 0.48-0.96 秒(这意味着 sess.run 的开销比计算图形本身的开销要高得多?),但是随着批量大小的进一步增加,计算时间会以更快的速度增加,即对于 epoch 10 100k-> 200k gputime 从 11 -> 19 秒增加,cpu 时间也翻倍,为什么会这样?即使我只有一个 sess.run 似乎更大的批量大小,但在内部它将它分成更小的批量并调用 sess.run 两次,因为 epoch 20 batch size 100k 与 epoch 10 batch 200k 更匹配。

我怎样才能进一步改进我的推理,我相信我没有以最佳方式使用所有 gpus。关于如何更好地进行基准测试以获得更好的 cpu-> gpu 传输时间和图形计算从 cpu 移动到 gpu 的实际加速,有什么想法吗?如果可能的话,直接将数据更好地加载到 gpu 中?我可以仅在推理期间将一些节点放置到 gpu 以获得更好的性能吗?关于量化或优化推理图的想法?

改进基于 gpu 的推理的更多想法。可能是基于 xla 的优化或 tensrort ?我希望有高性能的推理代码在 gpu 上运行这些计算,而应用程序服务器在 cpu 上运行。