目前要微调一个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的已实现,代码量有点大的,但跟我们现在这个模型的架构是相近的,应该能改过来。
本文地址: DynamiCrafter模型训练
您必须 登录 才能发表评论