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
程序参数
参数名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
--host | str | "127.0.0.1" | 服务器的主机名 |
--port | int | 28000 | 运行服务器的端口 |
--listen | bool | false | 启用服务器的监听模式 |
--skip-prepare-environment | bool | false | 跳过环境准备步骤 |
--disable-tensorboard | bool | false | 禁用 TensorBoard |
--disable-tageditor | bool | false | 禁用标签编辑器 |
--tensorboard-host | str | "127.0.0.1" | 运行 TensorBoard 的主机 |
--tensorboard-port | int | 6006 | 运行 TensorBoard 的端口 |
--localization | str | 界面的本地化设置 | |
--dev | bool | false | 开发者模式,用于禁用某些检查 |
编写启动脚本
先创建一个启动脚本
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
如果需要临时使用,直接在运行前执行。
如果需要永久使用,请使用vi
或nano
添加到到 ~/.bashrc
的末尾
然后执行更新环境变量: source ~/.bashrc
即可