llm learning

Ethereal Lv4

1. LoRA

主要参考

Hoper-J/AI-Guide-and-Demos-zh_CN: 这是一份入门AI/LLM大模型的逐步指南,包含教程和演示代码,带你从API走进本地大模型部署和微调,代码文件会提供Kaggle或Colab在线版本,即便没有显卡也可以进行学习。项目中还开设了一个小型的代码游乐场🎡,你可以尝试在里面实验一些有意思的AI脚本。同时,包含李宏毅 (HUNG-YI LEE)2024生成式人工智能导论课程的完整中文镜像作业。

AI-Guide-and-Demos-zh_CN/Guide/16. 用 LoRA 微调 Stable Diffusion:拆开炼丹炉,动手实现你的第一次 AI 绘画.md at master · Hoper-J/AI-Guide-and-Demos-zh_CN

1.1 安装必要包

1
pip install torch torchvision transformers diffusers peft Pillow tqdm pyyaml accelerate

1.2 设置huggingface镜像

1
# export HF_ENDPOINT=https://hf-mirror.com
1
2
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com/"

1.3 代码梳理

1.3.1 加载模型

  1. 加载噪声调度器:noise_scheduler = DDPMScheduler.from_pretrained

  2. 加载 Tokenizer:tokenizer = CLIPTokenizer.from_pretrained

  3. 加载 CLIP 文本编码器:text_encoder = CLIPTextModel.from_pretrained

  4. 加载 VAE 模型:vae = AutoencoderKL.from_pretrained

  5. 加载 UNet 模型:unet = UNet2DConditionModel.from_pretrained

  6. 转换为LoRA模型:get_peft_model(text_encoder, lora_config)PeftModel.from_pretrained(text_encoder, ...)

  7. 获取可训练LoRA参数:text_encoder.print_trainable_parameters()

  8. 冻结不需要训练模型的参数:vae.requires_grad_(False)

1.3.2 准备数据

  1. 自己定义数据类:Text2ImageDataset(定义__init____getitem____len__方法)

  2. 设定数据集预处理方法:transforms.Compose

  3. 加载数据集加载方法:torch.utils.data.DataLoadercollate_fn

1.3.3 准备学习器

prepare_optimizer使用AdamW学习器

1.3.4 准备学习率调节器

get_scheduler

1.3.5 切入训练模式

1
2
unet.train()
text_encoder.train()

1.3.6 计算损失

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 获取原图像向量
## 编码图像为潜在表示(latent)
latents = vae.encode(batch["pixel_values"].to(DEVICE, dtype=args.weight_dtype)).latent_dist.sample()
latents = latents * vae.config.scaling_factor ## 根据 VAE 的缩放因子调整潜在空间
## 加入噪声
noise = torch.randn_like(latents) # 生成与潜在表示相同形状的随机噪声
timesteps = torch.randint(0, noise_scheduler.config.num_train_timesteps, (latents.shape[0],), device=DEVICE).long()
noisy_latents = noise_scheduler.add_noise(latents, noise, timesteps)
## 获取文本编码
encoder_hidden_states = text_encoder(batch["input_ids"].to(DEVICE))[0]

## 预测噪声
model_pred = unet(noisy_latents, timesteps, encoder_hidden_states)[0]

## 计算损失
loss = F.mse_loss(model_pred.float(), target.float(), reduction="mean")

1.3.7 反向传播

1
2
3
loss.backward()
optimizer.step()
lr_scheduler.step()

其中,loss给可以调整的参数加上loss标记,做反向传播;optimizer根据学习率与计算方式将梯度应用到当前的参数上;lr_scheduler更新学习率

1.3.8 推理

  1. 切换为评估模式:text_encoder.eval()

  2. 创建SD执行流:DiffusionPipeline.from_pretrained

  3. 加载文本:load_validation_prompts

  4. 创建初始图像:采用随机数torch.Generator

  5. 推理

图文、代码详解BeamSearch - 知乎

产生预测的方式:全部搜索(不可能)、贪心(不一定全局最优)、多路(束搜索)

3. 采样

top-k:排序后直接取前k个

top-p:排序后取大于p的

4. DPO微调

可以同时对正向和反向的文本进行编码,并根据两者计算loss

5. 量化

  1. 对称量化

  2. 非对称量化

区别在于量化值区间是否限制了量化前后零点对应

6. token与embedding

  1. token:用于将文本映射成序列号

  2. embedding:用于丰富token含义

参考

用 LoRA 微调 Stable Diffusion:拆开炼丹炉,动手实现你的第一次 AI 绘画_lora微调stable diffusion-CSDN博客

使用 Lora进行微调DeepSeek大模型_deepseek lora-CSDN博客

tloen/alpaca-lora: Instruct-tune LLaMA on consumer hardware

大模型轻量级微调(LoRA):训练速度、显存占用分析 - 知乎

Hoper-J/AI-Guide-and-Demos-zh_CN: 这是一份入门AI/LLM大模型的逐步指南,包含教程和演示代码,带你从API走进本地大模型部署和微调,代码文件会提供Kaggle或Colab在线版本,即便没有显卡也可以进行学习。项目中还开设了一个小型的代码游乐场🎡,你可以尝试在里面实验一些有意思的AI脚本。同时,包含李宏毅 (HUNG-YI LEE)2024生成式人工智能导论课程的完整中文镜像作业。

Stable Diffusion(SD)核心基础知识——(文生图、图生图)_sd模型-CSDN博客

如何快速下载huggingface模型——全方法总结 - 知乎

huggingface-cli下载数据(含国内镜像源方法)_huggingface-cli download-CSDN博客

理解Pytorch的loss.backward()和optimizer.step() - 知乎

OSError: Can‘t load tokenizer for ‘bert-base-chinese‘_oserror: can’t load tokenizer for ‘bert-base-chine-CSDN博客

ComfyUI:Stable Diffusion 及 LoRA、VAE 、ControlNet模型解析 - 知乎

AIGC-Stable Diffusion之VAE - 知乎

AI-Guide-and-Demos-zh_CN/Guide/17. 浅谈 RTN 模型量化:非对称 vs 对称.md at master · Hoper-J/AI-Guide-and-Demos-zh_CN

AI-Guide-and-Demos-zh_CN/Guide/g. 嵌入层 nn.Embedding() 详解和要点提醒(PyTorch).md at master · Hoper-J/AI-Guide-and-Demos-zh_CN

AI-Guide-and-Demos-zh_CN/Guide/18. 模型量化技术概述及 GGUF & GGML 文件格式解析.md at master · Hoper-J/AI-Guide-and-Demos-zh_CN

对称量化 VS 非对称量化 - 知乎

AI-Guide-and-Demos-zh_CN/Guide/11. DPO 微调示例:根据人类偏好优化 LLM 大语言模型.md at master · Hoper-J/AI-Guide-and-Demos-zh_CN

  • Title: llm learning
  • Author: Ethereal
  • Created at: 2025-04-06 17:07:30
  • Updated at: 2025-04-06 18:21:22
  • Link: https://ethereal-o.github.io/2025/04/06/llm-learning/
  • License: This work is licensed under CC BY-NC-SA 4.0.
 Comments