一个开箱即用的 LoRA 训练与标注小工具:后端基于 FastAPI,前端基于 React + Vite。支持图片上传、数据预处理、标签编辑与一键启动训练,并在训练完成后可将 LoRA 自动复制到本地 SD WebUI 的 models/Lora 目录。
EasyLora/: 训练与配置核心代码server.py: 轻量后端(HTTP + WebSocket)web/: 前端工程(Vite + React + Tailwind)workspace/: 数据工作区(原始上传、处理后数据与标签)outputs/: 训练输出(LoRA、state、checkpoint 等)user_settings.json: 用户设置(可在前端设置页保存)
- Python 3.10+(建议使用虚拟环境)
- Node.js 18+
- Windows 下建议已安装可用的 CUDA 与匹配版本的 PyTorch(否则将回退到 CPU 训练)
python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt
python server.py后端默认监听 http://127.0.0.1:8000。
cd web
npm ci
npm run dev前端默认在 http://127.0.0.1:5173,已通过开发代理转发 /api 与 /ws 到后端(见 web/vite.config.ts)。
- 打开前端页面,进入「设置」页,按需填写:
DEFAULT_SD_WEBUI_LORA_DIR: 训练完成后 LoRA 复制目标目录- 模型路径:如需要自定义 SDXL 或 SD1.5/SD2.1 基座
- 其他缓存/代理相关参数
- 上传图片至工作区(也可直接将图片放入
workspace/raw_uploads/) - 在「标注」页编辑或调整标签(对应文件位于
workspace/processed/dataset/*.txt) - 点击开始训练,前端通过 WebSocket 接收实时日志与进度
- 训练产物默认存放于
outputs/;若启用复制,会额外复制到DEFAULT_SD_WEBUI_LORA_DIR
- 配置合并逻辑见
EasyLora/config.py,默认值与注释已给出 - 用户覆盖写入
user_settings.json(也可直接编辑此文件) - 常用键:
DEFAULT_OUTPUT_DIR,DEFAULT_WORKSPACE_DIRDEFAULT_SD_WEBUI_LORA_DIR,COPY_TO_SD_WEBUI_ON_FINISHDEFAULT_MODEL_512/768/SDXLLR_SLIDER_MIN/LR_SLIDER_MAX、DEFAULT_STEPS_*、DEFAULT_RANK_*
- 停止当前训练(HTTP):
POST /api/stop - 获取/保存设置:
GET/POST /api/settings - 列出处理后图片:
GET /api/processed-images
这是一个来自社区的高级训练技巧,用于寻找特定数据集的最佳学习率。
第一阶段:探测
- 在设置面板中,将优化器选择为
DAdaptation (自动LR)。 - 程序会自动将 UNet LR 设为 1.0,TextEnc LR 设为 0.5(这是 DAdaptation 的基准推荐值)。
- 点击“开始训练”,并在下方日志区域观察输出。
- 等待几分钟,当日志中的学习率数值(或 D 值)趋于稳定时,记录下该数值,然后停止训练。
第二阶段:正式训练
- 将刚才记录的数值 除以 3(经验公式,适用于切换到 Lion)。
- 将优化器切换为
Lion或AdamW8bit。 - 将计算出的新数值填入学习率(或分别填入 UNet LR / TextEnc LR)。
- 开始正式训练。
cd web
npx playwright install
npm run test:e2e- Q: 首次启动很慢?
- A: 需要下载或首次加载权重,且数据会预处理到
workspace/processed/。
- A: 需要下载或首次加载权重,且数据会预处理到
若你希望跟踪权重文件,可安装并启用 Git LFS:
git lfs install
git lfs track "*.safetensors" "*.bin" "*.pt" "*.npz" "*.ckpt"
git add .gitattributes本项目采用 PolyForm Noncommercial License 1.0.0:
- 非商业用途:免费使用、修改与再发布
- 商业用途:需取得作者书面授权
完整条款参见 LICENSE 文件。

