LoRA-scripts(SD-Trainer)

LoRA & Dreambooth 训练图形界面 & 脚本预设 & 一键训练环境

项目原地址:GitHub - Akegarasu/lora-scripts


一、必要依赖:

  • Python 3.10
  • Git

二、获取Lora-Scripts

克隆带子模块的仓库

git clone --recurse-submodules https://github.com/Akegarasu/lora-scripts

三、Conda创建环境与依赖

安装依赖

如果你和我一样是Conda环境请看此内容,如果你不是可以忽略此步骤,直接移步四、运行安装脚本步骤。

Conda虚拟环境创建

conda create -n lora python=3.10
conda activate lora

请编辑根目录下的编辑 install.bash,并将create_venv=true 项目更改为 false

#!/usr/bin/bash

script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
create_venv=false

四、运行安装脚本

给予install.bash运行权限

sudo chmod 755 install.bash

运行安装脚本,会自动安装所需的依赖和虚拟环境

如果完成了三、Conda创建环境与依赖,则会自动调用Conda的Python环境
./install.bash

五、配置与运行

运行gui.py将会启动并自动下载所需的一些额外依赖,并运行在localhost:29080端口,TensorBoard运行在localhost:29070端口

python gui.py --listen --port 29080 --tensorboard-port 29070 --tensorboard-host 0.0.0.0

程序参数

参数名称类型默认值描述
--hoststr"127.0.0.1"服务器的主机名
--portint28000运行服务器的端口
--listenboolfalse启用服务器的监听模式
--skip-prepare-environmentboolfalse跳过环境准备步骤
--disable-tensorboardboolfalse禁用 TensorBoard
--disable-tageditorboolfalse禁用标签编辑器
--tensorboard-hoststr"127.0.0.1"运行 TensorBoard 的主机
--tensorboard-portint6006运行 TensorBoard 的端口
--localizationstr 界面的本地化设置
--devboolfalse开发者模式,用于禁用某些检查

编写启动脚本

先创建一个启动脚本

nano start.sh

写入脚本代码:

#!/bin/bash
#用于激活Conda环境
eval "$(conda shell.bash hook)"
conda activate lora
#export CUDA_VISIBLE_DEVICES=(多卡时,决定启用哪些卡)
#export TOKENIZERS_PARALLELISM=false
#export NCCL_SHM_DISABLE=1
python gui.py --listen --port 29080 --tensorboard-port 29070 --tensorboard-host 0.0.0.0 

其它:遇到的问题处理

NCCL共享内存错误

由于环境在Docker内,共享内存/dev/shm只有64M,导致炼丹报错:

[rank3]: torch.distributed.DistBackendError: NCCL error in: 
../torch/csrc/distributed/c10d/NCCLUtils.hpp:275, unhandled system error (run with NCCL\_DEBUG=INFO for details), NCCL version 2.20.5
[rank3]: ncclSystemError: System call (e.g. socket, malloc) or external library call failed or device error.  
[rank3]: Last error:
[rank3]: Error while creating shared memory segment /dev/shm/nccl-Bvx3cU (size 9637888)

1.尝试增大共享内存空间

  • 可以通过修改 /etc/fstab 文件增加 /dev/shm的大小

2.临时禁用共享内存使用

  • 如果你无法调整 Docker 容器的启动参数,仍可以使用禁用共享内存方法
export NCCL_SHM_DISABLE=1

3.清理共享内存空间

  • 如果你无法扩大 /dev/shm 的空间,可能需要清理一些系统进程以释放更多共享内存。
  • 使用以下命令查看和释放 /dev/shm 中正在使用的文件
ls -lh /dev/shm

'frontend/dist' does not exist 报错

这是由于在Linux没有创建前端页面导致的错误,虽然看到端口启用了,但是实际访问却是空的
只需要在Akegarasu的仓库获取最新的前端即可
获取Dist目录:GitHub - Akegarasu/lora-gui-dist

将其放入 'frontend' 目录下即可:

frontend/
└── dist
    ├── 404.html
    ├── assets
    ├── dreambooth
    ├── index.html
    ├── lora
    ├── other
    ├── tageditor.html
    ├── tagger.html
    ├── task.html
    └── tensorboard.html

报错提示:RuntimeError: Couldn't install xxx

Traceback (most recent call last):
  File "/root/lora-scripts/gui.py", line 93, in <module>
    launch()
  File "/root/lora-scripts/gui.py", line 59, in launch
    prepare_environment(disable_auto_mirror=args.disable_auto_mirror)
  File "/root/lora-scripts/mikazuki/launch_utils.py", line 288, in prepare_environment
    validate_requirements("requirements.txt")
  File "/root/lora-scripts/mikazuki/launch_utils.py", line 197, in validate_requirements
    run_pip(f"install {line}", line, live=True)
  File "/root/lora-scripts/mikazuki/launch_utils.py", line 253, in run_pip
    return run(f'"{python_bin}" -m pip {command}', desc=f"Installing {desc}", errdesc=f"Couldn't install {desc}", live=live)
  File "/root/lora-scripts/mikazuki/launch_utils.py", line 95, in run
    raise RuntimeError(f"""{errdesc or 'Error running command'}.
RuntimeError: Couldn't install numpy<=2.0. 
Command: "/root/lora-scripts/venv/bin/python" -m pip install numpy<=2.0
Error code: 2

这是由于缺少依赖库导致的错误,从报错的信息来看,RuntimeError: Couldn't install numpy<=2.0. ,这里是因为numpy的版本不受支持导致的:

可以先运行前尝试执行:

pip install "numpy<=2.0"

如果显示安装成功却还是无法启动,可能是因为问题出在脚本尝试安装 numpy<=2.0 时,Shell 将 <=2.0 解释为文件重定向符号,而不是版本约束条件。因为脚本使用了 subprocess.run() 或类似的方式调用 pip,但没有正确处理版本约束条件。

尝试修改脚本逻辑:
打开 mikazuki/launch_utils.py 文件,找到 run_pip() 函数

找到以下代码:

return run(f'"{python_bin}" -m pip {command}', desc=f"Installing {desc}", errdesc=f"Couldn't install {desc}", live=live)

改为:

return run(f'"{python_bin}" -m pip install "{desc}"', desc=f"Installing {desc}", errdesc=f"Couldn't install {desc}", live=live)

训练失败:HTTPSConnectionPool(host='huggingface.co'...

requests.exceptions.SSLError: (MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): 
Max retries exceeded with url: /openai/clip-vit-large-patch14/resolve/main/tokenizer_config.json 
(Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate 
verify failed: self-signed certificate in certificate chain (_ssl.c:1007)')))"), 
'(Request ID: bc43902a-c5ad-4e5b-baea-a5848d6fbcfb)')
21:22:35-282538 ERROR    Training failed / 训练失败

这大概率是因为你的计算机无法访问'huggingface'导致的,可以使用VPN或修改成国内镜像源:

export HF_ENDPOINT=https://hf-mirror.com

如果需要临时使用,直接在运行前执行。
如果需要永久使用,请使用vinano添加到到 ~/.bashrc 的末尾
然后执行更新环境变量: source ~/.bashrc 即可

最后修改:2025 年 02 月 20 日
喜欢就请我喝一杯奶茶吧~