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

8卡ddp增加batch_size,精度值严重下降 #80

Open
ccssu opened this issue Nov 25, 2022 · 8 comments
Open

8卡ddp增加batch_size,精度值严重下降 #80

ccssu opened this issue Nov 25, 2022 · 8 comments
Labels
question Further information is requested

Comments

@ccssu
Copy link
Collaborator

ccssu commented Nov 25, 2022

Multi-GPU Training ultralytics/yolov5#475

问题描述

增加 batch_size ,在300个epoch训练下,mAP_0.5:0.95 精度值下降了2.4750000000000014

数据表如下所示:

gpu batch_size cfg metrics/mAP_0.5, metrics/mAP_0.5:0.95,
目标 2 64 yolov5n.yaml 45.6 27.7
实验01 8 256 yolov5n.yaml 44.132 26.936
实验02 8 512 yolov5n.yaml 40.69, 24.461,

趋势图:
image

注意:

  • 实验01 启动指令 python -m oneflow.distributed.launch --nproc_per_node 8 train.py --data data/coco.yaml --weights ' ' --cfg models/yolov5n.yaml --batch 256
  • 实验02 启动指令 python -m oneflow.distributed.launch --nproc_per_node 8 train.py --data data/coco.yaml --weights ' ' --cfg models/yolov5n.yaml --batch 512

复现实验数据

  1. 在oneflow最新master分支即可
  2. one-yolov5 请切换到 recurrence_batch_have_an_impact_on_mAP
  3. 不在a100机器 请修改 data/coco.yaml文件中数据集路径 path: /data/detection_datasets/coco # dataset root dir
  4. 实验01 启动指令 python -m oneflow.distributed.launch --nproc_per_node 8 train.py --data data/coco.yaml --weights ' ' --cfg models/yolov5n.yaml --batch 256
  5. 实验02 启动指令 python -m oneflow.distributed.launch --nproc_per_node 8 train.py --data data/coco.yaml --weights ' ' --cfg models/yolov5n.yaml --batch 512

实验环境

  • 两次实验使用的为同一oneflow版本 同一 one-yolov5代码
  • oneflow版本:2deed1b849 (HEAD -> fuse_get_ciou_result )
  • one-yolov5版本: 33d2e89 (HEAD -> main)
  • 机器: a100
@ccssu ccssu added the question Further information is requested label Nov 25, 2022
@BBuf BBuf changed the title 增加batch_size,精度值严重下降 8卡ddp增加batch_size,精度值严重下降 Nov 25, 2022
@BBuf
Copy link
Contributor

BBuf commented Nov 25, 2022

我认为需要确认两个问题:

  1. pytorch在这种情况是否也有严重的精度下降问题?
  2. 打开sync-bn的话我们是否还存在精度严重下降问题?

@Ldpe2G
Copy link
Collaborator

Ldpe2G commented Nov 25, 2022

从2卡到8卡学习率是不是应该调整一下,乘以4?应该有个公式计算的

@ccssu
Copy link
Collaborator Author

ccssu commented Nov 25, 2022

我认为需要确认两个问题:

  1. pytorch在这种情况是否也有严重的精度下降问题?
  2. 打开sync-bn的话我们是否还存在精度严重下降问题?

补两组实验

实验01

使用ultralytics/yolov5最新的main分支代码。

配置:

  • cfg = yolov5n.yaml
  • batch_size = 512
  • gpu = 8
  • sync-bn = False

启动指令:
python -m torch.distributed.run --nproc_per_node 8 train.py --data data/coco.yaml --weights ' ' --cfg yolov5s.yaml --batch 512 --epochs 300

实验02

使用one-yolov5最新main分支代码

配置:

  • cfg = yolov5n.yaml
  • batch_size = 512
  • gpu = 8
  • sync-bn = True

启动指令:
python -m oneflow.distributed.launch --nproc_per_node 8 train.py --data data/coco.yaml --weights ' ' --cfg models/yolov5n.yaml --batch 512 --sync-bn

@BBuf
Copy link
Contributor

BBuf commented Nov 25, 2022

从2卡到8卡学习率是不是应该调整一下,乘以4?应该有个公式计算的

我觉得可以先确认一下这个问题 @ccssu

@ccssu
Copy link
Collaborator Author

ccssu commented Nov 25, 2022

从2卡到8卡学习率是不是应该调整一下,乘以4?应该有个公式计算的

我觉得可以先确认一下这个问题 @ccssu

嗯嗯,好

lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
lrf: 0.01 # final OneCycleLR learning rate (lr0 * lrf)
momentum: 0.937 # SGD momentum/Adam beta1
weight_decay: 0.0005 # optimizer weight decay 5e-4

@Ldpe2G 德澎哥 请问下我调整学习率只要将 lrf , lr0 乘4就行了吗

@Ldpe2G
Copy link
Collaborator

Ldpe2G commented Nov 25, 2022

请问下我调整学习率只要将 lrf , lr0 乘4就行了吗

官方文档有没有讲8卡训练要做哪些修改,还有就是确认下晓雨说的,代码中有没有根据卡数自动修改 lr

@ccssu
Copy link
Collaborator Author

ccssu commented Nov 28, 2022

请问下我调整学习率只要将 lrf , lr0 乘4就行了吗

官方文档有没有讲8卡训练要做哪些修改,还有就是确认下晓雨说的,代码中有没有根据卡数自动修改 lr

  1. ultralytics/yolov5官方文档没有讲8卡训练要做哪些修改,官方介绍如下:

image

  1. 已和晓雨确认,ultralytics/yolov5 代码中有没有根据卡数自动修改 lr
  1. 修改 lrf , lr0 乘4 [email protected]:.95 更低 数据如下:
epoch batch gpu lr0 lrf [email protected] [email protected]:.95
对照实验 53 512 8 0.01 0.01 37.813 21.698
本次实验 53 512 8 0.04 0.04 31.869 17.304
本次-对照 53 -5.944000000000005 -4.394000000000001

图中画红框的为本次实验数据曲线.
2ba0607c12ed3fff56faff30dce25a3

注意:

  • epoch从0开始计数
  • 复现在oneflow master分支, one-yolov5 main分支(注释掉保存模型这一行"model": deepcopy(de_parallel(model)).half(),) 即可
  • 启动指令: python -m oneflow.distributed.launch --nproc_per_node 8 train.py --data data/coco.yaml --weights ' ' --cfg models/yolov5n.yaml --batch 512
  • 使用机器a100

更多数据
hyp.txt
opt.txt
results.csv

@Ldpe2G
Copy link
Collaborator

Ldpe2G commented Nov 28, 2022

可以再跑两组实验,4卡 和 6卡都分别跑下,看下精度怎样,学习率就保持和2卡一样的就行了

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

No branches or pull requests

3 participants