之前序列化没有过多注意engine的大小问题,最近循环对一个模型序列化,
发现大小会变化
。不过经过验证,
并不影响前向的推理结果
。
经过查阅,找打这个解释
链接
,可能国内打不开该网页。同样的现象:大小不同,但结果一致。
官方的解释:序列化的时候,依赖当前的机器状态【GPU, OS/kernel, CPU, system load, available memory, etc】
之前序列化没有过多注意engine的大小问题,最近循环对一个模型序列化,发现大小会变化。不过经过验证,并不影响前向的推理结果。经过查阅,找打这个解释链接,可能国内打不开该网页。同样的现象:大小不同,但结果一致。官方的解释:序列化的时候,依赖当前的机器状态【GPU, OS/kernel, CPU, system load, available memory, etc】更加详细的解释:通常,由TensorRT构建器由给定INetworkDefinition生成的CUDA引擎可能取决于各种
npm install --save @gd-com/utils
举个例子看看 !
const gdCom = require ( '@gd-com/utils' ) // var { GdBuffer } = require('@gd-com/utils')
const test1 = gdCom . putVar ( 8 )
const lengthBuffer = Buffer . alloc ( 4 )
lengthBuffer . writeUInt32LE ( test1 . length , 0 )
const finalBuffer = Buffer . concat ( [ lengthBuffer
Pytorch2
Tensor
RT
将Pytorch模型部署到
Tensor
RT
的一个简单用法,技术路线为“pytorch model-->
onnx
file-->
Tensor
RT
engine
”。
当前仅针对
ONNX
和
Tensor
RT
支持OP可进行转换,如有不支持的OP需编写插件。
News:
2020.12.10: 更新t
rt
_conve
rt
or.py脚本,使之适用于T
RT
7;
软件环境:
Tensor
RT
7.0.0.11
Pytorch1.2
PIL6.2.1
numpy1.17.4
Linux_x86_64
CUDA10.0
CUDNN7.5.0
当前支持:
Tensor
RT
FP32
Tensor
RT
FP16
Tensor
RT
INT8
使用方法:
从Pytorch模型到
ONNX
:修改并使用pytoch_to_
onnx
.py脚本转
ONNX
,或者独自进行转换;
利用自行提供的或
2、
Tensor
RT
发布的模型需要在相同GPU算力(compute capability)的情况下使用
否则会导致compute capability不匹配
问题
,例如算力7.0发布的模型不能在7.5上用。
查询显卡算力:CUDA GPUs | NVIDIA Developer
Tensor
RT
得到的CUDA
引擎
序列化
以后模型
大小
不一样。
我是从caffemodel解析
生成
的
Tensor
RT
-
engine
,发现同一个caffemodel得到的
Tensor
RT
-
engine
大小
不一,
大小
每次相差几到几百KB,但是模型的检测结果
一致
。 疑问在于,优化过程应该不存在随机的过程,所以这个模型体积
大小
的变化从何而来呢?
有人遇到了类似的
问题
,官方给了解答(需要梯子),见下图
总的来说,
生成
CUDA-
engine
的时候,结合了你的GPU, os/kernel,cpu, 系统负载,
多进程CPU占用低,主要是预处理的时间过少,Python 进程分发任务开销对于我们的ms级应用不可忽视。
对比为batch=8,进程、线程为8,时间均为8张时间,循环1000次测试。
多线程,平均为8.5ms(每千次次变动7.5-9.5S,近乎100%占用);
多进程,平均为19ms(15-21ms);
问题
描述:
最近进行把TF的模型转化为UFF文件部署到
Tensor
RT
。在进行测试的时候发现一个
问题
,同一个数据使用T
RT
进行推理,但是每次结果都不一样。输出的结果本应是softmax算子输出结果, 但是输出的结果看着都是随机的,而且数值求和结果非1,而是有的非常大,有的非常小。
排查了一整天发现是因为我的日志头文件导入的顺序导致这个
问题
。
#include "easylogging++.h"
#include "common.h"
#include "buffers.h"
#include "Nv
Ubuntu18.04 + cuda10.0 + python3.7.6 + pytorch1.4.0 +
tensor
rt
7.0.0.11
二、
onnx
模型导入
tensor
rt
生成
优化
engine
找到
Tensor
RT
的安装目录,里面有一个t
rt
exec工具,完整路径:/path/to/
Tensor
RT
-7.0.0.11/bin/t
rt
exec。这个工具可以直接
生成
引擎
,不需要写代码,终端命令:
# --
onnx
:
onnx
模型路径;--save
Engine
: 将要保存
engine
的路径;--v
关于
tensor
RT
中遇到的几个
问题
一、运行同一个程序,前后两次的运行结果不一样
例如运行
tensor
RT
-SSD代码,同样的测试图片,检测出来的目标框会有轻微的抖动,但是目标还是能检测出来,不会影响精度。
二、相同的代码,相同的模型,相同的测试图片,在不同的平台上结果不一样
我在pc上的gtx1080显卡运行
tensor
RT
代码,全部调试通过之后移植到tx2平台上运行,却发现在tx2平台上的检...
FP 16量化推理的结果不
一致
的原因
(抛砖引玉)
Tensor
RT
的FP16不得劲?怎么办?在线支招!
模型中某一层的计算FP 16因为动态范围和精度不够,导致某个OP节点的计算值溢出。迁一发而动全身,整个模型后面的所有层都崩塌了。
Tensor
RT
只是加速,对精度有影响吗?
Tensor
RT
有多个方式进行inference加速,一个是layer的融合,这个是没有精度损失的;另外还可以采用低精度的FP 16 INT 8计算,FP 16基本没有精度损失,INT 8需要做量化,这时候会有很高的加速,精度损失也很
原因:springboot在进行
序列化
和反序列时对字段进行了处理。
解决方法:在字段中加上注解@JsonPrope
rt
y,返回结果集就正常了,如下:
@JsonPrope
rt
y("dIp")
private String dIp;