我正在尝试加速分段模型(unet-mobilenet-512x512)。我将我的tensorflow模型转换为具有FP16精度模式的tensorRT。而且速度比我预想的要低。在优化之前,我使用 .pb 冻结图进行推理时的速度为 7FPS。在tensorRT oprimization之后我有14FPS。
这是 Jetson NX 网站上的基准测试结果,
您可以看到,unet 256x256 分割速度为 146 FPS。我想,在最坏的情况下,我的unet512x512的速度应该慢4倍。
这是我使用 TensorRt 优化张量流保存模型的代码:
import numpy as np
from tensorflow.python.compiler.tensorrt import trt_convert as trt
import tensorflow as tf
params = trt.DEFAULT_TRT_CONVERSION_PARAMS
params = params._replace(
max_workspace_size_bytes=(1<<32))
params = params._replace(precision_mode="FP16")
converter = tf.experimental.tensorrt.Converter(input_saved_model_dir='./model1', conversion_params=params)
converter.convert()
def my_input_fn():
inp1 = np.random.normal(size=(1, 512, 512, 3)).astype(np.float32)
yield [inp1]
converter.build(input_fn=my_input_fn) # Generate corresponding TRT engines
output_saved_model_dir = "trt_graph2"
converter.save(output_saved_model_dir) # Generated engines will be saved.
print("------------------------freezing the graph---------------------")
from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2
saved_model_loaded …Run Code Online (Sandbox Code Playgroud) 我使用 Debian 安装在我的 VM 上安装了 TensorRT。如果我运行“dpkg -l | grep TensorRT”,我会得到预期的结果:
ii graphsurgeon-tf 5.0.2-1+cuda10.0 amd64 GraphSurgeon for TensorRT package
ii libnvinfer-dev 5.0.2-1+cuda10.0 amd64 TensorRT development libraries and headers
ii libnvinfer-samples 5.0.2-1+cuda10.0 all TensorRT samples and documentation
ii libnvinfer5 5.0.2-1+cuda10.0 amd64 TensorRT runtime libraries
ii python3-libnvinfer 5.0.2-1+cuda10.0 amd64 Python 3 bindings for TensorRT
ii python3-libnvinfer-dev 5.0.2-1+cuda10.0 amd64 Python 3 development package for TensorRT
ii tensorrt 5.0.2.6-1+cuda10.0 amd64 Meta package of TensorRT
ii uff-converter-tf 5.0.2-1+cuda10.0 amd64 UFF converter for TensorRT package
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试在 python …
我有两个 GPU。我的程序使用 TensorRT 和 Tensorflow。
当我只运行 TensorRT 部分时,没问题。当我与 Tensorflow 部分一起运行时,出现以下错误
[TensorRT] ERROR: engine.cpp (370) - Cuda Error in ~ExecutionContext: 77 (an illegal memory access was encountered)
terminate called after throwing an instance of 'nvinfer1::CudaError'
what(): std::exception
Run Code Online (Sandbox Code Playgroud)
问题是当 Tensorflow 会话开始时如下
self.graph = tf.get_default_graph()
self.persistent_sess = tf.Session(graph=self.graph, config=tf_config)
Run Code Online (Sandbox Code Playgroud)
它将两个 GPU 加载为
2019-06-06 14:15:04.420265: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6965 MB memory) -> physical GPU (device: 0, name: Quadro P4000, pci bus id: 0000:04:00.0, compute capability: 6.1)
2019-06-06 14:15:04.420713: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] …Run Code Online (Sandbox Code Playgroud) 我遇到了有关 TensorRT 和 Tensorflow 的问题。我正在使用 NVIDIA jetson nano,并尝试将简单的 Tensorflow 模型转换为 TensorRT 优化模型。我使用的是tensorflow 2.1.0和python 3.6.9。我尝试使用NVIDIA 指南中的代码示例:
from tensorflow.python.compiler.tensorrt import trt_convert as trt
converter = trt.TrtGraphConverterV2(input_saved_model_dir=input_saved_model_dir)
converter.convert()
converter.save(output_saved_model_dir)
Run Code Online (Sandbox Code Playgroud)
为了测试这一点,我从tensorflow网站上获取了一个简单的例子。要将模型转换为 TensorRT 模型,我将模型保存为“savedModel”并将其加载到 trt.TrtGraphConverterV2 函数中:
#https://www.tensorflow.org/tutorials/quickstart/beginner
import tensorflow as tf
from tensorflow.python.compiler.tensorrt import trt_convert as trt
import os
#mnist = tf.keras.datasets.mnist
#(x_train, y_train), (x_test, y_test) = mnist.load_data()
#x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
#tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10)
])
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy']) …Run Code Online (Sandbox Code Playgroud) 能够将 pytorch 模型转换为 onnx 并使用 pytorch 验证 onnx 输出。它工作正常。但是当我尝试将 onnx 转换为 tensorrt 引擎时,它在 onnx 解析器失败并返回此错误。
[TensorRT] 错误:INVALID_ARGUMENT:getPluginCreator 找不到插件 ScatterND 版本 1
Onnx 版本:1.6.0 Tensorrt 版本:7.1.3.4
任何人都可以在这里提供帮助,如何在 python 中添加 ScatterND 插件以及如何使用它?有没有其他方法可以解决这个问题?
提前致谢。
centernet_resnet50_v2_512x512_kpts_coco17_tpu-8我正在Nvidia Tesla P100上使用张量流对象检测模型来提取边界框和关键点,以检测视频中的人物。使用tensorflow.org 上的预训练数据,我每秒能够处理大约 16 帧。有什么方法可以提高该模型的评估速度吗?以下是我一直在研究的一些想法:
label_map似乎并没有提高性能。model_builder我发现性能有所下降。object-detection tensorflow tensorrt object-detection-api tensorflow2.0
我们当前的流程:Conversation of tf2-> onnx-> TensorRT(所有16和32和8位选项)
是否有像https://github.com/lutzroeder/netron (或任何其他方式)这样的现有工具来查看 的输出模型TensorRT?
我正在尝试将非常大的图像输入 Triton 服务器。我需要将输入图像分成补丁并将补丁一个一个地输入到张量流模型中。图像大小可变,因此每次调用的补丁数 N 都是可变的。
我认为调用以下步骤的 Triton 集成模型可以完成这项工作:
但是,为此,我必须编写一个config. pbtxt具有1:N和N:1关系的文件,这意味着集成调度程序需要多次调用第二步,并使用聚合输出调用第三步。
这是可能的,还是我需要使用其他技术?
我正在尝试在 C++ 中运行 TensorRT 推理。有时,当尝试构建新引擎或从文件加载引擎时,代码会崩溃。它偶尔会发生(有时运行没有任何问题)。我按照以下步骤准备网络:
initLibNvInferPlugins(&gLogger.getTRTLogger(), "");
if (mParams.loadEngine.size() > 0)
{
std::vector<char> trtModelStream;
size_t size{0};
std::ifstream file(mParams.loadEngine, std::ios::binary);
if (file.good())
{
file.seekg(0, file.end);
size = file.tellg();
file.seekg(0, file.beg);
trtModelStream.resize(size);
file.read(trtModelStream.data(), size);
file.close();
}
IRuntime* infer_Runtime = nvinfer1::createInferRuntime(gLogger);
if (mParams.dlaCore >= 0)
{
infer_Runtime->setDLACore(mParams.dlaCore);
}
mEngine = std::shared_ptr<nvinfer1::ICudaEngine>(
infer_Runtime->deserializeCudaEngine(trtModelStream.data(), size, nullptr), samplesCommon::InferDeleter());
gLogInfo << "TRT Engine loaded from: " << mParams.loadEngine << endl;
infer_Runtime->destroy();
if (!mEngine)
{
return false;
}
else
{
return true;
}
}
auto builder = SampleUniquePtr<nvinfer1::IBuilder>(nvinfer1::createInferBuilder(gLogger.getTRTLogger())); …Run Code Online (Sandbox Code Playgroud) 我想将 detectorron2 模型转换为另一个深度学习框架,即 PyTorch、TensorFlow 或 ONNX。我该如何进行这种转换?
cfg我可以使用(我相信这意味着 detectorron2 行话中的配置)对 detectorron2 模型进行推理。
目标是最终在 Nvidia Jetson 主板上运行 Detectron2 模型。因此,目标是转换模型。
tensorrt ×10
tensorflow ×6
onnx ×3
python ×3
pytorch ×2
c++ ×1
cuda ×1
detectron ×1
linux ×1
python-3.x ×1
tritonserver ×1