前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CloudStudio之Flux LoRA训练速通手册

CloudStudio之Flux LoRA训练速通手册

作者头像
CloudStudio
发布2025-03-13 20:10:57
发布2025-03-13 20:10:57
25900
代码可运行
举报
文章被收录于专栏:《Cloud Studio》《Cloud Studio》
运行总次数:0
代码可运行

原文链接:https://itq5.com/posts/flux_lora


学习了一段时间的ComfyUI了,今天借助腾讯云CloudStudio(每月免费提供10000分钟T4显卡资源以及50000分钟CPU资源)平台训练一个自己的专属LoRA。

1 📝 通过ComfyUI工作流生成一致性素材(其他训练内容也可以自备)

1.1 导入工作流

  1. 下载1.生成人物形象.json工作流到本地 https://pan.itq5.com/d/%E5%B7%A5%E4%BD%9C%E6%B5%81/2.LoRA%E8%AE%AD%E7%BB%83/1.%E7%94%9F%E6%88%90%E4%BA%BA%E7%89%A9%E5%BD%A2%E8%B1%A1.json
  2. 1.生成人物形象.json拖拉到ComfyUI中加载。

1.2 安装缺失节点

  1. 在ComfyUI的管理器中点击安装缺失节点,将缺失的节点选中安装
  2. 安装完成后重启ComfyUI.

1.3 导入姿势图

  1. 下载姿势图.png到自己电脑。 https://pan.itq5.com/d/%E5%B7%A5%E4%BD%9C%E6%B5%81/2.LoRA%E8%AE%AD%E7%BB%83/%E5%A7%BF%E5%8A%BF%E5%9B%BE.png
  2. 上传姿势图.png到工作流。

1.4 下载模型

  1. 点击管理器,选择模型管理
  2. 搜索Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro并下载。
  3. 搜索face_yolov8m (bbox)并下载。
  4. 下载其他放大模型、UNET模型等,不一一列举。

1.5 选择模型

1.6 Python 3.11.11版本torch规避

  1. ComfyUI-AdvancedLivePortrait节点很长时间没更新版本,torch在新版本中默认开启了weights_only,需要手动关闭。
  2. 编辑/root/miniforge3/envs/python-3.11.11/lib/python3.11/site-packages/ultralytics/nn/tasks.py文件的857和837行,将ckpt = torch.load(file, map_location="cpu")修改成 ckpt = torch.load(file, map_location="cpu", weights_only=False)

1.7 在禁用框中开启第一个

  1. 开启1 按姿势图生成多角度图
  2. 正向提示词参考:

    plain

    代码语言:javascript
    代码运行次数:0
    运行
    复制
    A character sheet with a white background, featuring multiple views and displayed from various angles. The face is clearly visible. (It is a cute girl wearing a blue shirt and a white short skirt, in an anime style.)

    Plain text

    Copy

  3. 点击执行
  4. 观察出图是否满足要求

1.8 达成效果后开启后续任务

  1. 禁用框中开启剩余节点。
  2. 点击执行
  3. 待执行结束。

1.9 所有图保存导出

1.10 多余片段裁剪

2 🤗 fluxgym篇

项目地址cocktailpeanut/fluxgym: Dead simple FLUX LoRA training UI with LOW VRAM support

2.1 安装部署fluxgym

  1. 打开终端。
  2. 执行如下命令克隆项目。

    代码语言:javascript
    代码运行次数:0
    运行
    复制
    git clone https://github.com/cocktailpeanut/fluxgym
    cd fluxgym
    git clone -b sd3 https://github.com/kohya-ss/sd-scripts

  3. 防止和Comfyui项目冲突,执行conda create -n fluxgym python=3.11.11 -y创建虚拟环境。
    notion image
    notion image
  4. 执行/root/miniforge3/envs/fluxgym/bin/pip install --upgrade pip更新pip
    notion image
    notion image
  5. 执行如下命令安装sd-scripts的依赖

    代码语言:javascript
    代码运行次数:0
    运行
    复制
     cd /root/fluxgym/sd-scripts/
     /root/miniforge3/envs/fluxgym/bin/pip install -r requirements.txt

    notion image
    notion image
  6. 执行如下命令安装fluxgym的依赖

    代码语言:javascript
    代码运行次数:0
    运行
    复制
    cd /root/fluxgym/
    /root/miniforge3/envs/fluxgym/bin/pip install -r requirements.txt

  7. 最后,安装 pytorch Nightly

    代码语言:javascript
    代码运行次数:0
    运行
    复制
    /root/miniforge3/envs/fluxgym/bin/pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

