0
点赞
收藏
分享

微信扫一扫

MMDetection 3.x使用多GPU训练


单机多卡

MMDetection 2.x tool/train.py有--gpus和--gpu-ids的超参数,MMDetection 3.x却没有了 直接使用CUDA_VISIBLE_DEVICES=0,1,2,3命令却会发现只有GPU0工作,CUDA_VISIBLE_DEVICES命令只能指定某个具体的GPU,却不能指定数量

但是发现tools/dist_train.sh仍能多GPU运行,具体命令如下

CUDA_VISIBLE_DEVICES=0,1,2,3 ./tools/dist_train.sh ./configs/yolox/yolox_s_8xb8-300e_coco.py 4

打开tools/dist_train.sh如下

#!/usr/bin/env bash

CONFIG=$1
GPUS=$2
NNODES=${NNODES:-1}
NODE_RANK=${NODE_RANK:-0}
PORT=${PORT:-29500}
MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"}

PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \
python -m torch.distributed.launch \
    --nnodes=$NNODES \
    --node_rank=$NODE_RANK \
    --master_addr=$MASTER_ADDR \
    --nproc_per_node=$GPUS \
    --master_port=$PORT \
    $(dirname "$0")/train.py \
    $CONFIG \
    --launcher pytorch ${@:3}

可以看到通过指定torch实现多GPU工作,仿照它写出

CUDA_VISIBLE_DEVICES=0,1,2,3  python -m torch.distributed.launch --nproc_per_node=4 ./tools/train.py ./configs/yolox/yolox_s_8xb8-300e_coco.py --launcher pytorch

输入nvidia-smi,看到4块显卡都跑起来了 torch.distributed.launch命令接下来不支持了,官方建议换成torchrun,如下

CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node=4 ./tools/train.py ./configs/yolox/yolox_s_8xb8-300e_coco.py --launcher pytorch

多机多卡

前天翻阅mmdetection官方文档,发现有关于单机多卡和多机多卡的介绍,单机多卡和上面一样,多机多卡如下: 假设有 2 台机器,每台机器有 8 张卡。

第一台机器运行以下命令

python -m torch.distributed.launch --nnodes 8 --node_rank 0 --master_addr 127.0.0.1 --master_port 29500 --nproc_per_node=8 examples/distributed_training.py --launcher pytorch

第 2 台机器运行以下命令

python -m torch.distributed.launch --nnodes 8 --node_rank 1 --master_addr 127.0.0.1 --master_port 29500 --nproc_per_node=8 examples/distributed_training.py --launcher pytorch

如果在 slurm 集群运行 MMEngine,只需运行以下命令即可开启 2 机 16 卡的训练

srun -p mm_dev --job-name=test --gres=gpu:8 --ntasks=16 --ntasks-per-node=8 --cpus-per-task=5 --kill-on-bad-exit=1 python examples/distributed_training.py --launcher="slurm"

举报

相关推荐

0 条评论