云服务上进行Lora训练(俗称炼丹)👗👗👗

3,692 阅读2分钟

简介

不多说了,其实就是个简单的Lora模型训练的过程。丹成逐我三山去,不作巫阳云雨仙!!!

训练资源准备

步骤1:采集20+张图片

  1. 可以是拍照获得;
  2. 可以是视频提取;
  3. 可以是截图;

步骤2:将图片尺寸进行处理

可以自己手动剪切,也可以使用如下的命令行进行批量裁剪,或者使用www.onlinephotosoft.com/zh-CN/birme…

我使用的命令行裁剪的,命令如下

magick mogrify -gravity center -extent 1:1 -crop 3x3@ *.jpeg *.webp
magick mogrify -crop 768x768+0+0 *.jpeg *.webp *.png

步骤3:处理完的图片进行筛选

选取符合条件的图片,将不符合条件的图片剔除!

步骤4:使用SD的图像预处理

如图填写,选中生成描述,由于我们已经对图片进行了裁剪和处理,其他的选项就不选了。

image.png 处理完毕后,在我们的目标目录下,可以看到如下信息

这里是图片,及其对应的文本描述,可以点开看下,也可以通过自己补充一些文本描述。

训练基本要求

  1. 显存12G,训练768x768的图,这样可以避免大图的时候出现的图像重叠;
  2. 至少15张图片,每张图片的训练步数不少于100;
  3. 照片人像要求多角度,特别是脸部特写(尽量高分辨率),多角度,多表情,不同灯光效果,不同姿势等;
  4. 图片构图尽量简单,避免复杂的其他因素干扰;
  5. 可以单张脸部特写+单张服装按比例组成的一组照片(这里比例是3:1)
  6. 减少重复或高度相似的图片,避免造成过拟合;

训练软件安装

按照步骤,进行训练软件的安装。

地址如下:github.com/bmaltais/ko…

服务器运行

  1. 如果是在服务器上运行,先检查自己的驱动
nvidia-smi

  1. 如果是在服务器上运行,注意自己的驱动地址是不是正确,如果不正确,需要先指定

阿里云的默认PATH如下 image.png

可以在这个基础上,根据你CUDA的位置,增加路径:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-11.7/lib64"
export TF_ENABLE_ONEDNN_OPTS=0
  1. 如果是在服务器上启动的,那么执行命令如下
./gui.sh --listen 0.0.0.0 --server_port 7861 --inbrowser --share 

点击public URL之后,可以直接打开页面了,大致如下

训练设置

Dreambooth LORA

我们使用的是Dreambooth LORA,注意不要选错呀

设置Source Model

选择使用的主模型,比如真实风格。

image.png

设置Folders

设置资源地址,主要如下

  1. Image folder:训练图片所在的位置;
  2. Output folder:训练完成后,可以在这个地方找到已经训练完的Lora模型;
  3. Logging folder:日志文件

image.png

这三个文件夹都可以在控制台自己创建的,其中Image folder对应的地址,要上传我们的训练图片

训练图片: image.png

设置Training parameters

  1. 设置好尺寸
  2. 禁用buckets
  3. 如果训练报错NameError: name 'str2optimizer8bit_blockwise' is not defined,则可以将Optimizer改为AdamW.

image.png

开始训练

点击Train Model即可开始训练。

后台可以看到进度条:

image.png

训练了18张图片,大约需要25分钟左右。GPU是阿里云的A10,具体如下

image.png

可能发生的问题

缺少包:tensorflow、tensorrt等

如果后台报错,那么需要按照错误的提示,进行处理,比如缺少显卡的包,则需要安装对应的包。

比如安装tensorflow

pip install tensorflow==2.9.2

安装tensorrt

pip install nvidia-tensorrt -U --index-url https://pypi.ngc.nvidia.com

找不到文件:libnvinfer.so.8、libnvinfer.so.7等

可以通过下面命令行,查看缺失的文件的位置

find / -name libnvinfer.so.8

image.png 当然可以做关联,或者添加文件的PATH路径,让程序可以找到。

sudo ln -s /usr/local/lib/python3.10/dist-packages/tensorrt/libnvinfer.so.8 /usr/local/lib/python3.10/dist-packages/tensorrt/libnvinfer.so.7
sudo ln -s /usr/local/lib/python3.10/dist-packages/tensorrt/libnvinfer_plugin.so.8 /usr/local/lib/python3.10/dist-packages/tensorrt/libnvinfer_plugin.so.7
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/python3.10/dist-packages/tensorrt/:/usr/local/cuda-11.7/

大图欣赏

00101-687519684.png 00100-247642484.png 00099-247642483.png 00097-247642481.png 00096-2553106748.png