基于 PPDiffusers 训练 AIGC 趣味模型【中国美食与花】

简介: 基于 PPDiffusers 训练 AIGC 趣味模型【中国美食与花】

image.png

image.png

  • 1. 准备工作

  • 1.1 环境安装
  • 1.2 Hugging Face Space 注册和登录


  • 2. 如何训练

  • 2.1 上传图片
  • 2.2 训练参数调整
  • 2.3 可视化训练过程
  • 2.4 挑选满意的权重上传至Huggingface


1. 准备工作


1.1 环境安装


\ 在开始之前,我们需要准备我们所需的环境,运行下面的命令安装依赖。为了确保安装成功,安装完毕请重启内核! (注意:这里只需要运行一次!) image.png


pip install "paddlenlp>=2.5.2" "ppdiffusers>=0.11.1" safetensors --user


# 请运行这里安装所需要的依赖环境!!
!pip install "paddlenlp>=2.5.2" safetensors "ppdiffusers>=0.11.1" --user
from IPython.display import clear_output
clear_output() # 清理很长的内容


1.2 Hugging Face Space 注册和登录


题目要求将模型上传到 Hugging Face,需要先注册、登录。

Tips:为了方便我们之后上传权重,我们需要登录 Huggingface Hub,想要了解更多的信息我们可以查阅 官方文档


!git config --global credential.helper store
from huggingface_hub import login
login()


VBox(children=(HTML(value='<center> <img\nsrc=https://huggingface.co/front/assets/huggingface_logo-noborder.sv…
  • tips:如何检测是否登录成功?

打开日志控制控制台,查看日志。

image.png

登录成功时,日志如下:

image.png


2. 如何训练模型,并上传到HF


数据获取,免费图片一大堆 unsplash.com/s/photos/ch…


2.1 上传图片


  • 首先,我们需要将所需训练的图片上传到aistudio上的文件夹, 我们可以通过👉拖拽上传 的方式,将我们所需的图片上传至指定的文件夹。
  • 准备好的图片直接解压缩。

image.png


# 解压缩数据集
!unzip -qoa data/data198584/food.zip -d food

2.2 训练参数调整


在训练过程中,我们可以尝试修改训练的默认参数,下面将从三个方面介绍部分参数。

👉主要修改的参数:

  • pretrained_model_name_or_path :想要训练的模型名称或者本地路径的模型,例如:"runwayml/stable-diffusion-v1-5",更多模型可参考 PaddleNLP 文档
  • instance_data_dir:训练图片所在的文件夹目录,我们可以将图片上传至aistudio项目。
  • instance_prompt:训练所使用的 Prompt 文本。
  • resolution:训练时图像的分辨率,建议为 512
  • output_dir:训练过程中,模型保存的目录。
  • checkpointing_steps:每隔多少步保存模型,默认为100步。
  • learning_rate:训练使用的学习率,当我使用 LoRA 训练模型的时候,我们需要使用更大的学习率,因此我们这里使用 1e-4 而不是 2e-6
  • max_train_steps:最大训练的步数,默认为500步。

👉可选修改的参数:

  • train_batch_size:训练时候使用的 batch_size,当我们的GPU显存比较大的时候可以加大这个值,默认值为4
  • gradient_accumulation_steps:梯度累积的步数,当我们GPU显存比较小的时候还想模拟大的训练批次,我们可以适当增加梯度累积的步数,默认值为1
  • seed:随机种子,设置后可以复现训练结果。
  • lora_rankLoRA 层的 rank 值,默认值为4,最终我们会得到 3.5MB 的模型,我们可以适当修改这个值,如:32、64、128、256 等。
  • lr_scheduler:学习率衰减策略,可以是"linear", "constant", "cosine"等。
  • lr_warmup_steps:学习率衰减前,warmup 到最大学习率所需要的步数。

👉训练过程中评估使用的参数:

  • num_validation_images:训练的过程中,我们希望返回多少张图片,默认值为4张图片。
  • validation_prompt:训练的过程中我们会评估训练的怎么样,因此我们需要设置评估使用的 prompt 文本。
  • validation_steps:每隔多少个 steps 评估模型,我们可以查看训练的进度条,知道当前到了第几个 steps

🔥Tips: 训练过程中会每隔 validation_steps 将生成的图片保存到 {你指定的输出路径}/validation_images/{步数}.jpg

image.png

👉权重上传的参数:

  • push_to_hub: 是否将模型上传到 huggingface hub,默认值为 False
  • hub_token: 上传到 huggingface hub 所需要使用的 token,如果我们已经登录了,那么我们就无需填写。
  • hub_model_id: 上传到 huggingface hub 的模型库名称, 如果为 None 的话表示我们将使用 output_dir 的名称作为模型库名称。

在下面的例子中,由于我们前面已经登录了,因此我们可以开启 push_to_hub 按钮,将最终训练好的模型同步上传到 huggingface.co 当我们开启push_to_hub后,等待程序运行完毕后会自动将权重上传到这个路径 huggingface.co/{你的用户名}/{你指定的输出路径} ,例如: huggingface.co/junnyu/lora…


!python train_dreambooth_lora.py \
  --pretrained_model_name_or_path="runwayml/stable-diffusion-v1-5"  \
  --instance_data_dir="./dogs" \
  --output_dir="lora_outputs" \
  --instance_prompt="a photo of sks dog" \
  --resolution=512 \
  --train_batch_size=1 \
  --gradient_accumulation_steps=1 \
  --checkpointing_steps=100 \
  --learning_rate=1e-4 \
  --lr_scheduler="constant" \
  --lr_warmup_steps=0 \
  --max_train_steps=500 \
  --seed=0 \
  --lora_rank=4 \
  --push_to_hub=False \
  --validation_prompt="a photo of sks dog in a bucket" \
  --validation_steps=100 \
  --num_validation_images=4


!python train_dreambooth_lora.py \
  --pretrained_model_name_or_path="runwayml/stable-diffusion-v1-5"  \
  --instance_data_dir="./food" \
  --output_dir="lora_outputs" \
  --instance_prompt="a photo of Chinese cuisine" \
  --resolution=512 \
  --train_batch_size=1 \
  --gradient_accumulation_steps=1 \
  --checkpointing_steps=100 \
  --learning_rate=1e-4 \
  --lr_scheduler="constant" \
  --lr_warmup_steps=0 \
  --max_train_steps=500 \
  --seed=0 \
  --lora_rank=4 \
  --push_to_hub=False \
  --validation_prompt="a photo of Chinese cuisine in a bucket" \
  --validation_steps=100 \
  --num_validation_images=4
W0313 11:03:13.695348  1657 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 11.2
W0313 11:03:13.699875  1657 gpu_resources.cc:91] device: 0, cuDNN Version: 8.2.
正在下载模型权重,请耐心等待。。。。。。。。。。
100%|███████████████████████████████████████████| 312/312 [00:00<00:00, 234kB/s]
100%|████████████████████████████████████████| 842k/842k [00:00<00:00, 14.6MB/s]
100%|████████████████████████████████████████| 512k/512k [00:00<00:00, 1.95MB/s]
100%|████████████████████████████████████████| 2.00/2.00 [00:00<00:00, 1.42kB/s]
100%|███████████████████████████████████████████| 478/478 [00:00<00:00, 400kB/s]
100%|███████████████████████████████████████████| 592/592 [00:00<00:00, 466kB/s]
•[33m[2023-03-13 11:03:16,946] [ WARNING]•[0m - You are using a model of type clip_text_model to instantiate a model of type . This is not supported for all configurations of models and can yield errors.•[0m
100%|███████████████████████████████████████████| 342/342 [00:00<00:00, 247kB/s]
100%|████████████████████████████████████████| 469M/469M [00:14<00:00, 33.9MB/s]
100%|████████████████████████████████████████| 319M/319M [00:15<00:00, 21.5MB/s]
100%|███████████████████████████████████████████| 610/610 [00:00<00:00, 534kB/s]
100%|██████████████████████████████████████| 3.20G/3.20G [01:58<00:00, 29.0MB/s]
100%|███████████████████████████████████████████| 807/807 [00:00<00:00, 636kB/s]
Train Steps:  20%|█▌      | 100/500 [00:50<03:14,  2.06it/s, epoch=0003, lr=0.0001, step_loss=0.313]
 Saved lora weights to lora_outputs/checkpoint-100
100%|███████████████████████████████████████████| 601/601 [00:00<00:00, 265kB/s]•[A
100%|███████████████████████████████████████████| 342/342 [00:00<00:00, 134kB/s]•[A
Train Steps:  40%|██▍   | 200/500 [02:02<02:22,  2.10it/s, epoch=0007, lr=0.0001, step_loss=0.00845]
 Saved lora weights to lora_outputs/checkpoint-200
Train Steps:  60%|████▊   | 300/500 [03:14<01:22,  2.44it/s, epoch=0011, lr=0.0001, step_loss=0.109]
 Saved lora weights to lora_outputs/checkpoint-300
Train Steps:  80%|██████▍ | 400/500 [04:26<00:44,  2.23it/s, epoch=0015, lr=0.0001, step_loss=0.136]
 Saved lora weights to lora_outputs/checkpoint-400
Train Steps: 100%|███████| 500/500 [05:39<00:00,  2.03it/s, epoch=0019, lr=0.0001, step_loss=0.0476]
 Saved lora weights to lora_outputs/checkpoint-500
Model weights saved in lora_outputs/paddle_lora_weights.pdparams
Train Steps: 100%|███████| 500/500 [06:31<00:00,  1.28it/s, epoch=0019, lr=0.0001, step_loss=0.0476]
•[0m

image.png

image.png


2.3 可视化训练过程


VisualDL使用参考:官方教程

我们可以参照如图所示的步骤,开启visualdl,然后查看训练过程中的指标变化。

image.png


2.4 挑选满意的权重上传至Huggingface


参数解释:

  • upload_dir:我们需要上传的文件夹目录。
  • repo_name:我们需要上传的repo名称,最终我们会上传到 huggingface.co/{你的用户名}/{你指定的repo名称}, 例如: huggingface.co/junnyu/lora….
  • pretrained_model_name_or_path:训练该模型所使用的基础模型。
  • prompt:搭配该权重需要使用的Prompt文本。

image.png


from utils import upload_lora_folder
upload_dir                    = "lora_outputs"                   # 我们需要上传的文件夹目录
repo_name                     = "lora_sks_dogs"                  # 我们需要上传的repo名称
pretrained_model_name_or_path = "runwayml/stable-diffusion-v1-5" # 训练该模型所使用的基础模型
prompt                        = "a photo of Chinese cuisine in a bucket" # 搭配该权重需要使用的Prompt文本
upload_lora_folder(
    upload_dir=upload_dir,
    repo_name=repo_name,
    pretrained_model_name_or_path=pretrained_model_name_or_path,
    prompt=prompt, 
)

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 自然语言处理
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
AIGC-Transformer 模型
8月更文挑战第6天
|
1月前
|
人工智能 弹性计算 芯片
就AI 基础设施的演进与挑战问题之AIGC场景下训练和推理的成本的问题如何解决
就AI 基础设施的演进与挑战问题之AIGC场景下训练和推理的成本的问题如何解决
|
2月前
|
自然语言处理
AIGC使用问题之GPT-1如何优化目标函数,如何做模型微调
AIGC使用问题之GPT-1如何优化目标函数,如何做模型微调
|
2月前
|
机器学习/深度学习 运维 算法
「AIGC算法」K-means聚类模型
**K-means聚类模型概览:** - 是无监督学习算法,用于数据集自动分组。 - 算法步骤:初始化质心,分配数据点,更新质心,迭代直至收敛。 - 关键点包括K的选择、初始化方法、收敛性和性能度量。 - 优点是简单快速,适合大样本,但对初始点敏感,需预设K值,且仅适于球形簇。 - 应用场景包括图像分割、市场分析、异常检测等。 - 示例展示了使用scikit-learn对Iris数据集和自定义CSV数据进行聚类。
41 0
「AIGC算法」K-means聚类模型
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
AIGC领域中的模型
7月更文挑战第6天
|
2月前
|
机器学习/深度学习 人工智能 大数据
AIGC使用问题之多模态大模型如何升级AIGC的内容创作能力
AIGC使用问题之多模态大模型如何升级AIGC的内容创作能力
|
2月前
|
人工智能
AIGC使用问题之视觉大模型如何提高AIGC的感知能力
AIGC使用问题之视觉大模型如何提高AIGC的感知能力
|
2月前
|
数据采集 机器学习/深度学习 算法
「AIGC算法」线性回归模型
线性回归是监督学习经典算法,用于预测连续值。分为简单线性(1个特征)和多元线性(多特征)两种。模型建立涉及数据预处理、特征选择、参数估计和损失函数最小化。Python中可使用`sklearn`库快速实现,例如,创建、训练模型,预测并可视化结果。广泛应用于多个领域。
30 0
|
2月前
|
数据采集 自然语言处理 PyTorch
AIGC之BERT模型
7月更文挑战第5天