VainF / Torch-Pruning

[CVPR 2023] Towards Any Structural Pruning; LLMs / SAM / Diffusion / Transformers / YOLOv8 / CNNs
https://arxiv.org/abs/2301.12900
MIT License
2.59k stars 318 forks source link

关于稀疏化操作 #162

Open yakexi-cmd opened 1 year ago

yakexi-cmd commented 1 year ago

请问作者有关一致性稀疏化训练的代码写在哪个文件夹里了呢? 是不是Learning Efficient Convolutional Networks through Network Slimming中的,也就是图4(b)的稀疏化训练的代码,不可以直接使用? 还是说图4(b)的稀疏化训练可以照常使用,之后在pruning的过程中会对前面稀疏的网络进行一致性操作?

VainF commented 1 year ago
  1. 一致稀疏的代码 https://github.com/VainF/Torch-Pruning/blob/d3562c01e84e10f89593e961eb05cd1d5b00b854/torch_pruning/pruner/algorithms/group_norm_pruner.py#L55
  2. 图4的(b)和(c)只是两种不同的稀疏方式, (b)独立稀疏每一层不考虑依赖,(c)则将存在依赖的参数一起稀疏.
yakexi-cmd commented 1 year ago

感谢您的回复~ https://github.com/jylink/yolov5-pruning/tree/9b039785efa1a6f6323cceb24815fa06fbf01b89 请问这个链接引用了您的depgraph方法,想和您确认一下,这位作者使用的稀疏化方法是不是和您的不一样?我只在里面看到了L1正则化相关内容(utils/loss.py中的sl_loss),似乎并没有找到关于层间一致性稀疏的代码内容 image

yakexi-cmd commented 1 year ago

image

VainF commented 1 year ago

DepGraph和稀疏化是相对独立的两个东西,前者是建模层和层之间依赖的,只负责把依赖找出来,至于怎么稀疏化全看您的算法怎么设计.

yakexi-cmd commented 1 year ago

请问我是否可以选用Learning Efficient Convolutional Networks through Network Slimming中的稀疏化方法,之后再使用您的Depgraph获取层间依赖关系,将不重要的网络剪掉?您的图4(b)和(c)想表达的意思是不是两者后面剪枝方法的不同?与稀疏化操作无关 image

yakexi-cmd commented 1 year ago

请问您的代码是否需要先进行稀疏化训练?还是可以直接使用Depgraph进行离线式的剪枝操作,在离线式操作过程中也包括了一致性稀疏吗?这里还是不太清楚流程,感谢您帮忙解答~

VainF commented 1 year ago

GroupNormPruner和BNScalePruner需要先稀疏,再剪枝; MagnitudePruner可以直接裁剪。

一致性的问题在稀疏训练里才会考虑,就是把一部分耦合的参数同时推到0。

yakexi-cmd commented 1 year ago

好滴,非常感谢,我再去学习一下您的代码,感谢您的耐心解答~

yakexi-cmd commented 1 year ago

请问main.py中使用到了pruner.regularize,调用了稀疏化,我查看了regularize函数没有返回值,请问调用regularize函数后,效果是通过什么形式返回的呢?

VainF commented 1 year ago

没有返回值,他直接更新了模型参数的梯度

yakexi-cmd commented 1 year ago

好滴明白啦,多谢~

yakexi-cmd commented 1 year ago

请问您的代码是否支持.pt结尾的权重文件训练?还是只能是.pth结尾?