FramePack LoRA 实验

社区文章 发布于2025年4月19日

更新:经过进一步测试,我意识到重新训练可能不是必需的。也许对于某些 LoRA 需要,但对于其他 LoRA,只要它们包含运动(如视频),它们似乎就能正常工作。

我一直在尝试 FramePack 对 LoRA 的支持。由于它基于 Hunyuan Video,并使用了微调的 Transformer(和一些模型更改),我决定只是简单地替换常规的 Transformer,看看训练时会发生什么(我使用 finetrainers)。长话短说:训练进行中,模型有所改进。

尽管如此,它并不完美。要么需要更长时间的训练,要么 Transformer 的差异需要一个更适合的训练脚本。但希望这能激发其他人进行更多实验。

作为测试对象,我使用了我一个比较小众的 LoRA 1970年代武侠电影,因为它具有某种风格和一些独特的摄像机运动。(我本来可以只选择一种摄像机运动,不加风格,这样可以节省时间:耸肩)

我从我的 Hunyuan 视频 LoRA 的一个 t2v 生成中选取了第一张图像。这成为了基线。

image/webp

我想复现的是快速向右平移的动作。

提示:“一个穿着传统中式武术服的男人。然后相机向右平移,展示另一个穿着灰色武术服的男人。”

这是未修改的 FramePack

image/webp

它从提示中获取了一些信息,但进行了旋转而不是平移。它似乎不知道我想教给它的概念(很好)。(它在一些测试生成中确实平移了,但很慢。)

这是经过600步训练的LoRA,在我的3090上训练了大约2.5小时,混合了图片和视频片段。

image/webp

从质量上看,远不如基线,但另一方面,它的时长更长,训练不足,并且可能训练得不够充分。

细心的读者会发现,它并非 FramePack 演示中的默认分辨率。我选择了与原始 t2v 生成“原生”的分辨率,因为我注意到偏离训练分辨率会降低质量。因此,对于“无 LoRA”生成而言,这也可能是因为未选择 FramePack 首选分辨率而导致结果受影响。

我尝试了许多不同起始图像和提示的生成,而这是最能代表 LoRA 的一个。所以是的,这是精心挑选的。但这个实验的目的是证明 FramePack 可以被微调,即使现在也可以。

为了推理,我使用了我自己修改过的版本,它加入了 LoRA 支持

https://github.com/neph1/FramePack

我使用默认设置(除了分辨率)

更多示例

以下是一些不那么明显的更多示例。

与上面的提示类似,但我认为只有“摄像机向右平移以显示……”

无LoRA:image/webp

LoRA:image/webp

手部动作在多个训练剪辑中都很普遍。更好的风格一致性。

无LoRA:image/webp

动作很棒,比我的基线 Hunyuan LoRA 好得多。有点……泰拳?(我不是专家)

LoRA:image/webp

再说一次,我不是武术专家,但我认为它更像我的训练片段。动作更流畅?视觉风格也更好。

复现

我就是这样训练的。你应该可以使用其他训练器,例如diffusers-pipe。如果这种方式很复杂,我很抱歉,这是我的做法。

训练

下载 Hunyuan 视频模型 https://huggingface.co/hunyuanvideo-community/HunyuanVideo (我使用了 t2v 模型)

下载 FramePack 模型:https://huggingface.co/lllyasviel/FramePackI2V_HY(这只是 Transformer)

将 hunyuan 视频中的“transformer”文件夹替换为 framepack 中的文件夹。(我用软链接连接了它)

下载 finetrainers https://github.com/a-r-r-o-w/finetrainers (我使用 v0.0.1 标签,'git checkout v0.0.1')

可选:如果你想要用户界面,使用 https://github.com/neph1/finetrainers-ui(finetrainers v0.0.1 使用 v0.11.2)

这是我使用的配置

accelerate_config: uncompiled_1.yaml
allow_tf32: true
batch_size: 1
beta1: 0.9
beta2: 0.95
caption_column: caption
caption_dropout_p: 0.05
caption_dropout_technique: empty
checkpointing_limit: 10
checkpointing_steps: 250
data_root: 'path to your dataset'
dataloader_num_workers: 0
dataset_file: metadata.json
diffusion_options: ''
enable_model_cpu_offload: ''
enable_slicing: true
enable_tiling: true
epsilon: 1e-8
gpu_ids: '0'
gradient_accumulation_steps: 8
gradient_checkpointing: true
id_token: 70s_kungfu
image_resolution_buckets: 480x544 384x544 352x544 544x352 320x544 448x544 256x544
  224x544 192x544
layerwise_upcasting_modules: transformer
layerwise_upcasting_skip_modules_pattern: patch_embed pos_embed x_embedder context_embedder
  ^proj_in$ ^proj_out$ norm
