配置多GPU训练的笔记-xview2挑战项目复现1

最近尝试复现一个xview2挑战(xiew2)的冠军项目,这个挑战的目标是基于遥感影像对自然灾害前后建筑物的损坏程度进行定位和评分,官方提供了非常庞大的数据集,原项目代码在Github能找到(xview2_1st_place_solution)。

遇到的坑主要有:

1.APEX安装
项目用到了NVIDIA的APEX库,需要先从Github把这个项目克隆下来(https://github.com/NVIDIA/apex),再进到apex项目里安装。官方给的Linux系统安装方式是:

git clone https://github.com/NVIDIA/apex
cd apex
pip install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

问题是安装时对CUDA和Pytorch的版本匹配要求很高,要根据自己的CUDA版本去安装匹配的Pytorch。我的系统安装的是CUDA11.2版本,恰好Pytorch没有对应这个CUDA版本的(我在官网没找到有对应CUDA11.2的,只有10.2和11.3,历史版本也没有11.2),导致安装的时候总是有错误,如果换CUDA又怕对别的项目造成影响。我后来安的11.1版本的torch,找了其他的方法,直接运行安装包。

python3 setup.py install

但是后来运行还是会报警告,可能还有些依赖我没安,好在没影响运行。如果CUDA和Pytorch版本匹配的话可能不存在这些问题了。
在这里插入图片描述
2.多显卡训练
关于这个项目的介绍已经有大佬写过一些,见:xView2比赛冠军代码解读
整体看来,有两个写好的运行文件train.sh和predict.sh,如果代码无需调整,那我们直接运行它们就行当然先要把下载的数据集(train,tier3,test)放在这个项目目录下。但我直接运行train.sh时出现了显存溢出的问题,原本有4张卡,查看显卡状态显示只用了一张卡(nvidia-smi -l 10)。train.sh的内容如下:

echo "Creating masks..."
python create_masks.py
echo "Masks created"
 
echo "training seresnext50 localization model with seeds 0-2"
python train50_loc.py 0
python train50_loc.py 1
python train50_loc.py 2
python tune50_loc.py 0
python tune50_loc.py 1
python tune50_loc.py 2
……

一旦开始训练,即使一个模型出错,后面的也会继续运行。我训练的时候大多是报错了,有两个模型可以训练。然后我改了第一个模型的batchsize=1后也可以运行了,说明原项目的各个模型不是全部一样的设置,没有多卡运行。于是我又查找了怎样多卡并行,对本项目而言,只需要在模型initialize后加一行代码就行:

model = nn.DataParallel(model).cuda()

在这里插入图片描述
简单的实例:

from torch.nn import DataParallel

model = model.cuda()
model = DataParallel(model, list(range(torch.cuda.device_count()))).cuda()
 
# AttributeError: 'DataParallel' object has no attribute XXX
model.module.XXX

其实作者有的模型已经写了这一句,只不过没有全用,我也不知道为什么,很奇怪。只要把每个模型加上这个设置,就可以多卡并行了,也不用减少batchsize。
另外,如果想要指定显卡训练,只需要在Terminal运行的时候前面加入CUDA_VISIBLE_DEVICES=1,2这句,这样就可以只将选中的显卡可检测到。

CUDA_VISIBLE_DEVICES=1,2 sh train.sh

目前只做到train,第一个模型才跑完,用了900分钟,后面预测再做记录。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值