★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>

【赛题链接】:https://github.com/PaddlePaddle/Paddle/issues/50631#task105

【PaddlePaddle Hackathon 第四期 任务总览】:https://github.com/PaddlePaddle/Paddle/issues/50629

【队名】:花开富贵

【模型简介】:机甲风炫酷恐龙一枚~~

【模型链接】: https://huggingface.co/jjyaoao/Gundam_Dinosaur/tree/main/

【AI Studio 项目地址】:https://aistudio.baidu.com/aistudio/projectdetail/5932453

【AI Studio 应用中心】:AIGC高达恐龙

一、创意简介&效果展示

高达恐龙

A picture of a dinosaur accompanies Gundam

将高达和恐龙的特征融合在一起:可以将高达的机器人造型和恐龙的身体特征进行融合,例如给高达增加像恐龙一样的鳞片、尾巴和爪子等,或者给恐龙添加像高达一样的机械部件和装备。





二、完整训练流程

1.paddlenlp安装

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

2. Huggingface介绍

HuggingFace简介

Hugging Face Hub和 Github 类似,都是Hub(社区)。Hugging Face可以说的上是机器学习界的Github。Hugging Face为用户提供了以下主要功能:

hugging face在NLP领域最出名,其提供的模型大多都是基于Transformer的。为了易用性,Hugging Face还为用户提供了以下几个项目:

  • Transformers(github, 官方文档): Transformers提供了上千个预训练好的模型可以用于不同的任务,例如文本领域、音频领域和CV领域。该项目是HuggingFace的核心,可以说学习HuggingFace就是在学习该项目如何使用。
  • Datasets(github, 官方文档): 一个轻量级的数据集框架,主要有两个功能:①一行代码下载和预处理常用的公开数据集; ② 快速、易用的数据预处理类库。
  • Accelerate(github, 官方文档): 帮助Pytorch用户很方便的实现 multi-GPU/TPU/fp16。
  • Space(链接):Space提供了许多好玩的深度学习应用,可以尝试玩一下。

查找Hugging Face模型

本节来介绍一下如何通过Hugging Face找到你需要的模型。

首先,我们需要到来到官网的模型模块。之后我们会看到如下界面:

其主要包含三部分:

  1. Filter: 用于筛选你想要的模型
  2. 模型列表: 展示了可使用的模型。不带前缀的是官方提供的模型,例如gpt2,而带前缀的是第三方提供的模型。
  3. 搜索框:你可以通过搜索框按名字搜索模型。

当你点进去你的模型后,你会来到如下页面:

该页面主要的几个部分:

  1. 模型介绍(Model Card): 我们可以通过该文档查看该模型都提供了哪些功能,模型的表现等。
  2. 模型文件(Files and versions): 从该模块可以下载模型文件,一般包含多种框架的(TF、Pytorch等)模型文件和配置文件等,可以用于离线加载。
  3. 测试模型(Hosted inference API): 可以直接通过该模块测试自己的模型。同时Hugging Face也提供了Http API可以调用,这样就不需要本地部署了。详情请参考:https://huggingface.co/docs/api-inference/index
  4. 使用该模型的应用(Spaces using …):这里展示了使用该模型的应用,可以点进去玩一玩。
  5. 代码样例(Use in Transformers):你可以通过该模块直接查看该模型的使用方式,直接拷贝代码到项目里就可以用了。

使用Hugging Face模型

Transformers项目提供了几个简单的API帮助用户使用Hugging Face模型,而这几个简单的API统称为AutoClass(官方文档链接),包括:

  1. AutoTokenizer: 用于文本分词
  2. AutoFeatureExtractor: 用于特征提取
  3. AutoProcessor: 用于数据处理
  4. AutoModel: 用于加载模型

它们的使用方式均为: AutoClass.from_pretrain("模型名称"),然后就可以用了。例如:

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
tokenizer("I'm learning deep learning.")
1234
{'input_ids': [101, 1045, 1005, 1049, 4083, 2784, 4083, 1012, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1]}
1

通常一个模型会包含上述4个中的部分功能,例如,对于bert-base-uncased模型,就包含“分词”和“模型”两项功能,我们可以通过代码样例(Use in Transformers) 模块查看:

也不是所有的模型都可以使用AutoModel,具体还要看模型的代码示例。
参考资料来源: https://blog.csdn.net/zhaohongfei_358/article/details/126224199

3. Huggingface的注册与登录

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

  • 注册和登录:https://huggingface.co/join

  • 获取登录 Token

  • Aistudio 登录 Huggingface Hub

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

