在模型训练时,采用数据并行:将数据集分割成多个部分,每个GPU处理数据的一个子集。每个GPU上的模型副本独立地处理其分配的数据,然后合并结果。的方式。
具体代码如下:
if args.is_distributed: # multi-cards!
assert args.device_target == "Ascend"
context.set_context(mode=context.GRAPH_MODE, save_graphs=False, device_target="Ascend", device_id=device_id)
init()
args.rank = get_rank()
# summary_dir = "./summary_dir/unet3plus1" + str(get_rank())
args.group_size = get_group_size()
device_num = args.group_size
context.reset_auto_parallel_context()
context.set_auto_parallel_context(device_num=device_num, gradients_mean=True,
parallel_mode=ParallelMode.DATA_PARALLEL)
发现的问题:
验证集也根据batch大小分配数据到不同的卡上吗?这样每个卡上在边训练边验证时,根据验证集保存最好性能的模型,就不是使用全部的验证集,而是使用的分配到该卡上的部分验证集的指标保存模型,因此出现,不同卡上的模型性能差异明显的问题。
期望的结果
所有卡都使用的是整个验证集的数据进行验证,从而保证不同卡上最佳模型性能保存的一致性,而不是仅使用分配到的部分验证集保存模型。从而解决模型在不同卡上性能指标存在差异的问题。
硬件设备
ModelArts-8卡;
mindspore: 2.1.0;
python: 3.7.5;
Graph模式。
Please assign maintainer to check this issue.
请为此issue分配处理人。
@ivss @fangwenyi @lujiale @tuoyuanyuan @chengxiaoli
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
感谢您的提问,您可以评论//mindspore-assistant更快获取帮助:
//mindspore-assistant
/mindspore-assistant
保存权重一般是只保存一张卡上的权重,因为梯度更新后各卡的权重是一样的, 当模型训练的足够好, 使用验证集的任意部分得到的精度都是符合预期的
已与客户电话沟通
Sign in to comment