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、支持更多的层