使用 DiffSynth-Studio
进行Lora训练
- 已经将训练好的Lora部署至LibLib 馨染
确认💫
本文训练Wan2.1 14B t2v模型
Wan2.1支持多种 Attention
,如果已安装以下任何 Attention,将根据优先级启用:
- Flash Attention 3
- Flash Attention 2
- Sage Attention
- torch SDPA(默认。建议使用 torch>=2.5.0 )
这里我使用默认
在租用云计算平台中镜像选择 Pytorch 2.5.1
选择一张A800 80GB显卡
注意 实测在L20 48GB显卡训练14B模型的Lora会爆显存
环境配置💻
先克隆仓库
git clone https://github.com/modelscope/DiffSynth-Studio.git
然后进入到DiffSynth-Studio
文件夹安装依赖
cd DiffSynth-Studio
pip install -e .
pip install peft lightning pandas
数据集🗒
准备⛽
数据集支持 图片
和 视频
, 其中 图片
视作1帧的视频.
数据集需要按照以下数据结构
data/example_dataset/
├── metadata.csv
└── train
├── video_00001.mp4
└── image_00002.jpg
其中 metadata.csv
文件:
file_name,text #这行一定要有, 此注释记得删除
video_00001.mp4,"video description" #video description中不能含有 "," 一句话描述最好, 此注释记得删除
image_00002.jpg,"video description"
处理🦾
原 README
示例
CUDA_VISIBLE_DEVICES="0" python examples/wanvideo/train_wan_t2v.py \
--task data_process \
--dataset_path data/example_dataset \
--output_path ./models \
--text_encoder_path "models/Wan-AI/Wan2.1-T2V-1.3B/models_t5_umt5-xxl-enc-bf16.pth" \
--vae_path "models/Wan-AI/Wan2.1-T2V-1.3B/Wan2.1_VAE.pth" \
--tiled \
--num_frames 81 \
--height 480 \
--width 832
假设
你的 数据集
在 /root/tmp/data
文件夹下
你的 模型文件
在 /root/tmp/Wan2.1-T2V-14B
文件下
注意 将 tmp
文件夹替换成你的文件夹名称
CUDA_VISIBLE_DEVICES="0" python examples/wanvideo/train_wan_t2v.py \
--task data_process \
--dataset_path /root/tmp/data \
--output_path ./models \
--text_encoder_path "/root/tmp/Wan2.1-T2V-14B/models_t5_umt5-xxl-enc-bf16.pth" \
--vae_path "/root/tmp/Wan2.1-T2V-14B/Wan2.1_VAE.pth" \
--tiled \
--num_frames 81 \
--height 480 \
--width 832
注意: 运行命令需要在 DiffSynth-Studio
目录下
cd DiffSynth-Studio
稍后, ./data
目录下会有
data/
├── metadata.csv
└── train
├── video_00001.mp4
├── video_00001.mp4.tensors.pth
├── video_00002.mp4
└── video_00002.mp4.tensors.pth
Lora训练📚
原 README
示例
CUDA_VISIBLE_DEVICES="0" python examples/wanvideo/train_wan_t2v.py \
--task train \
--train_architecture lora \
--dataset_path data/example_dataset \
--output_path ./models \
--dit_path "models/Wan-AI/Wan2.1-T2V-1.3B/diffusion_pytorch_model.safetensors" \
--steps_per_epoch 500 \
--max_epochs 10 \
--learning_rate 1e-4 \
--lora_rank 16 \
--lora_alpha 16 \
--lora_target_modules "q,k,v,o,ffn.0,ffn.2" \
--accumulate_grad_batches 1 \
--use_gradient_checkpointing
沿用上面的假设
训练14B模型需要在 dit_path
中输入模型目录, 用 ,
分隔
CUDA_VISIBLE_DEVICES="0" python examples/wanvideo/train_wan_t2v.py \
--task train \
--train_architecture lora \
--dataset_path /root/autodl-tmp/data \ #指定训练数据集的路径, 此注释记得删除
--output_path /root/autodl-tmp/ \ #模型保存目录, 此注释记得删除
--dit_path "
/root/tmp/Wan2.1-T2V-14B/diffusion_pytorch_model-00001-of-00006.safetensors,
/root/tmp/Wan2.1-T2V-14B/diffusion_pytorch_model-00002-of-00006.safetensors,
/root/tmp/Wan2.1-T2V-14B/diffusion_pytorch_model-00003-of-00006.safetensors,
/root/tmp/Wan2.1-T2V-14B/diffusion_pytorch_model-00004-of-00006.safetensors,
/root/tmp/Wan2.1-T2V-14B/diffusion_pytorch_model-00005-of-00006.safetensors,
/root/tmp/Wan2.1-T2V-14B/diffusion_pytorch_model-00006-of-00006.safetensors" \
--steps_per_epoch 500 \ #每个训练 epoch 的步数, 此注释记得删除
--max_epochs 10 \ #最大训练 epoch 数, 此注释记得删除
--learning_rate 1e-4 \ #设置学习率, 此注释记得删除
--lora_rank 16 \ #设置 LoRA 的秩 (rank), 此注释记得删除
--lora_alpha 16 \ #设置 LoRA 的缩放因子, 此注释记得删除
--lora_target_modules "q,k,v,o,ffn.0,ffn.2" \
--accumulate_grad_batches 1 \ #设置梯度累积的批次, 此注释记得删除
--use_gradient_checkpointing #启用梯度检查点, 此注释记得删除
训练
启动脚本后可以看到
下面这张就是默认参数下的显存占用, 可以看到需要61GB显存
视频生成🤖
首先现在当前目录下创建一个 py
文件
这里以 run.py
为例
其中 run.py
文件:
import torch
from diffsynth import ModelManager, WanVideoPipeline, save_video, VideoData
model_manager = ModelManager(torch_dtype=torch.bfloat16, device="cpu") # torch.bfloat16 高质量 & torch.float16 高速度
model_manager.load_models([
["/root/tmp/Wan2.1-T2V-14B/diffusion_pytorch_model-00001-of-00006.safetensors",
"/root/tmp/Wan2.1-T2V-14B/diffusion_pytorch_model-00002-of-00006.safetensors",
"/root/tmp/Wan2.1-T2V-14B/diffusion_pytorch_model-00003-of-00006.safetensors",
"/root/tmp/Wan2.1-T2V-14B/diffusion_pytorch_model-00004-of-00006.safetensors",
"/root/tmp/Wan2.1-T2V-14B/diffusion_pytorch_model-00005-of-00006.safetensors",
"/root/tmp/Wan2.1-T2V-14B/diffusion_pytorch_model-00006-of-00006.safetensors"],
"/root/tmp/Wan2.1-T2V-14B/models_t5_umt5-xxl-enc-bf16.pth",
"/root/tmp/Wan2.1-T2V-14B/Wan2.1_VAE.pth",
])
model_manager.load_lora("/root/tmp/epoch=9-step=5000.ckpt", lora_alpha=1.0) # Lora加载点, 填入你的Lora路径
pipe = WanVideoPipeline.from_model_manager(model_manager, device="cuda")
pipe.enable_vram_management(num_persistent_param_in_dit=None)
video = pipe(
prompt="", # 正向提示词 下面一个为默认反向提示词
negative_prompt="过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多",
num_inference_steps=20,# 默认50, 降低以提升生成速度
seed=0,
tiled=True # 降低单次处理所需的显存 提高视频质量
)
save_video(video, "video.mp4", fps=24, quality=5) # fps建议为30, 这里为了快速生成调成24
然后到 run.py 所在的目录下
运行:
python run.py
可以看到模型正在推理:
以下都是我上面给的参数运行时候所需要的硬件占用
- 显存占用
34GB
:
- 启动瞬间内存占用
64GB
:
推理结束后, 就可以看到视频文件啦🥰
追加💪
😭:
主播主播
你的提示词写得确实厉害
但还是太考验灵感了
有没有什么简单又高效的方法推荐一下
😎:
有的同学,有的
像这么省事的方法还有几种
都是当前AI圈热门技巧
告诉主播,你想学哪招
回归正题
用AI来辅助我们写提示词确实是个好方法
合适的模板请求头更是可以省去许多烦恼和时间
以下是我使用的 请求头模板
:
Wan2.1通义万象是一款多模态AI模型,能够处理文本、图像等多种输入形式,并生成高质量的文本、图像或问答内容。它基于深度学习技术,支持通过输入内容来指导模型生成符合需求的输出,描述要包含或省略的元素。
我在这里引入Wan2.1通义万象中的输入内容概念,它可以是文本、图像或其他形式的输入。
下面的输入内容是用来指导AI模型生成输出的。它包含了输出内容的各种细节,如主题、风格、情感基调、视觉元素等。
以下是用输入内容帮助AI模型生成输出的例子:
"纪实摄影风格画面,一只活泼的小狗在绿茵茵的草地上迅速奔跑。小狗毛色棕黄,两只耳朵立起,神情专注而欢快。阳光洒在它身上,使得毛发看上去格外柔软而闪亮。背景是一片开阔的草地,偶尔点缀着几朵野花,远处隐约可见蓝天和几片白云。透视感鲜明,捕捉小狗奔跑时的动感和四周草地的生机。中景侧面移动视角。"
请你注意直接开始给出输入内容,需要用自然语言描述,并且确保输出为英文: