脚本任务8卡比4卡慢,4卡比单卡慢
收藏
快速回复
AI Studio平台使用 问答其他 1194 9
脚本任务8卡比4卡慢,4卡比单卡慢
收藏
快速回复
AI Studio平台使用 问答其他 1194 9

在七日目标检测打卡营学习中,使用脚本任务来完成作业和最终的竞赛,发现用脚本进行paddledetection检测任务,8卡比4卡慢,4卡比单卡慢。 

8卡时间:

2020-09-29 19:45:31,755-INFO: iter: 20, lr: 0.000001, 'loss_xy': '53.884647', 'loss_wh': '154.703766', 'loss_obj': '2067.793945', 'loss_cls': '73.016968', 'loss_iou': '216.732391', 'loss': '2564.534912', time: 11.189, eta: 7 days, 18:25:04

 

4卡时间:

2020-09-29 19:52:08,966-INFO: iter: 20, lr: 0.000001, 'loss_xy': '53.548737', 'loss_wh': '157.815033', 'loss_obj': '1821.241333', 'loss_cls': '59.865196', 'loss_iou': '216.034027', 'loss': '2309.085449', time: 5.241, eta: 3 days, 15:18:53

 

p40单卡:

2020-09-29 20:12:34,823-INFO: iter: 180, lr: 0.000009, 'loss_xy': '48.438225', 'loss_wh': '72.280334', 'loss_obj': '217.319061', 'loss_cls': '20.981464', 'loss_iou': '192.661255', 'loss': '553.188232', time: 1.525, eta: 1 day, 1:20:21

我用的是代码是:

os.system("export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7")
#os.system("export CUDA_VISIBLE_DEVICES=0,1,2,3")

os.system("python PaddleDetection/tools/train.py -c ppyolo_r18vd.yml --eval")

 

fock的深渊上的坑的项目: https://aistudio.baidu.com/aistudio/clusterprojectdetail/1029011

单卡p40

2020-09-29 23:39:11,123-INFO: iter: 0, lr: 0.000000, 'loss_xy': '7.632949', 'loss_wh': '23.741360', 'loss_obj': '4343.728516', 'loss_cls': '5.082441', 'loss_iou': '32.456314', 'loss': '4412.642090', time: 0.000, eta: 0:00:03

2020-09-29 23:46:29,111-INFO: iter: 200, lr: 0.000400, 'loss_xy': '4.181661', 'loss_wh': '5.177884', 'loss_obj': '29.661121', 'loss_cls': '0.865982', 'loss_iou': '18.038776', 'loss': '60.427185', time: 2.263, eta: 15:35:27

 

 

 

四卡v100

2020-09-30 06:58:53,327-INFO: iter: 0, lr: 0.000000, 'loss_xy': '6.372427', 'loss_wh': '22.479509', 'loss_obj': '2940.285889', 'loss_cls': '4.682764', 'loss_iou': '27.609133', 'loss': '3001.429932', time: 0.000, eta: 0:00:01

 

2020-09-30 07:22:58,471-INFO: iter: 200, lr: 0.000400, 'loss_xy': '5.082535', 'loss_wh': '4.864691', 'loss_obj': '31.545328', 'loss_cls': '1.251459', 'loss_iou': '21.056559', 'loss': '64.736984', time: 7.339, eta: 2 days, 2:33:14

 

深渊上的坑用的代码是:

# 单卡
# os.system("export CUDA_VISIBLE_DEVICES=0")
# 四卡
os.system("export CUDA_VISIBLE_DEVICES=0,1,2,3")
# 提供多种模型
os.system("cd PaddleDetection && python -u tools/train.py -c /root/paddlejob/workspace/code/ppyolo_r18vd.yml --eval")
os.system("cd PaddleDetection && python tools/eval.py -c /root/paddlejob/workspace/code/ppyolo_r18vd.yml")
os.system("cd PaddleDetection && python tools/export_model.py -c /root/paddlejob/workspace/code/ppyolo_r18vd.yml --output_dir ./inference_model")
os.system("mv PaddleDetection/inference_model /root/paddlejob/workspace/output")

1
收藏
回复
全部评论(9)
时间顺序
AIStudio810260
#2 回复于2020-09

大佬到底几个号/狗头

0
回复
AIStudio810260
#3 回复于2020-09

我的代码是从PaddleDetection的文档搬运的,也不明白为什么8卡训练时间反而翻倍……

0
回复
skywalk163
#4 回复于2020-09

我报issue了 

https://github.com/PaddlePaddle/PaddleDetection/issues/1534

 

回复说:

多卡建议使用多进程方式启动,不然预处理可能会有瓶颈。示例:

python -m paddle.distributed.launch --selected_gpus 0,1,2,3,4,5,6,7 tools/train.py -c ....

