脸部LoRA训练项目:素材流水线 + Gradio控制台 + RunPod云端续炼方案(v7续炼完成)

This commit is contained in:
hmo
2026-08-10 10:10:34 +08:00
commit 77d0cbd0cb
29 changed files with 5898 additions and 0 deletions
+76
View File
@@ -0,0 +1,76 @@
# -*- coding: utf-8 -*-
"""
正式训练脚本:脸部 LoRAQwen-Image Edit-2511 / 16G 显存 / 32G 内存优化)
用法: python 训练脚本.py
前置: output/train_dataset/ 里有 img_001.jpg + img_001.txt 打标
"""
import json
import os
import subprocess
import sys
os.environ["PYTHONUTF8"] = "1"
os.environ["HF_HUB_OFFLINE"] = "1"
VENV = r"M:\AI\sd\musubi-tuner\.venv\Scripts"
PROJ = r"D:\F\NewI\opencode\daily-workspace\projects\脸部LoRA训练-Qwen-Image"
MODELS = r"M:\AI\sd\models\qwen-edit-2511"
# 动态目录配置(GUI 训练 Tab 写入 config/train_config.json
_cfg = {}
_cfg_path = os.path.join(PROJ, "config", "train_config.json")
if os.path.exists(_cfg_path):
try:
_cfg = json.load(open(_cfg_path, encoding="utf-8-sig")) # utf-8-sig 处理 BOM
except Exception as _e:
print(f"[WARN] train_config.json 读取失败: {_e}")
_cfg = {}
TRAIN_DATASET = _cfg.get("train_dataset", os.path.join(PROJ, "output", "train_dataset"))
CKPT_OUT = _cfg.get("output_dir", os.path.join(PROJ, "output", "checkpoints"))
# 动态生成数据集配置(image_directory 指向所选训练集)
_dataset_toml = os.path.join(PROJ, "config", "dataset_active.toml")
_toml_body = f"""# 由 GUI 训练 Tab 动态生成(勿手改)
[general]
resolution = 1024
caption_extension = ".txt"
batch_size = 1
enable_bucket = true
bucket_no_upscale = false
[[datasets]]
image_directory = "{TRAIN_DATASET.replace(chr(92), '/')}"
num_repeats = 1
"""
with open(_dataset_toml, "w", encoding="utf-8") as _f:
_f.write(_toml_body)
cmd = [
os.path.join(VENV, "accelerate.exe"), "launch",
"--num_cpu_threads_per_process", "1", "--mixed_precision", "bf16",
r"D:\AI\sd\musubi-tuner\src\musubi_tuner\qwen_image_train_network.py",
"--dit", os.path.join(MODELS, "transformer", "diffusion_pytorch_model-00001-of-00005.safetensors"),
"--vae", os.path.join(MODELS, "diffusion_pytorch_model.safetensors"),
"--text_encoder", os.path.join(MODELS, "text_encoder", "model-00001-of-00004.safetensors"),
"--model_version", "edit-2511",
"--dataset_config", _dataset_toml,
"--sdpa", "--mixed_precision", "bf16",
"--timestep_sampling", "shift", "--weighting_scheme", "none", "--discrete_flow_shift", "2.2",
"--optimizer_type", "adamw8bit", "--learning_rate", "5e-5",
"--gradient_checkpointing",
"--network_module", "networks.lora_qwen_image", "--network_dim", "16",
# 续炼:加载旧 LoRA 000060(脸已成形、细节未过度固化),用重调后的 v7 数据增量修正标签
"--network_weights", r"M:\AI\sd\novelai-webui-aki-v3-r\models\Lora\v6\myface_lora-000060.safetensors",
"--fp8_base", "--fp8_scaled", "--fp8_vl", "--blocks_to_swap", "24",
"--max_train_epochs", "50", "--save_every_n_epochs", "10", "--seed", "42",
"--sample_prompts", os.path.join(PROJ, "config", "sample_prompts.txt"),
"--sample_every_n_epochs", "10",
"--output_dir", CKPT_OUT,
"--output_name", "myface_v7",
]
print("训练集:", TRAIN_DATASET)
print("输出目录:", CKPT_OUT)
print("CMD:", " ".join(cmd))
r = subprocess.run(cmd)
print("EXIT CODE:", r.returncode)
sys.exit(r.returncode)