mindspore中如何合并分布式保存的模型?
问题描述:【功能模块】分布式保存的模型转存【操作步骤&问题现象】1、前提:代码修改自PanGu-Alpha,训练中是采用了数据并行、模型并行,并开启了优化器并行,因此所有保存的CheckPoint才是一个完整的模型。我们想把这些ckpt合并成一个完整的权重文件。2、我们看到官方文档会有一份合并示例,但是盘古模型似乎用不了这种方法,见下图1。如果将 load_checkpoint 和load_par
问题描述:
【功能模块】
分布式保存的模型转存
【操作步骤&问题现象】
1、前提:代码修改自PanGu-Alpha,训练中是采用了数据并行、模型并行,并开启了优化器并行,因此所有保存的CheckPoint才是一个完整的模型。我们想把这些ckpt合并成一个完整的权重文件。
2、我们看到官方文档会有一份合并示例,但是盘古模型似乎用不了这种方法,见下图1。如果将 load_checkpoint 和load_param_into_net改为load_distributed_checkpoint,等模型加载完参数后,再获取权重的值并保存,能得到一份完整的权重文件吗?
3、另外一个更好的方向是,我能通过读取strategy.ckpt,手动合并CheckPoint吗?那么parallel_layouts里面的参数该怎样理解?见注释2。
注释 2:
param_name: "backbone.blocks.1.attention.dense1.weight"
parallel_layouts {
dev_matrix {
dim: 4
dim: 2
}
tensor_map {
dim: 0
dim: -1
}
param_split_shape {
}
indices_offset {
}
field: 0
opt_weight_shard_step: 2
opt_weight_shard_size: -1
}
解答:
建议把rank0和rank1的ckpt合并、rank2和rank3的ckpt合并、rank4和rank5的ckpt合并、rank6和rank7的ckpt合并,然后再load_ckpt
通过context.set_auto_parallel_context配置分布式推断,只不过是单卡的分布式推断,然后通过load_distributed_checkpoint 加载分布式模型到单卡,在成功加载模型之后,再导出完整的权重文件。这样是能成功导出模型的,我加载分布式权重推断一次,和新的完整权重推断一次,两边的logits值是相等的。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)