sdc17 / UPop

[ICML 2023] UPop: Unified and Progressive Pruning for Compressing Vision-Language Transformers.

Home Page:https://dachuanshi.com/UPop-Project/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

你好,我想询问一些关于微调方面的问题

HaoFYu opened this issue · comments

我希望对BLIP模型进行剪枝,并在自己的项目数据集上进行微调,我是不是应该在retrain阶段计算loss时选用自己的数据集进行微调。
以及后续还应该在哪些参数上进行调整,或者还有什么策略可以提升微调效果。
刚刚接触这方面的研究,希望能得到您的指点,非常感谢。

您好,可以使用自己的数据集在retrain阶段进行微调。也可以在BLIP本来的数据集上search和retrain完,再拿自己的数据集微调。
如果是在BLIP模型上剪枝,使用代码和脚本里提供的对于BLIP剪枝的默认参数即可。
如果时间允许,可以多跑一些retrain的epoch,效果应该会好些。

非常感谢,另外如果采用单张4090进行压缩,和log中的时间记录相差会有多大

单卡与单卡比较速度应该是相近的,但是log中是用多卡训练的。
只用单卡4090的话,相比log可能需要5倍左右或者再多一点的时间。

您好,谢谢您的解答,对我帮助很大。
完整search后再在retrain中微调的方法对时间要求太大,我能否通过如下代码来加载您剪枝后的checkpoint

model = blip_vqa(client=client, pretrained='', image_size=config['image_size'], 
                            vit=config['vit'], vit_grad_ckpt=config['vit_grad_ckpt'], vit_ckpt_layer=config['vit_ckpt_layer'],
                            evaluate=True)
model.prune_if_compressed(client, config['pretrained'])

并通过如下代码(其中train_loader是我自己的数据集)达到微调的目的

for epoch in range(0, config['max_epoch']):
        if args.distributed:
            train_loader.sampler.set_epoch(epoch)
            
cosine_lr_schedule(optimizer, epoch, config['max_epoch'], config['init_lr'], config['min_lr'])          
train_stats = train(model, train_loader, optimizer, epoch, device, config, scaler=scaler) 

可以的,直接load剪枝后的checkpoint就不用search了

请问amp参数代表什么意义呢?
parser.add_argument('--amp', action='store_true')

amp=automatic mixed precision 自动混合精度 readme里有写