DataParallel(model)的相关研究
2021-03-04
前提/已知:DataParallel 可以用于深度学习的多GPU并行计算
问题:那如果先用2个GPU来 training DataParallel(model)并保存权重(weights),再load该权重到使用4个GPU来 training 的 DataParallel(model) 上,会不会报错?
探究/实验设计:
- 先用2gpu训练一个模型两天,并保存整个DataParallel(model)而非model的权重。
- 然后,用 1 个GPU初始化 DataParallel(model),开始导入第一步保存的权重。查看是否可以运行。
检测标准:第二步中的导入能否实现
实验结果:不能运行
实验结论:会报错。所以使用DataParallel后,保存model weights时不要直接使用model.state_dict()
,换成model.module.state_dict()
。 因为这样可以仅仅保存model的weights,则不受训练时GPU数目变动的影响。适合计算机资源不足,断断续续运行train代码的情况。但不确定没有 DataParallel 的 weights 会不会影响到 model performance。