您的位置:首页 > 其它

TensorRT 深度学习前向推理简单介绍

2016-12-30 16:03 253 查看
二、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、支持更多的层
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  深度学习