tensorrt介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csuzhaoqinghui/article/details/82150314

TensorRT 处理流程 
基本处理过程:1>caffe model 转化 gie的model,或者从磁盘或者网络加载gie可用的model;2>运行GIE引擎(数据提前copy到GPU中);3>提取结果 

二、TensorRT介绍 
TensorRT 现在是inference 精度最高,速度最快的,而且在不断的改进过程中,在保证软件精度的同时,不断提高速度;TensorRT只能用来做Inference,不能用来做train; 
TensorRT V1不能和caffe 同时工作,Release-V2解决这个问题,内部测试已经没有问题。 
1、TensorRT的需要的文件 
需要的基本文件(不是必须的) 
1>网络结构文件(deploy.prototxt) 
2>训练的权重模型(net.caffemodel) 
TensorRT 2.0 EA版中的sampleMNISTAPI和TensorRT 1.0中的sampleMNISTGIE 几乎没有变化,就是不使用caffemodel 文件构建network 的例子。 
2、TensorRT支持的层 
Convolution: 2D 
Activation: ReLU, tanh and sigmoid 
Pooling: max and average 
ElementWise: sum, product or max of two tensors 
LRN: cross-channel only 
Fully-connected: with or without bias 
SoftMax: cross-channel only 
Deconvolution 
对于TensorRT 不支持的层,可以先将支持的层跑完,然后将输出作为caffe的输入,用caffe再跑,V1不支持TensorRT 和caffe同时工作,V2支持。(例子NVIDIA正在做,后期可能会上传github) 
3、TensorRT 处理流程 
基本处理过程:1>caffe model 转化 gie的model,或者从磁盘或者网络加载gie可用的model;2>运行GIE引擎(数据提前copy到GPU中);3>提取结果 
4、GIE code优化时有用的设置 
转化为giemodel有两种方式1>caffeToGIEModel ,2>参考sampleMNISTAPI自己构建GIE model. 
markOutput :标记某一层为输出层,每一层均可标记为输出 
MaxBatchSize/MaxWorkspaceSize:设置最大批量大小和最大工作空间,如下 
builder->setMaxBatchSize(maxBatchSize); 
builder->setMaxWorkspaceSize(16 << 20); 
MaxWorkspaceSize 设置小于需要的,则部分算法无法执行导致崩溃或结果不确定 
可以通过如下方式获得最大工作空间 
ICudaEngine* engine = builder->buildCudaEngine(*network); 
engine->getWorkspaceSize(); 
setMinFindIterations/setAverageFindIterations: 
When timing layers, the builder minimizes over a set of average times for layer execution. This parameter controls the number of iterations used in minimzation. 测试层的执行时间时,设置最小的迭代次数/平均迭代次数,(NVIDIA 给的建议是设置其一为2)

Severity::kINFO:信息等级

class Logger : public ILogger 

void log(Severity severity, const char* msg) override 

if (severity!=Severity::kINFO) //注释掉此行,会打印很多内部信息 
std::cout << msg << std::endl; 

} gLogger;

三、TensorRT Optimization 
使用了很多 优化网络和层计算的方法 
内存优化、网络优化,层合并,层删除以及GPU汇编指令,内部函数,提高GPU利用率,减少精度需求,cuDNN优化,根据不同的batchsize设置不同的计算模式或者GPU clock;卷积的优化,使用Winograd(提升3倍) 等算法或者特定硬件方式实现;

 批量处理尽可能并行处理,在cuda中 使用warp对齐,提高GPU命令命中率,除此还有CPU可以使用,CPU做一部分工作,GPU做一部分工作;
数据布局可以使用半精度FP16 , textute memory , 13% inference speedup 
网络优化中,网络的垂直融合,网络的水平融合,级联层可以删掉(concat) 
内部使用稀疏矩阵编码 
Ongoing new instruction set for inference, assembly implemented in GPU kernels 
四、roadmap(未来会有的功能) 
1、Define and implement unique functionality using the custom layer API;支持定制层 
2、支持更多的层

猜你喜欢

转载自blog.csdn.net/csuzhaoqinghui/article/details/82150314