Skip to content

DoubleBirdsU/DeepLearning

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Deep Learning

模型设计

激活函数和损失函数

模型设计时, 输出层的激活函数与损失函数需要配套, 否则可能导致训练失败.

输出层激活函数 损失函数 注释
logSoftmax NLLLoss 等价于 CrossEntropyLoss
valid CrossEntropyLoss

数据加载

PyTorch提速

原始文档:https://www.yuque.com/lart/ugkv9f/ugysgn

声明:大部分内容来自知乎和其他博客的分享,这里只作为一个收集罗列。欢迎给出更多建议。

预处理提速

changelog

  • 2019年11月29日:更新一些模型设计技巧和推理加速的内容,补充了下apex的一个介绍链接, 另外删了tfrecord,pytorch能用么?这个我记得是不能,所以删掉了(表示删掉:<)。
  • 2019年11月30日:补充MAC的含义,补充ShuffleNetV2的论文链接
  • 2019年12月02日:之前说的pytorch不能用tfrecord,今天看到https://www.zhihu.com/question/358632497下的一个回答,涨姿势了。
  • 2019年12月23日:补充几篇关于模型压缩量化的科普性文章

预处理提速

  • 尽量减少每次读取数据时的预处理操作,可以考虑把一些固定的操作,例如 resize ,事先处理好保存下来,训练的时候直接拿来用

  • Linux上将预处理搬到GPU上加速:

IO提速

训练策略

代码层面

  • torch.backends.cudnn.benchmark = True
  • Do numpy-like operations on the GPU wherever you can
  • Free up memory using del
  • Avoid unnecessary transfer of data from the GPU
  • Use pinned memory, and use non_blocking=False to parallelize data transfer and GPU number crunching

模型设计

  1. 来自 ShuffleNetV2 的结论:(内存访问消耗时间,memory access cost 缩写为 MAC
    • 卷积层输入输出通道一致:卷积层的输入和输出特征通道数相等时 MAC 最小,此时模型速度最快
    • 减少卷积分组:过多的 group 操作会增大 MAC ,从而使模型速度变慢
    • 减少模型分支:模型中的分支数量越少,模型速度越快
    • 减少 element-wise 操作:element-wise 操作所带来的时间消耗远比在 FLOPs 上的体现的数值要多,因此要尽可能减少 element-wise 操作(depthwise convolution也具有低 FLOPs 、高 MAC 的特点)
  1. 其他:
    • 降低复杂度:例如模型裁剪和剪枝,减少模型层数和参数规模
    • 改模型结构:例如模型蒸馏,通过知识蒸馏方法来获取小模型

推理加速

  1. 半精度与权重量化:在推理中使用低精度(FP16 甚至 INT8 、二值网络、三值网络)表示取代原有精度(FP32)表示:
    • TensorRT是 NVIDIA 提出的神经网络推理(Inference)引擎,支持训练后 8BIT 量化,它使用基于交叉熵的模型量化算法,通过最小化两个分布的差异程度来实现
    • Pytorch1.3 开始已经支持量化功能,基于 QNNPACK 实现,支持训练后量化,动态量化和量化感知训练等技术
    • 另外 Distiller 是 Intel 基于 Pytorch 开源的模型优化工具,自然也支持 Pytorch 中的量化技术
    • 微软的 NNI 集成了多种量化感知的训练算法,并支持 PyTorch/TensorFlow/MXNet/Caffe2 等多个开源框架
  1. 网络 inference 阶段 Conv 层和 BN 层进行融合

时间分析

  • Python 的 cProfile 可以用来分析。(Python 自带了几个性能分析的模块: profilecProfilehotshot,使用方法基本都差不多,无非模块是纯 Python 还是用 C 写的)

项目推荐

  • 基于 Pytorch 实现模型压缩(1、量化:8/4/2 bits(dorefa)、三值/二值(twn/bnn/xnor-net);2、剪枝:正常、规整、针对分组卷积结构的通道剪枝;3、分组卷积结构;4、针对特征A二值的BN融合):https://github.com/666DZY666/model-compression

参考链接

上一篇

PyTorch使用LMDB数据库加速文件读取

下一篇

Pytorch有什么节省内存(显存)的小技巧?

训练模型

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages