首页 Paddle框架 帖子详情
PaddleDetecton多卡训练参数小结
收藏
快速回复
Paddle框架 文章深度学习炼丹技巧 3724 10
PaddleDetecton多卡训练参数小结
收藏
快速回复
Paddle框架 文章深度学习炼丹技巧 3724 10

PaddleDetecton多卡训练参数小结
测试环境为双T4
将命令分为三部分,如命令:CUDA_VISIBLE_DEVICES=0 python -m paddle.distributed.launch --selected_gpus 0 --log_dir ./mylog tools/train_multi_machine.py -c ../ppyolo.yml --eval
第一部分是CUDA环境变量设置,CUDA_VISIBLE_DEVICES=0 或CUDA_VISIBLE_DEVICES=0,1 CUDA_VISIBLE_DEVICES不设置为None。
第二部分设置 python -m paddle.distributed.launch --selected_gpus 0
python -m paddle.distributed.launch --selected_gpus 0,1 或不设置(None),--selected_gpus 0,1 这个参数不设置标记为launch
第三部分使用训练文件train_multi_machine.py 或train.py
时间为程序输出的剩余运行时间,大致相当于整体运行时间。比如一张卡应该是9-10小时左右,2张卡应该是4-5小时左右

 

发现在python -m paddle.distributed.launch的时候,如果没有写selected_gpus,那么默认就是跑满所有GPU。如果写--selected=0,1 ,则等同于--selected_gpus 0,1

总结一下:
1 train_multi_machine.py 一定要搭配python -m paddle.distributed.launch 使用,否则会报错:can't find PADDLE_TRAINER_ENDPOINTS
2 使用普通train文件,在配python -m paddle.distributed.launch的时候,只要CUDA_VISIBLE_DEVICES有设置就能速度跑满(当然前提条件是如果配置了--selected_gpus,其数量要小于或等于CUDA数量),而不管是配置--selected_gpus 0 或 --selected_gpus 0,1 还是不配置这个参数(不配置默认就是跑满GPU)。但是神奇的是配置单gpu的时候(--selected_gpus 0),确实能看到只有一块GPU参与(显存和耗电只有1块卡上去),但是速度跟2块是一样的。
3 CUDA_VISIBLE_DEVICES的设置对单纯的train.py文件无效,不管设置为多少,只是起一块GPU,反而可能在python -m paddle.distributed.launch的时候因为少于--selected_gpus数量而报错,这时候--selected_gpus不填就不会报错了。

总体而言,为了启用多卡,最佳的方法是:
1 直接使用python -m paddle.distributed.launch ,CUDA_VISIBLE_DEVICES可以不设置,若设置就要配满。

python -m paddle.distributed.launch 里面的这个参数--selected_gpus 0,1 可以不设置,可以减少报错。

这样目前版本的最佳命令设置就是去掉冗余,直接是:
python -m paddle.distributed.launch --log_dir ./mylog tools/train.py -c ../ppyolo.yml --eval

因为手中只有双卡的设备,所以不清楚8卡是否也符合上面的规律。
谨以此文,帮助大家理清aistudio脚本项目中的配置思路。

0
收藏
回复
全部评论(10)
时间顺序
AIStudio810258
#2 回复于2020-10

感谢分享

0
回复
thinc
#3 回复于2020-10

正好要用到PaddleDetection和多卡,感谢分享!

0
回复
AIStudio810260
#4 回复于2020-10

大佬,感觉这个项目做法似乎有点不一样?https://aistudio.baidu.com/aistudio/clusterprojectdetail/1056865

0
回复
skywalk163
#5 回复于2020-10
大佬,感觉这个项目做法似乎有点不一样?https://aistudio.baidu.com/aistudio/clusterprojectdetail/1056865

这个项目使用的就是常规方法

args.training_script="PaddleDetection/tools/train.py"
args.training_script_args=["-c",f"{main_dir}/ppyolo_r18vd_8gpu.yml","--eval"]
launch.launch(args)

 

我测试了,这个4卡和8卡速度也是差不多的,

4卡:

2020-10-11 22:11:19,262-INFO: iter: 180, lr: 0.000090, 'loss_xy': '97.066437', 'loss_wh': '94.753235', 'loss_obj': '327.088837', 'loss_cls': '4.298800', 'loss_iou': '464.708191', 'loss': '984.877197', time: 2.085, eta: 3:28:16

8卡

2020-10-11 22:24:59,003-INFO: iter: 180, lr: 0.000090, 'loss_xy': '94.011887', 'loss_wh': '91.305878', 'loss_obj': '322.584900', 'loss_cls': '4.467336', 'loss_iou': '457.721497', 'loss': '965.884827', time: 1.904, eta: 3:10:13

0
回复
AIStudio810260
#6 回复于2020-10
这个项目使用的就是常规方法 args.training_script="PaddleDetection/tools/train.py" args.training_script_args=["-c",f"{main_dir}/ppyolo_r18vd_8gpu.yml","--eval"] launch.launch(args)   我测试了,这个4卡和8卡速度也是差不多的, 4卡: 2020-10-11 22:11:19,262-INFO: iter: 180, lr: 0.000090, 'loss_xy': '97.066437', 'loss_wh': '94.753235', 'loss_obj': '327.088837', 'loss_cls': '4.298800', 'loss_iou': '464.708191', 'loss': '984.877197', time: 2.085, eta: 3:28:16 8卡 2020-10-11 22:24:59,003-INFO: iter: 180, lr: 0.000090, 'loss_xy': '94.011887', 'loss_wh': '91.305878', 'loss_obj': '322.584900', 'loss_cls': '4.467336', 'loss_iou': '457.721497', 'loss': '965.884827', time: 1.904, eta: 3:10:13
展开

这个项目我用的时候发现显示的速度不太稳定,最后实际上八卡只用了2.5小时

0
回复
AIStudio810260
#7 回复于2020-10

经测试,PaddleSeg也是这样设置,一个注意点就是batchsize应该是卡数的倍数(废话)……

0
回复
thinc
#8 回复于2020-10
经测试,PaddleSeg也是这样设置,一个注意点就是batchsize应该是卡数的倍数(废话)……

也就是N卡bs得设置成bs*N数呗

0
回复
AIStudio810260
#9 回复于2020-10
thinc #8
也就是N卡bs得设置成bs*N数呗

学习率记得跟着改~

0
回复
thinc
#10 回复于2020-10
学习率记得跟着改~

了解~~

0
回复
优雅永不过时
#11 回复于2021-05

大佬,请问脚本任务使用四卡训练一直报这个错是为什么吗

ABORT!!! Out of all 4 trainers, the trainer process with rank=[3] was aborted

 

使用的命令就是为 python -m paddle.distributed.launch --log_dir ./mylog tools/train.py -c ../ppyolo.yml --eval

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户