目前要微调一个DynamiCrafter的模型,在512*320的尺寸下,推理一次需要12g左右的显存,而训练的时候,若是冻结了temporal相关的参数,可训练参数在500M左右,加上数据集,使用fp16训练差不多,占用18g显存。

100个视频的训练集,在训练时多占了3g的显存。

如果未来要和时间层一起微调的话,2B的参数,估计要12g(模型本身)+2*2*6+数据集占用=36g往上了。怪不得作者说训25帧的512模型已经是a100的极限了。

为了能跑起来这些,目前能想到的办法:

1)把现在的训练管线改成model/pipeline parallelism

2)在现在的基础上改出个lora微调

以后感觉全量微调和lora微调都跑不掉的,

先一步步分析每个需要去学习那些,总结一下现在能实现的,不然之后就要忘完了。

model/pipeline parallelism

目前网上全是介绍原理的,要不就是就是用来加速的几个库(deepspeed,pytorch_lighting,……)

这一块gpt大哥说得挺好的,回家登号再问一下。

问题主要是不知道单纯把模型分到不同gpu上有没有用,刚测了下,两张显卡后面又同步了,感觉像变成了data parallelism,可能是中间还要用torch.nn.dp什么的来传递下数据,

pipeline parallelism这块,好像可以通过直接交给deepspeed来实现,但要重写模型内的各个层,具体要求如下Following torch.nn.Sequential, the inputs and outputs of each layer must be either a single torch.Tensor or a tuple of tensors. In practice, some models may need to modify their forward pass to pack and unpack arguments to forward().

文章链接如下:

https://www.deepspeed.ai/tutorials/pipeline/#load-balancing-pipeline-modules

不知道我们model里一些3d的块,能不能这么改。

总之,这一块两条路,一个就是不同model放不同gpu;一个就先重写里面的所有基础层试试。

lora微调

目前已知lora微调脚本,sd和svd的已实现,代码量有点大的,但跟我们现在这个模型的架构是相近的,应该能改过来。

您必须 登录 才能发表评论