layerwise_upcasting_storage_dtype: float8_e4m3fn
lora_alpha: 64
lr: 0.0003
lr_num_cycles: 1
lr_scheduler: linear
lr_warmup_steps: 50
max_grad_norm: 1
model_name: hunyuan_video
nccl_timeout: 1800
num_validation_videos: 0
optimizer: adamw
output_dir: where to put the results
pin_memory: true
precompute_conditions: true
pretrained_model_name_or_path: 'path to your hunyuan video model'
rank: 64
report_to: none
resume_from_checkpoint: ''
seed: 425
target_modules: to_q to_k to_v to_out.0
text_encoder_2_dtype: bf16
text_encoder_3_dtype: bf16
text_encoder_dtype: bf16
tracker_name: finetrainers
train_steps: 600
training_type: lora
transformer_dtype: bf16
use_8bit_bnb: ''
vae_dtype: bf16
validation_epochs: 0
validation_prompt_separator: ':::'
validation_prompts: ''
validation_steps: 10000
video_column: file
video_resolution_buckets: 1x480x544 1x384x544 1x352x544 1x544x352 1x320x544 1x448x544
  1x352x576 1x320x576 24x192x320 24x192x352 24x224x320 32x192x320 32x192x352 32x224x320
weight_decay: 0.001

推理

我使用了我自己修改过的 FramePack:https://github.com/neph1/FramePack

有一个 model_config.json 文件,你可以在其中添加一个可选的 lora 路径。

"lora": 
{ "path": "path to lora", 
"name": "pytorch_lora_weights.safetensors" <- or some other name. must be safetensors
}

我还创建了一个 PR:https://github.com/lllyasviel/FramePack/pull/157 在其中,你不需要 .json 文件,只需传递 '--lora path_to_the_lora'

默认情况下,LoRA 将不兼容 comfyui。你可以运行此脚本进行转换:https://github.com/a-r-r-o-w/finetrainers/blob/main/examples/formats/hunyuan_video/convert_to_original_format.py

但截至目前,我认为 FramePack 包装器还不支持 LoRA。

社区

你尝试过在 Framepack 上使用 Hunyuan LoRA 吗?是不是会出错或者怎么样?

·
文章作者

不,它“有效”。参考:https://github.com/lllyasviel/FramePack/issues/5#issuecomment-2813983753
在我的情况下,(运动)质量下降了。但我听说过其他情况下 Hunyuan LoRA 效果更好。所以值得一试。

我在 comfyui 中使用了 1 个 lora 与 framepack-f1。它运行良好。它确实增加了所需的显存。我尝试了 2 个 lora。它溢出太多到共享内存,所以我没有等待看它是否工作。这是我制作的 nsfw 视频的链接。当模型和 lora 首次加载时,它溢出到 dram,但很快稳定在 94% 用于剩余的生成。使用 rtx4090 24GB 显存。https://civitai.com/images/74621941
这是一个运动 LoRA,而不是角色 LoRA。

基础 F1 FP8 模型使用 19.4GB 显存 544x704 10秒。添加 LoRA(314k)使用 23.8GB 显存 400x544 10秒。运行时间是两倍。

·

@tedbiv 你好,你是怎么把它和framepack一起安装的?

实际上,在基础分辨率设置为 384 的情况下,10 秒的视频使用 LoRA 需要 15 分钟。大约 47 秒/次。上次运行 LoRA 设置为 0.6,整个运行从开始到结束用了 412 秒。

我还在设置我的新系统,这个系统我已经用了两周,配备了一块5090显卡、我旧的4090显卡、96GB DDR5-6600内存,操作系统是Ubuntu。在我旧的4090系统上,我98%的精力都集中在SD推理性能上,512x512分辨率下使用1步SDXS达到了294张图片/秒,并在2023年10月开始开创实时视频生成。我昨晚刚发现了github上的FramePack-Studio,它支持Loras和带时间戳的多提示合成。我昨晚刚开始研究它的代码,想知道是否可以在每个时间戳边界更改使用的Lora。

我现在真的需要将精力转移到 SD 和 LLM 的训练/微调或两者兼顾,因为我现在有了强大的计算能力。
我在github和discord上的ID是“aifartist”。

我一直愿意出钱寻求帮助,引导我完成训练过程。一旦我完成了这个,我觉得我就可以在该领域进行认真的开发了。

  • 40多年经验的退休软件架构师,现在将人工智能作为爱好。

看来这里可以发链接了,所以...

  1. 我的推特,有很多我早期实时视频工具的例子:https://x.com/Dan50412374
    向下滚动直到你看到一些有趣的例子。

  2. 我的 YouTube 频道,有一个演示我的工具的糟糕视频:https://www.youtube.com/watch?v=irUpybVgdDY
    我需要更新这个演示,并做得更好。

Hunyuan 生成平滑的视频需要很长时间,生成 10 秒的输出需要几分钟。一位可爱的女士在跳舞或走几步。每次你观看它,它看起来都一样。
LTXV 在 H200 上接近实时,但模糊和变形不太好。
我的 EndlessDreams 抖动,缺乏足够的时间一致性,但视频具有清晰的 sdxl 质量,并且不断变化。你坐下来用你的声音讲述我们的梦想,它们在视频中展现出来。你可以在 sdxl 模型的延迟空间中漫游多重宇宙的任何地方,平移和缩放。你可以在视频生成时进行绘制,以创造有趣的视觉效果。与 10 秒的视频不同,你可以用 EndlessDreams 探索数小时,不知道你会看到什么。邪恶的小丑拿着气球,僵尸,猫和鲜花,森林里小溪旁宁静的房子,以及几乎无限多的东西,无需等待。

听起来像是在打广告

注册登录 以评论