2.2 模型地址修改

  1. 所有的模型大小加起来大致在30GB左右,如果你当前的内存不够存储,那我们可以先修改模型的存储路径到其它地方:打开 app.py文件,找到下图的两部分代码并将其修改为想变动的路径:

    代码语言:javascript
    代码运行次数:0
    运行
    复制
    vim /root/fluxgym/app.py

    修改前:

    修改后:

    python

    代码语言:javascript
    代码运行次数:0
    运行
    复制
    # cat app.py
    import os
    import sys
    ......
    def download(base_model):
        model = models[base_model]
        model_file = model["file"]
        repo = model["repo"]
    
        # download unet
        if base_model == "flux-dev" or base_model == "flux-schnell":
            unet_folder = "/workspace/ComfyUI/models/unet"
        else:
            unet_folder = f"/workspace/ComfyUI/models/unet/{repo}"
        unet_path = os.path.join(unet_folder, model_file)
        if not os.path.exists(unet_path):
            os.makedirs(unet_folder, exist_ok=True)
            gr.Info(f"Downloading base model: {base_model}. Please wait. (You can check the terminal for the download progress)", duration=None)
            print(f"download {base_model}")
            hf_hub_download(repo_id=repo, local_dir=unet_folder, filename=model_file)
    
        # download vae
        vae_folder = "/workspace/ComfyUI/models/vae"
        vae_path = os.path.join(vae_folder, "ae.safetensors")
        if not os.path.exists(vae_path):
            os.makedirs(vae_folder, exist_ok=True)
            gr.Info(f"Downloading vae")
            print(f"downloading ae.sft...")
            hf_hub_download(repo_id="cocktailpeanut/xulf-dev", local_dir=vae_folder, filename="ae.sft")
    
        # download clip
        clip_folder = "/workspace/ComfyUI/models/clip"
        clip_l_path = os.path.join(clip_folder, "clip_l.safetensors")
        if not os.path.exists(clip_l_path):
            os.makedirs(clip_folder, exist_ok=True)
            gr.Info(f"Downloading clip...")
            print(f"download clip_l.safetensors")
            hf_hub_download(repo_id="comfyanonymous/flux_text_encoders", local_dir=clip_folder, filename="clip_l.safetensors")
    
        # download t5xxl
        t5xxl_path = os.path.join(clip_folder, "t5xxl_fp16.safetensors")
        if not os.path.exists(t5xxl_path):
            print(f"download t5xxl_fp16.safetensors")
            gr.Info(f"Downloading t5xxl...")
            hf_hub_download(repo_id="comfyanonymous/flux_text_encoders", local_dir=clip_folder, filename="t5xxl_fp16.safetensors")
    ......
        model_config = models[base_model]
        model_file = model_config["file"]
        repo = model_config["repo"]
        if base_model == "flux-dev" or base_model == "flux-schnell":
            model_folder = "/workspace/ComfyUI/models/unet"
        else:
            model_folder = f"/workspace/ComfyUI/models/unet/{repo}"
        model_path = os.path.join(model_folder, model_file)
        pretrained_model_path = resolve_path(model_path)
    
        clip_path = resolve_path("/workspace/ComfyUI/models/clip/clip_l.safetensors")
        t5_path = resolve_path("/workspace/ComfyUI/models/clip/t5xxl_fp16.safetensors")
        ae_path = resolve_path("/workspace/ComfyUI/models/vae/ae.safetensors")
    
    ......
    if __name__ == "__main__":
        cwd = os.path.dirname(os.path.abspath(__file__))
        demo.launch(debug=True, show_error=True, allowed_paths=[cwd])

  2. 修改flux-dev下载地址和文件名称

    代码语言:javascript
    代码运行次数:0
    运行
    复制
    vim /root/fluxgym/models.yaml

    修改前:

    修改后:

    yaml

    代码语言:javascript
    代码运行次数:0
    运行
    复制
    # cat models.yaml
    # Add your own model here
    # <name that will show up on the dropdown>:
    #   repo: <the huggingface repo ID to pull from>
    #   base: <the model used to run inference with (The Huggingface "Inference API" widget will use this to generate demo images)>
    #   license: <follow the other examples. Any model inherited from DEV should use the dev license, schenll is apache-2.0>
    #   license_name: <follow the other examples. only needed for dev inherited models>
    #   license_link: <follow the other examples. only needed for dev inherited models>
    #   file: <the file name within the huggingface repo>
    flux-dev:
        repo: cocktailpeanut/xulf-dev
        base: black-forest-labs/FLUX.1-dev
        license: other
        license_name: flux-1-dev-non-commercial-license
        license_link: https://huggingface.co/black-forest-labs/FLUX.1-dev/blob/main/LICENSE.md
        file: flux1-dev.safetensors
    flux-schnell:
        repo: black-forest-labs/FLUX.1-schnell
        base: black-forest-labs/FLUX.1-schnell
        license: apache-2.0
        file: flux1-schnell.safetensors
    bdsqlsz/flux1-dev2pro-single:
        repo: bdsqlsz/flux1-dev2pro-single
        base: black-forest-labs/FLUX.1-dev
        license: other
        license_name: flux-1-dev-non-commercial-license
        license_link: https://huggingface.co/black-forest-labs/FLUX.1-dev/blob/main/LICENSE.md
        file: flux1-dev2pro.safetensors

    2.3 启动项目

  3. 执行如下命令启动程序。

    代码语言:javascript
    代码运行次数:0
    运行
    复制
    nohup /root/miniforge3/envs/fluxgym/bin/python3 /root/fluxgym/app.py  > /dev/null 2>&1 &

