Skip to content

Latest commit

 

History

History
69 lines (50 loc) · 3.66 KB

MULTI_MACHINE_TRAINING_cn.md

File metadata and controls

69 lines (50 loc) · 3.66 KB

多机训练

简介

  • 分布式训练的高性能,是飞桨的核心优势技术之一,在分类任务上,分布式训练可以达到几乎线性的加速比。 Fleet 是用于 PaddlePaddle 分布式训练的高层 API,基于这套接口用户可以很容易切换到分布式训练程序。 为了可以同时支持单机训练和多机训练,PaddleDetection 采用 Fleet API 接口,可以同时支持单机训练和多机训练。

更多的分布式训练可以参考 Fleet API设计文档

使用方法

  • 使用tools/train_multi_machine.py可以启动基于Fleet的训练,目前同时支持单机单卡、单机多卡与多机多卡的训练过程。

  • 可选参数列表与tools/train.py完全相同,可以参考入门使用文档

单机训练

  • 训练脚本如下所示。
# 设置PYTHONPATH路径
export PYTHONPATH=$PYTHONPATH:.
# 设置GPU卡号信息
export 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 \
    tools/train_multi_machine.py \
        -c configs/faster_rcnn_r50_fpn_1x.yml

多机训练

  • 训练脚本如下所示,其中ip1和ip2分别表示不同机器的ip地址,PADDLE_TRAINER_ID环境变量也是根据cluster_node_ips提供的ip顺序依次增大。
  • 注意:在这里如果需要启动多机实验,需要保证不同的机器的运行代码是完全相同的。
export PYTHONPATH=$PYTHONPATH:.
# 设置GPU卡号信息
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
# 启动训练
node_ip=`hostname -i`
python -m paddle.distributed.launch \
     --use_paddlecloud \
    --cluster_node_ips ${ip1},${ip2} \
    --node_ip ${node_ip} \
    tools/train_multi_machine.py \
        -c configs/faster_rcnn_r50_fpn_1x.yml \

训练时间统计

  • 以Faster RCNN R50_vd FPN 1x实验为例,下面给出了基于Fleet分布式训练,不同机器的训练时间对比。
    • 这里均是在V100 GPU上展开的实验。
    • 1x实验指的是8卡,单卡batch size为2时,训练的minibatch数量为90000(当训练卡数或者batch size变化时,对应的学习率和总的迭代轮数也需要变化)。
模型 训练策略 机器数量 每台机器的GPU数量 训练时间 COCO bbox mAP 加速比
Faster RCNN R50_vd FPN 1x 1 4 15.1h 38.3% -
Faster RCNN R50_vd FPN 1x 2 4 9.8h 38.2% 76%
Faster RCNN R50_vd FPN 1x 1 8 8.6h 38.2% -
Faster RCNN R50_vd FPN 1x 2 8 5.1h 38.0% 84%
  • 由上图可知,2机8卡相比于单机8卡,加速比可以达到84%,2即4卡相比于单机4卡,加速比可以达到76%,而且精度几乎没有损失。
  • 1x实验相当于COCO数据集训练了约13个epoch,因此在trainer数量很多的时候,每个trainer可能无法训练完1个epoch,这会导致精度出现一些差异,这可以通过适当增加迭代轮数实现精度的对齐,我们实验发现,在训练多尺度3x实验时(配置文件:configs/rcnn_enhance/faster_rcnn_dcn_r50_vd_fpn_3x_server_side.yml),分布式训练与单机训练的模型精度是可以对齐的。