3. 在当前环境登录Huggingface

!git config --global credential.helper store
from huggingface_hub import login
login()
Token is valid.
Your token has been saved in your configured git credential helpers (store).
Your token has been saved to /home/aistudio/.cache/huggingface/token
Login successful
  • tips:如何检测是否登录成功?

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

登录成功时,日志如下:

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

上传图片
  • 首先,我们需要将所需训练的图片上传到aistudio上的文件夹, 我们可以通过👉拖拽上传 的方式,将我们所需的图片上传至指定的文件夹。
  • 在这里,我们已经在👉Dinosaur文件夹准备好了几张图片,以下展示三张。


!python train_dreambooth_lora.py \
  --pretrained_model_name_or_path="runwayml/stable-diffusion-v1-5"  \
  --instance_data_dir="./Dinosaur" \
  --output_dir="lora_outputs" \
  --instance_prompt="A picture of a dinosaur" \
  --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=1000 \
  --seed=0 \
  --lora_rank=4 \
  --push_to_hub=False \
  --validation_prompt="A picture of a dinosaur accompanies Gundam" \
  --validation_steps=100 \
  --num_validation_images=2
W0415 18:17:11.836896  2653 gpu_resources.cc:85] Please NOTE: device: 0, GPU Compute Capability: 8.0, Driver API Version: 11.2, Runtime API Version: 11.2
W0415 18:17:11.843729  2653 gpu_resources.cc:115] device: 0, cuDNN Version: 8.2.
正在下载模型权重,请耐心等待。。。。。。。。。。
100%|███████████████████████████████████████████| 312/312 [00:00<00:00, 276kB/s]
100%|████████████████████████████████████████| 842k/842k [00:00<00:00, 5.14MB/s]
100%|████████████████████████████████████████| 512k/512k [00:00<00:00, 2.13MB/s]
100%|████████████████████████████████████████| 2.00/2.00 [00:00<00:00, 1.74kB/s]
100%|███████████████████████████████████████████| 478/478 [00:00<00:00, 521kB/s]
100%|███████████████████████████████████████████| 592/592 [00:00<00:00, 470kB/s]
[33m[2023-04-15 18:17:15,804] [ 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
Downloading (…)cheduler_config.json: 100%|█████| 342/342 [00:00<00:00, 53.9kB/s]
100%|███████████████████████████████████████████| 592/592 [00:00<00:00, 556kB/s]
Downloading (…)model_state.pdparams: 100%|███| 492M/492M [01:07<00:00, 7.28MB/s]
Downloading (…)v1-5/vae/config.json: 100%|██████| 610/610 [00:00<00:00, 249kB/s]
Downloading (…)model_state.pdparams: 100%|███| 335M/335M [00:38<00:00, 8.61MB/s]
Downloading (…)1-5/unet/config.json: 100%|██████| 807/807 [00:00<00:00, 329kB/s]
Downloading (…)model_state.pdparams: 100%|█| 3.44G/3.44G [01:46<00:00, 32.3MB/s]
Train Steps:  10%|▌     | 100/1000 [00:21<02:40,  5.60it/s, epoch=0019, lr=0.0001, step_loss=0.0851]
 Saved lora weights to lora_outputs/checkpoint-100

Downloading (…)1-5/model_index.json: 100%|██████| 601/601 [00:00<00:00, 117kB/s][A

Fetching 13 files:   0%|                                 | 0/13 [00:00<?, ?it/s][A

Downloading (…)rocessor_config.json: 100%|█████| 342/342 [00:00<00:00, 68.5kB/s][A[A

Fetching 13 files:  15%|███▊                     | 2/13 [00:00<00:00, 16.20it/s][A

Downloading (…)er/model_config.json: 100%|██████| 463/463 [00:00<00:00, 196kB/s][A[A


Downloading (…)okenizer_config.json: 100%|██████| 312/312 [00:00<00:00, 115kB/s][A[A

Fetching 13 files:  54%|█████████████▍           | 7/13 [00:00<00:00, 23.24it/s][A

Downloading (…)tokenizer/vocab.json:   0%|           | 0.00/862k [00:00<?, ?B/s][A[A

Downloading (…)tokenizer/vocab.json: 100%|███| 862k/862k [00:00<00:00, 1.53MB/s][A[A


Downloading (…)er/added_tokens.json: 100%|█████| 2.00/2.00 [00:00<00:00, 523B/s][A[A


Downloading (…)cial_tokens_map.json: 100%|██████| 478/478 [00:00<00:00, 163kB/s][A[A

Fetching 13 files:  77%|██████████████████▍     | 10/13 [00:01<00:00,  7.34it/s][A

Downloading (…)tokenizer/merges.txt:   0%|           | 0.00/525k [00:00<?, ?B/s][A[A

Downloading (…)tokenizer/merges.txt: 100%|███| 525k/525k [00:00<00:00, 1.13MB/s][A[A

Fetching 13 files: 100%|████████████████████████| 13/13 [00:01<00:00,  7.57it/s][A
Train Steps:  20%|█▍     | 200/1000 [00:50<02:22,  5.60it/s, epoch=0039, lr=0.0001, step_loss=0.408]
 Saved lora weights to lora_outputs/checkpoint-200

Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 14768.68it/s][A
Train Steps:  30%|█▊    | 300/1000 [01:21<02:04,  5.63it/s, epoch=0059, lr=0.0001, step_loss=0.0729]
 Saved lora weights to lora_outputs/checkpoint-300

Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 15033.35it/s][A
Train Steps:  40%|██▍   | 400/1000 [01:48<01:49,  5.47it/s, epoch=0079, lr=0.0001, step_loss=0.0712]
 Saved lora weights to lora_outputs/checkpoint-400

Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 14147.89it/s][A
Train Steps:  50%|███▌   | 500/1000 [02:16<01:28,  5.65it/s, epoch=0099, lr=0.0001, step_loss=0.308]
 Saved lora weights to lora_outputs/checkpoint-500

Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 16325.14it/s][A
Train Steps:  60%|███▌  | 600/1000 [02:42<01:11,  5.63it/s, epoch=0119, lr=0.0001, step_loss=0.0652]
 Saved lora weights to lora_outputs/checkpoint-600

Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 15033.35it/s][A
Train Steps:  70%|████▉  | 700/1000 [03:10<00:52,  5.67it/s, epoch=0139, lr=0.0001, step_loss=0.037]
 Saved lora weights to lora_outputs/checkpoint-700

Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 13769.18it/s][A
Train Steps:  80%|█████▌ | 800/1000 [03:39<00:35,  5.68it/s, epoch=0159, lr=0.0001, step_loss=0.169]
 Saved lora weights to lora_outputs/checkpoint-800

Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 15150.31it/s][A
Train Steps:  90%|██████▎| 900/1000 [04:06<00:18,  5.47it/s, epoch=0179, lr=0.0001, step_loss=0.212]
 Saved lora weights to lora_outputs/checkpoint-900

Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 14345.16it/s][A
Train Steps: 100%|█████| 1000/1000 [04:34<00:00,  5.43it/s, epoch=0199, lr=0.0001, step_loss=0.0823]
 Saved lora weights to lora_outputs/checkpoint-1000

Fetching 13 files: 100%|█████████████████████| 13/13 [00:00<00:00, 12560.69it/s][A
Model weights saved in lora_outputs/paddle_lora_weights.pdparams

Fetching 15 files: 100%|█████████████████████| 15/15 [00:00<00:00, 12345.87it/s][A
Train Steps: 100%|█████| 1000/1000 [05:04<00:00,  3.28it/s, epoch=0199, lr=0.0001, step_loss=0.0823]
[0m

5. 上传模型

from utils import upload_lora_folder
# 使用前请确保已经登录了huggingface hub!
upload_dir                    = "lora_outputs"                      # 我们需要上传的文件夹目录
repo_name                     = "Gundam_Dinosaur"                     # 我们需要上传的repo名称
pretrained_model_name_or_path = "runwayml/stable-diffusion-v1-5"    # 训练该模型所使用的基础模型
prompt                        = "A picture of a dinosaur accompanies Gundam"    # 搭配该权重需要使用的Prompt文本

upload_lora_folder(
    upload_dir=upload_dir,
    repo_name=repo_name,
    pretrained_model_name_or_path=pretrained_model_name_or_path,
    prompt=prompt, 
)
paddle_lora_weights.pdparams:   0%|          | 0.00/3.23M [00:00<?, ?B/s]



Upload 1 LFS files:   0%|          | 0/1 [00:00<?, ?it/s]


模型权重已经上传到了, https://huggingface.co/jjyaoao/Gundam_Dinosaur/tree/main/

0/1 [00:00<?, ?it/s]

模型权重已经上传到了, https://huggingface.co/jjyaoao/Gundam_Dinosaur/tree/main/

https://huggingface.co/jjyaoao/Gundam_Dinosaur/tree/main/

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