问题描述:
 
在使用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不改变
 
结果奇迹发生了,可以正常训练了。