Skip to main content

opensora训练记录

记录i2v adapter和ip adapter的训练
Created on August 13|Last edited on August 13

t2v训练

t2v模型训练时,loss基本上平稳,随着训练步数的增加也没有降低的趋势。但是在实际测试时发现,训练是有效果的,高质量的数据有带来提升。

02k4k6k8kStep0.30.350.40.45
Run set
2


I2V训练

i2v adapter训练

在基于第二版代码的基础上,训练了i2v adapter,训练的步数为5k,训练loss曲线和之前全量训练模型参数时趋势相差不大,都是比较平稳,但是实际测试,生成效果要差一些,模型��力(t2v, i2v)都有所下降。

Run set
3


i2v

i2v adapter & ip adapter训练

在第9版代码的基础上,对I2v adapter &IP Adapter进行训练,发现训练到第134步时,loss会变成Nan。

Run set
1


更换激活函数

在提交的第十版代码中,将图像clip后的mlp层的激活函数从gelu换成silu。发现还是会在同样的步骤loss变成Nan。

Run set
1


关闭IP adapter做消融

在第十版代码的基础上,去掉了IP adapter,仅对i2v adapter进行训练,发现还是会在134步的时候loss变成Nan。之前第二版的代码中是能正常训练i2v adapter的,所以排除掉了IP adapter的问题。原因应该在最近修改的代码部分。

Run set
1


排除数据原因

因为每次都是到134的时候会变成Nan,所以需要检查一下是不是数据的原因导致。训练时跳过了前129步,从130步开始训练。发现到137步的loss都是正常的,可以排除是数据的原因。

Run set
1


跳过有问题的loss

打算将loss为Nan的训练跳过。
所以将下面的代码
loss = loss_dict["loss"].mean()
booster.backward(loss=loss, optimizer=optimizer)
optimizer.step()
optimizer.zero_grad()
改成
loss = loss_dict["loss"].mean()
if loss > 0 and loss < 1:
booster.backward(loss=loss, optimizer=optimizer)
optimizer.step()
optimizer.zero_grad()
仅在loss为(0,1)的时候更新模型。但是发现会在20多步的时候卡住,可能是因为backward或者step的内部有barrier操作。

Run set
1


关掉所有的mask策略

将���有的mask策略关掉,然后训练i2v adapter & ip adapter。在134步的时候,loss便正常了。

Run set
1


更改mask和首帧不加噪音操作顺序

更改mask和frame_similarity_prior的顺序,原始顺序为
if frame_similarity_prior:
# first frame do not add any noise
x_t[:, :, 0:1, :, :] = x_start[:, :, 0:1]
if mask is not None:
t0 = torch.zeros_like(t)
x_t0 = self.add_noise(x_start, noise, t0)
x_t = torch.where(mask[:, None, :, None, None], x_t, x_t0)
调整顺序,mask策略还原成原先的mask,然后进行训练,到134步loss还是会变成Nan。

Run set
1


去掉所有和head相关的mask

应该是mask的过程中,会将首帧mask掉,替换成随机的噪音。和固定住首帧的训练策略不相符。所以把和head相关的mask都去掉。loss正常,看起来是有下降的趋势。loss值和走势上都要好于t2v的训练。但是实际测试效果不太理想。

Run set
3