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脚本项目中的配置思路。
感谢分享
正好要用到PaddleDetection和多卡,感谢分享!
大佬,感觉这个项目做法似乎有点不一样?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
这个项目我用的时候发现显示的速度不太稳定,最后实际上八卡只用了2.5小时
经测试,PaddleSeg也是这样设置,一个注意点就是batchsize应该是卡数的倍数(废话)……
也就是N卡bs得设置成bs*N数呗
学习率记得跟着改~
了解~~
大佬,请问脚本任务使用四卡训练一直报这个错是为什么吗
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