2.4 访问项目

  1. 网页访问项目

3 📓开始训练LoRA

3.1 配置基本参数

  1. The name of your LoRA输入LoRA名称。
  2. Trigger word/sentence输入触发词
  3. Base mode中选择基础模型flux-dev(按实际选择)
  4. VRAM中选择20G(按实际显卡选择)

3.2 上传预训练图

  1. Step 2.Dataset中上传处理后的预训练图。
  2. 点击Add AI captions with Florence-2

3.3 开始训练

  1. 点击Step 3. Train中的Start training开始训练

3.4 训练监控

  1. 训练进行中,检查显卡占用情况

    运行中观察Volatile GPU-Util的值,需要大于0,一般是99%或100%。 如果是0,说明停止训练了。

    训练中,会在/root/fluxgym/outputs/wdw/ 生成对应的lora模型。

4 📎 测试LoRA

  1. /root/fluxgym/outputs/wdw/wdw-000004.safetensors训练的模型,复制到/workspace/ComfyUI/models/loras目录下。

    bash

    代码语言:javascript
    代码运行次数:0
    运行
    复制
    cp wdw-000004.safetensors /workspace/ComfyUI/models/loras/

    Bash

    Copy

  2. 2.使用LoRa生成统一的人物形象.json下载到电脑并拖拉到ComfyUI上进行加载。 https://pan.itq5.com/d/%E5%B7%A5%E4%BD%9C%E6%B5%81/2.LoRA%E8%AE%AD%E7%BB%83/2.%E4%BD%BF%E7%94%A8LoRa%E7%94%9F%E6%88%90%E7%BB%9F%E4%B8%80%E7%9A%84%E4%BA%BA%E7%89%A9%E5%BD%A2%E8%B1%A1.json
  3. 在LoRA加载器中加载wdw-000004.safetensors
  4. 在正向提示词中输入触发词,并执行后查看结果。
    notion image
    notion image

END


免责声明:

  • 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
  • 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境由此引发的任何问题,作者概不负责

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 📝 通过ComfyUI工作流生成一致性素材(其他训练内容也可以自备)
    • 1.1 导入工作流
    • 1.2 安装缺失节点
    • 1.3 导入姿势图
    • 1.4 下载模型
    • 1.5 选择模型
    • 1.6 Python 3.11.11版本torch规避
    • 1.7 在禁用框中开启第一个
    • plain
    • 1.8 达成效果后开启后续任务
    • 1.9 所有图保存导出
    • 1.10 多余片段裁剪
  • 2 🤗 fluxgym篇
    • 2.1 安装部署fluxgym
    • 2.2 模型地址修改
    • python
    • yaml
    • 2.4 访问项目
  • 3 📓开始训练LoRA
    • 3.1 配置基本参数
    • 3.2 上传预训练图
    • 3.3 开始训练
    • 3.4 训练监控
  • 4 📎 测试LoRA
    • bash
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档