1、关于多卡训练
mmdetection官方提供方式:
./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]
例如:
./tools/dist_train.sh config/swin/mask_rcnn_swin-t-p4-w7_fpn_1x_coco 4
上述指令代表使用默认的4块GPU参与训练。
如果需要指定特定的几个GPU来训练,可以使用如下的指令:
直接在终端使用:
CUDA_VISIBLE_DEVICES=0,1,2 ./tools/dist_train.sh config/swin/mask_rcnn_swin-t-p4-w7_fpn_1x_coco 3
1.1 端口被占用
上述指令代表使用0,1和2三块GPU来参与模型训练。
在服务器执行多个训练任务时,可能出现进程端口被占用的问题:
RuntimeError: Address already in use
这是由于dist_train.py文件中,端口号已经固定了,手动修改一个即可。如下所示,将29500修改为29502
CONFIG=$1
GPUS=$2
NNODES=${NNODES:-1}
NODE_RANK=${NODE_RANK:-0}
PORT=${PORT:-29502}
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 \
--seed 0 \
--launcher pytorch ${@:3}
1.2 显存被占用
当执行训练程序出现报错的问题之后,可能指定的GPU的显存已经被占用了绝大部分,当再执行时,肯定提示显存不够。这时候应该将后台执行的相关程序(进程)杀死掉。
查看执行的所有进程可以用2条命令来实现:
1)ps aux;
2)ps -ef | grep python
通过kill -9 待杀死的进程ID,来停止对应进程。