Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AlexNet 单卡精度对齐 #188

Closed
3 tasks done
rentainhe opened this issue Sep 6, 2021 · 6 comments
Closed
3 tasks done

AlexNet 单卡精度对齐 #188

rentainhe opened this issue Sep 6, 2021 · 6 comments
Assignees

Comments

@rentainhe
Copy link
Contributor

rentainhe commented Sep 6, 2021

对齐Eager下的AlexNet精度与Benchmark中的AlexNet精度

超参:

optimizer: SGD { momentum=0.9 }
learning rate: 0.01
train_batch_size: 512
eval_batch_size: 512
epochs: 90

需要进行的工作:

  • 在eager模式下载入pytorch预训练的模型,验证在imagenet数据集上的准确率,保证前向正常
  • 运行benchmark的AlexNet模型,验证性能
  • 对齐单卡下的imagenet训练结果

FQAs:

Q: 在小数据集imagenette上进行训练的时候,可以正常收敛和验证,但是在imagenet数据集上训练的时候,正常收敛,但是验证精度极低
A: 可能的问题是data-part-num设置错误,目前已修正,重新验证

1. 载入pytorch预训练模型并在imagenet上进行测试

  • 载入pytorch预训练模型在imagenet val上验证准确率为: 55.38%

2. 对齐lazy和eager的模型加载,保证两边模型在相同输入下得到相同输出

此工作依赖于 Oneflow-Inc/OneFlow-Benchmark#215

@rentainhe
Copy link
Contributor Author

rentainhe commented Sep 8, 2021

目前存在的问题:

  • eager模式下,在比较关闭和开启dropout训练的代码后发现,开启dropout后的模型完全不收敛,关闭dropout后模型可以正常收敛

@Flowingsun007
Copy link
Contributor

Flowingsun007 commented Sep 8, 2021

载入pytorch预训练模型并在imagenet上进行测试
载入pytorch预训练模型在imagenet val上验证准确率为: 55.38%

这个有没有试过,用pytorch载入它自己的预训练模型,准确率是多少?

@rentainhe
Copy link
Contributor Author

载入pytorch预训练模型并在imagenet上进行测试
载入pytorch预训练模型在imagenet val上验证准确率为: 55.38%

这个有没有试过,用pytorch载入它自己的预训练模型,准确率是多少?

用pytorch载入自己的预训练模型进行测试吗,之前测过一次是56+,但是数据预处理不一样,也是符合预期的准确率了

@rentainhe
Copy link
Contributor Author

rentainhe commented Sep 9, 2021

AlexNet简要总结

验证精度相关的实验:

  • 原始models仓库下的alexnet,在Imagenette数据集上实现了eager和graph的完全对齐

  • OneFlow AlexNet BenchMark单卡在ImageNet2012数据集上的相关训练

  • 不完全收敛的原因:--data-part-num设置错误,没有和ofrecord中的part-num对应,导致观测到模型acc非常低的现象,修改后可以正确收敛,并且精度稳定上升

  • AlexNet Graph 单卡精度验证 (正在进行)

关于收敛速度问题的实验

由于之前观测到OneFlow的AlexNet Eager在Imagenet2012上收敛速度过慢,因此做了以下几个实验来验证之前的问题

1. 猜测可能是Dropout的问题

ImageNet2012数据集上使用OneFlow的AlexNet进行训练

相关的实验超参数与resnet50对齐

Warmup epoch = 5 (Linear Warmup and Cosine Decay)
Lr = 0.01
Epoch = 90
Batch size = 512
  • 关闭Dropout: 模型的收敛速度比较快,精度上升的也比较快
验证集上的验证结果
epoch_1 = 0.1%
epoch_2 = 1% 
epoch_3 = 4.1%
epoch_4 = 9.8%
epoch_5 = 14.3%
epoch_6 = 19.05%
epoch_7 = 23.6%
  • 开启Dropout: 模型的收敛速度比较慢
验证集上的验证结果
epoch_1 = 0.14%
epoch_2 = 0.38% 
epoch_3 = 1.82%
epoch_4 = 6.38%
epoch_5 = 11.48%
epoch_6 = 15.48%
epoch_7 = 19.41%

结论

在开启dropout后模型也可以收敛,只是速度较慢

2. 猜测可能是学习率的问题

由于之前的实验里是和resnet50对齐,所以刚开始的warmup阶段学习率较低,因此修改实验超参数,改用StepLR后,在前几个epoch固定使用0.01的学习率,观测到模型的收敛速度明显加快,目前只跑了两个epoch,收敛的结果如下

epoch_1 = 0.1%
epoch_2 = 5%

结论

在之前的训练中都使用了warmup,导致前几个epoch,收敛速度过慢

3. 在Pytorch框架下验证AlexNet模型的收敛速度

由于AlexNet模型较老,之前没有相关的调参记录,因此重新跑了Pytorch的AlexNet模型,为了公平比较,采用了ofrecord的数据输入,并且为了排除warmup带来的影响,使用了固定的学习率0.01,观察到Pytorch版本的AlexNet收敛速度也很慢

结论

alexnet模型本身收敛速度就很慢

总结

  • 可以明显观察到的是,AlexNet模型本身收敛速度就很慢,Dropout会导致收敛速度变得更慢,但是随着训练步骤的增加,带来的影响会逐渐减小,但是这是否是dropout本身的问题,需要进行一次完整的训练,或者在BERT或者ViT上作进一步的验证,就目前所做的实验看来,在和torch的比较后,可能alexnet模型本身就收敛困难

@rentainhe
Copy link
Contributor Author

刚刚和星宇沟通后,BERT那边是由于之前传参问题,导致的收敛出现错误,在正确地修改后已经可以正常收敛了,因此记录一下这次(奇怪的)debug中踩的坑以及后续自己做实验会注意的点

  • 尽量在较新的模型上同时验证pytorch和oneflow模型的性能
在alexnet上模型本身可能就难以收敛,因此会带来很多无关的猜测,导致出现的原因很难确定
  • data-part-num要注意与数据集对齐
在前两天很长的一段训练时间里,没有修改这个参数,以致于虽然模型进行了训练,但是只用了很少一部分数据集。
所以出现了train loss非常低,但是eval acc也非常低的现象,在正确地修改后,可以正常收敛

@rentainhe
Copy link
Contributor Author

AlexNet实验

与benchmark对齐的graph训练90epoch后最高精度54.75%与benchmark中的AlexNet54.76%对齐

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants