LoRA怎么用?

LoRA怎么用?
收藏者
0
被浏览
533

3 个回答

tzwd873 LV

发表于 昨天 22:49

LoRA 可以通俗理解成“给大模型加一个小插件”或“给模型戴一副技能眼镜”。原模型不动,只训练一个很小的附加文件。用的时候,把原模型和 LoRA 一起加载,就能让模型学会某种风格、人物、画风、说话方式或任务技巧。

一、用别人做好的 LoRA。

1. 先确认 LoRA 是给哪种模型用的。图像生成常见是 Stable Diffusion 的 LoRA,文本模型常见是 LLaMA、Qwen、ChatGLM 等模型的 LoRA。底模不匹配,效果通常会很差。

2. 图像生成用法,以 Stable Diffusion WebUI 为例。把 `.safetensors` 的 LoRA 文件放到 `models/Lora` 目录。打开 WebUI 后,在提示词里写 `<lora:文件名:0.8>`,或者在界面的 LoRA 面板里点选。权重一般先试 0.6 到 0.8。很多人物或风格 LoRA 还需要写“触发词”,就是作者说明里要求加的词。然后正常写提示词、选底模、生成图片。

3. ComfyUI 用法。把 LoRA 文件放到 `models/loras`。在模型和采样器之间加一个 `LoraLoader` 节点,选择 LoRA,调 `strength_model` 和 `strength_clip`,一般也从 0.6 到 0.8 开始试。

4. 文本模型用法。代码里通常用 `transformers` 加 `peft`。先加载原模型,再用 `PeftModel.from_pretrained(原模型, "LoRA目录")` 加载 LoRA。如果只想得到一个合并后的模型,可以用 `merge_and_unload()` 合并。然后像平常一样输入提示词或对话。

二、自己训练一个 LoRA。

1. 准备数据。图像 LoRA 一般准备几十张到几百张高质量图片,统一主题,去掉重复和模糊图。文本 LoRA 准备问答对、指令数据或风格文本。数据质量比数量更重要。

2. 选底模。训练用的底模要和以后使用时的底模一致,或者至少同系列。比如用 SDXL 训练的 LoRA,就不要拿到 SD1.5 上硬用。

3. 打标签。图像训练通常要给每张图写描述,突出你想让 LoRA 学会的特征。人物 LoRA 常用一个独特触发词,比如 `mycharacter`。文本训练则整理成“输入”和“输出”的格式。

4. 设置参数。常见 LoRA 的秩 `r` 可以先设 8、16 或 32。`alpha` 常设成和 `r` 一样,或者 `2r`。学习率图像任务常见从 `1e4` 左右试,文本任务常见从 `1e4` 到 `3e4` 试。训练轮数不要一上来很多,先小规模跑,再根据效果调整。

5. 开始训练。图像常用 `kohya_ss` 等工具,文本常用 `peft`、`trl`、`LLaMAFactory` 等工具。训练时原模型大部分参数冻结,只训练 LoRA 的小矩阵,所以显存和存储压力比全量微调小很多。

6. 测试和导出。训练完后,用不同提示词、不同权重测试。图像 LoRA 权重从 0.6 到 0.8 开始试,文本 LoRA 可以对比加载前后效果。效果稳定后导出 `.safetensors` 或 adapter 目录。

三、常见注意事项。

LoRA 不是越大越好。权重太高可能画面崩、语言变怪。权重太低可能没效果。LoRA 要和底模匹配。使用人物或风格 LoRA 时,触发词和提示词要按作者说明写。训练数据要干净,重复图、错误标签会把坏习惯也学进去。先小规模试,再慢慢加数据、加轮数、调参数。

一句话总结:用现成 LoRA,就是“放对目录、加载文件、写触发词、调权重”;自己训练 LoRA,就是“准备干净数据、选对底模、用小参数训练、反复测试”。

romi LV

发表于 昨天 21:31

LoRA 的用法要分场景看。常见有两类:大语言模型微调,和 Stable Diffusion 出图。

一、大语言模型微调用 LoRA。  
1. 准备数据:整理成指令格式,例如 `{"instruction":"...","input":"...","output":"..."}`。  
2. 选基座模型:LoRA 必须和基座模型匹配,不能随便混用。  
3. 安装依赖:常用 `transformers`、`peft`、`datasets`、`accelerate`。  
4. 配置 LoRA:设置 `r`、`lora_alpha`、`lora_dropout`、`target_modules`。  
5. 挂载并训练:用 `peft` 给模型加 LoRA adapter,只训练少量参数。  
6. 保存 adapter:通常保存 `adapter_model.bin` 或 `adapter_model.safetensors` 和配置文件。  
7. 推理使用:加载基座模型后,再加载 LoRA adapter;也可以按需合并权重。

最小示例思路:
```python
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("基座模型路径")
config = LoraConfig(
    r=8,
    lora_alpha=16,
    lora_dropout=0.05,
    target_modules=["q_proj", "v_proj"],
    task_type="CAUSAL_LM"
)
model = get_peft_model(model, config)
model.print_trainable_parameters()
```
然后用 `Trainer` 或自定义训练循环训练,训练完调用 `model.save_pretrained("lora输出目录")`。

推理加载示例:
```python
from peft import PeftModel
model = PeftModel.from_pretrained(base_model, "lora输出目录")
```

二、Stable Diffusion 用 LoRA。  
1. 下载 `.safetensors` 格式的 LoRA 文件。  
2. 放到 WebUI 的 `models/Lora` 目录,或 ComfyUI 对应 LoRA 目录。  
3. 在提示词中调用,例如:`<lora:my_lora:0.8>`。  
4. 权重一般从 `0.5` 到 `1.0` 试起,过高可能画面崩坏。  
5. 注意基座模型匹配:SD1.5、SDXL、Pony 等 LoRA 不能随便混用。

三、使用注意。  
LoRA 不是独立模型,通常要配合基座模型使用。训练时数据质量比数量更重要。学习率常用 `1e4` 到 `3e4` 起步。`r` 越大容量越强但更占资源,常用 `8`、`16`、`32`。如果你说的是大模型微调、Stable Diffusion、还是某个具体框架,我可以给更对应的步骤。

赵启 LV

发表于 昨天 20:28

LoRA 不是单独运行的模型,而是在基座模型旁边插入一组低秩适配器,训练时只更新这组小参数,推理时再加载或合并回基座模型。大语言模型最常用的做法是使用 Hugging Face 的 transformers、peft、datasets、accelerate,显存不足时加 bitsandbytes 做 4bit QLoRA。

第一步是准备数据。把训练样本整理成 JSONL,每行一个样本,字段可以是 instruction、input、output,或者直接是 text。训练前用 tokenizer 转成 input_ids 和 labels,并做截断和 padding。数据质量比数量更重要,格式要稳定,答案要干净。

第二步是加载基座模型和分词器。例如用 AutoModelForCausalLM.from_pretrained 加载模型,用 AutoTokenizer.from_pretrained 加载分词器。做 QLoRA 时配置 BitsAndBytesConfig,设置 load_in_4bit=True、bnb_4bit_quant_type="nf4"、bnb_4bit_compute_dtype=torch.bfloat16,并开启 prepare_model_for_kbit_training。

第三步是配置 LoRA。用 peft.LoraConfig 设置 r、lora_alpha、lora_dropout、target_modules、bias 和 task_type。常见起点是 r=8 或 16,lora_alpha=16 或 32,lora_dropout=0.05,target_modules 选 q_proj、v_proj,也可以加 k_proj、o_proj、gate_proj、up_proj、down_proj。任务类型设为 CAUSAL_LM。然后调用 get_peft_model(model, lora_config),并打印可训练参数,确认只训练很少一部分参数。

第四步是训练。用 transformers.Trainer 或 SFTTrainer,设置 learning_rate 约 1e4 到 2e4,batch size 根据显存调整,配合 gradient_accumulation_steps,epoch 先跑 1 到 3 轮。优化器可用 paged_adamw_8bit。训练中关注 loss 和验证集表现,过拟合时降低 r、增加 dropout 或减少 epoch。训练完成后用 model.save_pretrained 保存 adapter,用 tokenizer.save_pretrained 保存分词器。

第五步是推理。加载原基座模型后,用 PeftModel.from_pretrained(base_model, adapter_path) 加载 LoRA 权重,再调用 generate。也可以调用 merge_and_unload 把 LoRA 合并进基座模型,导出普通模型权重,方便部署。合并前要确认基座模型版本和训练时完全一致。

第六步是评估和迭代。用固定测试集比较基座模型与 LoRA 模型,检查格式遵循、事实准确性和风格。效果不好时优先检查数据格式、target_modules 是否命中、学习率是否过大、训练轮数是否不足。

如果做 Stable Diffusion 图像 LoRA,流程不同:准备带标签的图片集,使用 diffusers 的训练脚本,例如 train_text_to_image_lora.py,设置分辨率、batch size、learning rate、rank 和输出目录,训练得到 .safetensors 适配器,推理时在 WebUI 或 diffusers 管道中加载 LoRA 并调节权重。大模型 LoRA 和图像 LoRA 的共同点是只训练小适配器,区别在于数据格式、目标模块和训练脚本。

您需要登录后才可以回帖 登录 | 立即注册