Open DoctorDream opened 2 months ago
Hi @DoctorDream
这两个方式是可行的,先用更少的显存增大batch_size快速训练模型,然后再用更大的图片尺寸和更多特征图进行全量微调。
第一个方法在用的时候请注意要同时修改train_transform中的图片尺寸和模型输入参数中的min_size/max_size,前者是训练时候的数据增强,后者是推理时候的数据增强,把他们都修改成640*640对应的尺寸。
第二个方法不太推荐。return_indices会改变网络结构,导致预训练和微调时候的权重对不上,当然只加载匹配的权重来微调也是可以的。但用return_indices=(0, 1, 2, 3)也不会提升太多精度,还会大幅提升显存占用,我建议预训练和微调都直接用return_indices=(1, 2, 3)。
另外还可以使用混合精度训练,这样可以降低显存,从而使用更大的batch_size。在训练命令后面加上--mixed-precision
参数:
CUDA_VISIBLE_DEVICES=0 accelerate launch main.py --mixed-precision bf16
# 或者
CUDA_VISIBLE_DEVICES=0 accelerate launch main.py --mixed-precision fp16
请问“修改train_transform中的图片尺寸”,在哪个文件修改呢?另外加上了--mixed-precision fp16 但是提示“--mixed_precision
was set to a value of 'no'
”
train_transform都定义在transforms/presets.py
文件中,这里有一些我常用的数据增强,其中有resize相关的变换会改变图像尺寸,请相应地修改resize后的图像尺寸,确保他们和模型中的min_size、max_size大致匹配上。
--mixed-precision fp16的提示不用理会,他警告是因为accelerate默认参数是no
,这个不影响。
Question
由于我的资源有限而数据量较大,如果直接训练模型耗时过于庞大,所以想了两种途径试图减少训练时间,请问作者这两种方式是否可行?
我的上述思想主要基于减少显存占用以获取更大的batch_size以增加训练速度,不知道这样是否可行,尤其是第二种方法会不会因为模型参数的变换无法加载预训练权重,或者因为模型参数的变换导致该方法实际上并无加速效果?
补充信息
No response