Wan2.1 t2v模型Lora Fine-Tune
Wan2.1 t2v模型Lora Fine-Tune
1. Wan2.1模型
Wan2.1是由阿里巴巴开源的AI视频生成大模型,具备强大的视觉生成能力,支持文本到视频(T2V)和图像到视频(I2V)任务。该模型基于前沿的Diffusion Transformer架构,结合了因果3D变分自编码器(VAE)和优化的训练策略,能够高效处理时空信息,生成高质量、连贯性强的视频。
该模型基于主流的视频Diffusion(扩散模型)和Transformer架构。扩散模型通过逐步去除噪声来生成数据,而Transformer架构则基于自注意力机制(Attention)捕捉长时程依赖关系,从而生成时空一致的高质量视频。在权威评测集VBench中,Wan2.1的14B参数专业版本以总分86.22%的成绩大幅超越了国内外其他模型(如Sora、Luma、Pika等),稳居榜首位置[1]。该模型能够生成复杂运动、还原真实物理规律、提升影视质感,并优化指令遵循。
本文不会介绍Wan 2.1 模型的原理,而是主要介绍如何对Wan 2.1 模型进行lora fine-tune,生成需要的视频风格,使用的工具为Diffusion-Pipe[2]。
2. Diffusion Pipe
Diffusion-Pipe 是一个用于扩散模型(diffusion models)的管道并行训练脚本,旨在通过分布式计算和高效的内存管理,训练那些超出单个 GPU 内存限制的大型模型。
使用这个项目进行训练可以简化很多流程,目前它可以提供的功能包括:
- 管道并行训练:通过将模型分割到多个 GPU 上进行训练,Diffusion-Pipe 能够处理比单个 GPU 内存更大的模型。
- 支持多种模型:目前支持 SDXL、Flux、LTX-Video、HunyuanVideo(t2v)、Cosmos、Lumina Image 2.0、Wan2.1(t2v 和 i2v)以及 Chroma 等多种模型。
- 高效的多进程预缓存:通过多进程和多 GPU 预缓存潜在变量和文本嵌入,减少训练时的内存需求,加速训练过程。
- Tensorboard 日志记录:记录训练过程中的关键指标,便于实时监控训练进度。
- 评估集指标计算:在保留的评估集上计算指标,帮助衡量模型的泛化能力。
- 训练状态检查点:支持训练状态的自动保存与恢复,确保训练过程的连续性。
- 易于扩展:通过实现一个简单的子类即可添加对新模型的支持,简化了集成流程。
3. 环境准备
在这次lora fine-tune中,我们使用的环境为:
- 计算资源:AWS g5.4xlarge实例(1块Nvidia A10G)
- 操作系统:ubuntu 22.04
- 模型:wan2.1-t2v-1.3b
3.1. 配置训练环境
设置diffusion-pipe训练环境:
# 创建conda环境 conda create -n diffusion-pipe python=3.12 conda activate diffusion-pipe # 安装pytorch和cuda-nvcc pip install torch==2.4.1 torchvision==0.19.1 --index-url https://download.pytorch.org/whl/cu121 conda install nvidia::cuda-nvcc # 下载diffusion-pipe git clone https://github.com/tdrussell/diffusion-pipe cd diffusion-pipe pip install -r requirements.txt # 最后下载wan 2.1 模型到models/目录下: huggingface-cli download Wan-AI/Wan2.1-T2V-1.3B-Diffusers --local-dir ./wan2.1-t2v-1.3b |
3.2. 准备训练数据
在准备数据集时,需要准备符合下面要求的数据:
- 图片:至少10-15张图片(7-8张一般也可以,但效果相对会差一些),常规图片格式均可以(例如jpg, jpeg, png, webp等)。也可以使用mp4格式的短视频(2-3秒),但是会消耗较多的VRAM
- Text Prompt:每张图片必须有一个对应的 .txt 文件,里面包含对应图片的描述说明
- 触发词:一个唯一的触发关键词,确保模型能映射到新学习到的风格或人物
在准备Text Prompt时,注意以下格式:
- 要有描述性,但要简洁(避免提示语过长或过短)
- 包含有关背景、服装、动作等方面的细节
- 在所有的“.txt”文件中始终使用相同的触发词
示例数据:
A portrait of a GF Carty Chan with short brown hair, wearing a white T-shirt, set against a clear blue sky.
在数据集准备完成后,将其上传到 /diffusion-pipe/data/input 文件夹中。
4. 训练
首先编辑examples/dataset.toml文件,指定path为数据路径,例如:
path = '/home/ubuntu/diffusion-pipe/data/input'
以及设置:
num_repeats = 10
然后编辑examples/wan_14b_min_vram.toml文件,指定输出路径以及部分训练参数,例如epoch:
# change this output_dir = '/home/ubuntu/diffusion-pipe/output' # and this dataset = 'examples/dataset.toml' epochs = 400 save_every_n_epochs = 10 # 以及修改模型路径 ckpt_path = '/home/ubuntu/diffusion-pipe/models/wan2.1-t2v-1.3b' |
设置好这些配置后,开启一个新的tmux session进行训练:
tmux new -s training conda activate diffusion-pipe cd diffusion-pipe NCCL_P2P_DISABLE="1" NCCL_IB_DISABLE="1" deepspeed --num_gpus=1 train.py --deepspeed --config examples/wan_14b_min_vram.toml |
5. 训练结果
在训练到390个epoch后,手动停止训练:
[Rank 0] step=31199, skipped=0, lr=[2e-05], mom=[[0.9, 0.99]]
steps: 31199 loss: 0.0023 iter time (s): 1.691 samples/sec: 0.591
[Rank 0] step=31200, skipped=0, lr=[2e-05], mom=[[0.9, 0.99]]
steps: 31200 loss: 0.0052 iter time (s): 1.694 samples/sec: 0.590
Saving model to directory epoch390
然后使用ComfyUI里构建一个Wan2.1的text2video的工作流查看效果,使用提示词:
GF Carty Chan, short dark hair, wearing a white T-shirt, Hair blowing in the wind。
未使用lora时生成的视频效果:
使用lora后生成的视频效果:
可以看到生成的视频与训练数据里的人物基本保持了一致。
5. 总结
通过 Diffusion-Pipe 对 Wan2.1 模型进行 LoRA 微调,可以在有限资源下有效调整视频生成风格,尤其适合特定人物或艺术风格的定制化视频生成任务。整个流程具备良好的可复现性和扩展性,适合进一步探索个性化AI视频创作场景。
下一篇文章我们会继续介绍如何使用图片和视频对 Wan2.1 模型进行 image-to-video 的 LoRA 微调。
References
[1] 边缘云玩转通义万相Wan2.1-T2V推理业务最佳实践: https://help.aliyun.com/zh/ens/use-cases/wan2-1-t2v-1-3b-best-practice-of-reasoning-business
[2] Diffusion-Pine Github: https://github.com/tdrussell/diffusion-pipe
Wan2.1 t2v模型Lora Fine-Tune的更多相关文章
- caffe简易上手指南(三)—— 使用模型进行fine tune
之前的教程我们说了如何使用caffe训练自己的模型,下面我们来说一下如何fine tune. 所谓fine tune就是用别人训练好的模型,加上我们自己的数据,来训练新的模型.fine tune相当于 ...
- caffe fine tune 复制预训练model的参数和freeze指定层参数
复制预训练model的参数,只需要重新copy一个train_val.prototxt.然后把不需要复制的层的名字改一下,如(fc7 -> fc7_new),然后fine tune即可. fre ...
- [机器学习]Fine Tune
Fine Tune顾名思义,就是微调.在机器学习中,一般用在迁移学习中,通过控制一些layer调节一些layer来达到迁移学习的目的.这样可以利用已有的参数,稍微变化一些,以适应新的学习任务.所以说, ...
- L23模型微调fine tuning
resnet185352 链接:https://pan.baidu.com/s/1EZs9XVUjUf1MzaKYbJlcSA 提取码:axd1 9.2 微调 在前面的一些章节中,我们介绍了如何在只有 ...
- 在imagenet预训模型上进行finetune
所谓fine tune就是用别人训练好的模型,加上我们自己的数据,来训练新的模型.fine tune相当于使用别人的模型的前几层,来提取浅层特征,然后在最后再落入我们自己的分类中. fine tune ...
- 使用神经网络来识别手写数字【译】(三)- 用Python代码实现
实现我们分类数字的网络 好,让我们使用随机梯度下降和 MNIST训练数据来写一个程序来学习怎样识别手写数字. 我们用Python (2.7) 来实现.只有 74 行代码!我们需要的第一个东西是 MNI ...
- 深度学习笔记(六)finetune
转自Caffe fine-tuning 微调网络 一般来说我们自己需要做的方向,比如在一些特定的领域的识别分类中,我们很难拿到大量的数据.因为像在ImageNet上毕竟是一个千万级的图像数据库,通常我 ...
- Object Detection · RCNN论文解读
转载请注明作者:梦里茶 Object Detection,顾名思义就是从图像中检测出目标对象,具体而言是找到对象的位置,常见的数据集是PASCAL VOC系列.2010年-2012年,Object D ...
- caffe中train过程的train数据集、val数据集、test时候的test数据集区别
val是validation的简称.training dataset 和 validation dataset都是在训练的时候起作用.而因为validation的数据集和training没有交集,所以 ...
- caffe中的fine-tuning
caffe finetune两种修改网络结构prototxt方法 第一种方法:将原来的prototxt中所有的fc8改为fc8-re.(若希望修改层的学习速度比其他层更快一点,可以将lr_mult改为 ...
随机推荐
- P3092 [USACO13NOV] No Change G 题解
传送门 题解 思路 看到 \(1\le k\le16\),我们想到状压DP. 以每枚硬币是否被使用为状态,对其进行枚举. 令 \(dp_i\) 表示状态 \(i\) 下最多能支付到第 \(dp_i\) ...
- 《<吕氏春秋> 刘本》
<<吕氏春秋> 刘本>(卷三) 编者 刘昱合 其他版本 <吕氏春秋>(卷一) <吕氏春秋>(卷二) <<吕氏春秋> 全本>(卷三 ...
- [PA2021] Od deski do deski 题解
好题好题,难者不会会者不难,我是前者. 实际上加入就可以合法的数是很好计算的.考虑现在所有前缀合法串后的字符实际上都可以满足条件. 容易想到根据是否合法设置状态.设 \(f_{i,j}/g_{i,j} ...
- Esp32s3(立创实战派)移植LVGL
Esp32s3(立创实战派)移植LVGL 移植: 使用软件EEZ studio 创建工程选择带EEZ Flow的,可以使用该软件更便捷的功能 根据屏幕像素调整画布为320*240 复制ui文件至工程 ...
- Typecho 引入 DPlayer
想在文章中插入视频,尝试 iframe 和 video 标签后发现 m3u8 流会触发下载无法播放,用 hls 该问题后,碰到了 403 forbbiden.联想到前些天新浪图床加 referrer ...
- Opencv | 图形学 | Mingw64 | 如何正确地用MinGW64编译与配置vscode的Opencv环境
如何正确地用MinGW64编译与配置vscode的Opencv环境 1.前情提要 最近有关于图形学的授课,教授开始布置的上机打码的代码实现作业了.虽说教授为了让我们省心,直接就整了个环境已经配置好的几 ...
- 基于ThreeJs的大屏3D地图(二)——气泡图、渐变柱体与热力图
前提 上一篇文章中我们完成了地图区块模型的渲染,在此基础之上本篇来讲解气泡图.3D柱形图以及3D热力图的实现方式. 首先,为了更好的关注点分离及与地图渲染模块的解耦,我们可以把所有类型的可视化元素抽象 ...
- 2D量测流程
- goframe API 自定义接口返回值处理
前言 goframe 默认使用了中间键 ghttp.MiddlewareHandlerResponse, HTTP Server 的数据返回通过 ghttp.Response 对象实现,ghttp.R ...
- dxTabbedMDIManager1关闭窗体
procedure TfrmJianKongXinXi.FormClose(Sender: TObject; var Action: TCloseAction);begin Action:=caFre ...