模型权重复制,使用set_value过程中,GPU利用率跑不满
收藏
【问题描述】
模型中有一个ViT和一个Bert模型,以及对应的momentum模型(权重不通过backward更新,而是在每次forward过程中通过对应的ViT和Bert模型权重进行拷贝计算),在模型训练过程中,发现模型权重拷贝的过程GPU利用率显著降低,呈现来回跳动的情况,排查了一圈发现是权重拷贝的过程中GPU利用率下降。 测试了一下模型权重设置占了整个训练过程的五分之一左右。
同样的代码pytorch使用的是直接调用参数数据赋值的方法,没有出现此情况,所以怀疑是set_value的原因。
但paddle似乎(?)无类似的参数或函数能直接进行权重的赋值,我尝试了value,values之类的,似乎是read-only,修改这个值好像不会对权重产生变化。
想问下各位大佬是否有其他的直接对权重赋值的方法,或者其他能帮助加快这个权重复制的过程的方法。
模型拷贝的代码如下(paddle以及对应pytorch代码)pytorch代码未出现此情况,
#paddle
@paddle.no_grad()
def _momentum_update(self):
for model_pair in self.model_pairs:
for param, param_m in zip(model_pair[0].parameters(), model_pair[1].parameters()):
param_m.set_value(param_m * self.momentum + param * (1. - self.momentum))
#pytorch
@torch.no_grad()
def _momentum_update(self):
for model_pair in self.model_pairs:
for param, param_m in zip(model_pair[0].parameters(), model_pair[1].parameters()):
param_m.data = param_m.data * self.momentum + param.data * (1. - self.momentum)
其中model_pair[0]和model_pair[1]即为对应的模型,如ViT和对应的momentum模型。
0
收藏
请登录后评论