神经网络预测推理---TensorRT:  (比Tensorflow的推理快20倍)

1. Kernel融合: 横向融合(例如1*1卷积等), 纵向融合(卷积+bias+Relu),消除concatenate层(预分配输出缓存,跳跃式的写入);

2. 量化成FP16或者INT8: 减少显存占用,加快推理速度;

3. Auto-Tuning: 例如,对于卷积计算有若干种算法,TensorRT会根据输入数据大小、filter大小、tensor分布、batch大小等等参数针对目标平台GPU进行选择和优化。

4. 动态分配显存:使用时分配;减少显存分配次数,增加显存复用率;

训练使用cuDNN/cuBLAS/thrust

神经网络量化: (好处:模型和激活、梯度变小对显存占用节省;显存占用变小允许更大的batch,加快计算;计算加快;多机多卡间的通信量减少)

1. 训练时对gredient量化,减少网络传输,加快训练速度(1-bit quantization)

2. 预测模型量化,减少模型大小,使得能加载进内存或显存;计算时还是转成float计算;

3. 预测模型量化,输入的样本也量化,中间激活值也用量化的,INT8和INT8直接计算,计算也加速了;(可能要先跑小数据集确定激活值范围,才好量化之)

4. 训练Forward时也进行伪量化,让训练的模型尽量往减少Forward误差上靠拢,从而减少预测时的量化误差;

2016 ICLR: Deep Compression

1. 边的Pruning(剪枝):存成稀疏数组,计算使用cuSPARSE和MKL SPSPARSE库;下标使用diff法存储(类似倒排索引)

2. 训练阶段用INT8量化:用聚类来找每个编码的最优float值;重视max和min,因为大的w对最终结果影响大;

3. 哈夫曼编码实现压缩:量化编码后的w们,还可使用哈夫曼编码来减少bit数;

矩阵SVD分解:用2个小矩阵近似权重矩阵;效果损失较大;

pruning和量化,使网络size变小,除了省空间,也可加快infer速度,因为可增大缓存利用率(cache或shared-memory);

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