问题描述:
在使用mmdetection进行训练时,使用单个GPU可以正常训练,当我尝试使用2个GPU分布式训练
./tools/dist_train.sh configs/faster_rcnn_r50_fpn_1x_static_24_wofreeze.py 2 --work-dir DOTA
产生了奇怪的报错:
ValueError: ctypes objects containing pointers cannot be pickled
运行环境
mmcv (0.2.16) mmdet (1.0rc0+unknown)
torch (1.4.0) torchvision (0.5.0)
CUDA 10.1
问题解决
我一开始以为是自己代码的问题,花了很长的时间检查我的代码,然而检查修改后还是一直报错。
我在网上进行搜索,终于找到了一些蛛丝马迹
https://discuss.pytorch.org/t/dataloader-multiprocessing-error-cant-pickle-odict-keys-objects-when-num-workers-0/43951
最后一个人回答说num_workers=0
于是我抱着试试看的心态,把配置文件中的workers_per_gpu改为0,imgs_per_gpu不改变
结果奇迹发生了,可以正常训练了。