但是我按照建议里测试,问题照旧。好一点的是8卡终于跟4卡速度差不多了

os.system("CUDA_VISIBLE_DEVICES=0,1,2,3 python -m paddle.distributed.launch --selected_gpus 0,1,2,3 PaddleDetection/tools/train.py -c ppyolo.yml --eval")

4卡:2020-09-30 15:43:18,375-INFO: iter: 20, lr: 0.000004, 'loss_xy': '93.442039', 'loss_wh': '232.597504', 'loss_obj': '2173.653076', 'loss_cls': '72.086082', 'loss_iou': '351.196777', 'loss_iou_aware': '848.500977', 'loss': '3812.800781', time: 1.838, eta: 6:07:02

 

8卡:

os.system("CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python -m paddle.distributed.launch --selected_gpus 0,1,2,3,4,5,6,7 PaddleDetection/tools/train.py -c ppyolo.yml --eval")

2020-09-30 15:53:59,934-INFO: iter: 40, lr: 0.000008, 'loss_xy': '92.068069', 'loss_wh': '205.553848', 'loss_obj': '635.618347', 'loss_cls': '61.704540', 'loss_iou': '344.908173', 'loss_iou_aware': '129.668533', 'loss': '1484.465576', time: 1.597, eta: 5:18:23

 

 

0
回复
AIStudio810260
#5 回复于2020-09
我报issue了  https://github.com/PaddlePaddle/PaddleDetection/issues/1534   回复说: 多卡建议使用多进程方式启动,不然预处理可能会有瓶颈。示例: python -m paddle.distributed.launch --selected_gpus 0,1,2,3,4,5,6,7 tools/train.py -c .... 但是我按照建议里测试,问题照旧。好一点的是8卡终于跟4卡速度差不多了 os.system("CUDA_VISIBLE_DEVICES=0,1,2,3 python -m paddle.distributed.launch --selected_gpus 0,1,2,3 PaddleDetection/tools/train.py -c ppyolo.yml --eval") 4卡:2020-09-30 15:43:18,375-INFO: iter: 20, lr: 0.000004, 'loss_xy': '93.442039', 'loss_wh': '232.597504', 'loss_obj': '2173.653076', 'loss_cls': '72.086082', 'loss_iou': '351.196777', 'loss_iou_aware': '848.500977', 'loss': '3812.800781', time: 1.838, eta: 6:07:02   8卡: os.system("CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python -m paddle.distributed.launch --selected_gpus 0,1,2,3,4,5,6,7 PaddleDetection/tools/train.py -c ppyolo.yml --eval") 2020-09-30 15:53:59,934-INFO: iter: 40, lr: 0.000008, 'loss_xy': '92.068069', 'loss_wh': '205.553848', 'loss_obj': '635.618347', 'loss_cls': '61.704540', 'loss_iou': '344.908173', 'loss_iou_aware': '129.668533', 'loss': '1484.465576', time: 1.597, eta: 5:18:23    
展开

好像被误认为是在Notebook模式了……

0
回复
skywalk163
#6 回复于2020-10

明白了,我4卡和8卡用的同样的iters数值,其实8卡应该比4卡减半的。这样8卡确实比4卡快!
这样咱们大家的多卡脚本都是棒棒的啦!

0
回复
AIStudio810260
#7 回复于2020-10
明白了,我4卡和8卡用的同样的iters数值,其实8卡应该比4卡减半的。这样8卡确实比4卡快! 这样咱们大家的多卡脚本都是棒棒的啦!

还有batchsize是原来的8倍或者4倍,训练的时候每个卡分到的batchsize会平均掉

0
回复
AIStudio810258
#8 回复于2020-10

原来这么回事,8车道得8辆车负载分担才行。

0
回复
skywalk163
#9 回复于2020-10
还有batchsize是原来的8倍或者4倍,训练的时候每个卡分到的batchsize会平均掉

batchsize 要按照卡来吗? 但是paddledetection里面的例子yaml文件,都是8卡的,他们的bs我都没有改就可以用的。

其实我习惯把bs打满训练的。

0
回复
AIStudio810260
#10 回复于2020-10
batchsize 要按照卡来吗? 但是paddledetection里面的例子yaml文件,都是8卡的,他们的bs我都没有改就可以用的。 其实我习惯把bs打满训练的。

在PaddleSeg中如果设置多卡训练,会看到日志里面有这样一段输出

#Device count: 8
batch_size_per_dev: 2

我在config里面设置的batchsize其实是16,所以batchsize是被平均分配下去的(如果单卡跑直接爆显存)

感觉PaddleSeg在多卡的支持上要比PaddleDetection清晰得多,这样设置就行了,然后配置文件里改改batchsize和学习率:

python -m paddle.distributed.launch pdseg/train.py --use_gpu --do_eval --cfg ../unet.yaml
0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户