LoRA 微调前,最容易出错的是把目标层名照抄到另一种模型结构上。PEFT 的配置需要指定任务类型和要注入适配器的模块;若目标层不存在,即使参数表看起来正常,也没有完成预期设置。下面针对“已有、已获授权使用且能正常加载的因果语言模型”检查配置,不把某个模型的层名当作所有模型的通用答案。
先看基座模型是否有目标层
在现有训练脚本中,假设变量 model 已经是加载成功的 AutoModelForCausalLM。先运行:

targets = [name for name, _ in model.named_modules()
if name.endswith("q_proj")]
print(targets[:20])
if not targets:
raise ValueError("该模型没有 q_proj,先查本模型结构再选目标层")
这一步不能省。不同架构的注意力层名称不同;如果没有 q_proj,先核对该基座模型的官方实现或模型卡,再决定适配哪些层。不要为了让代码运行而随意改成一个“看起来像”的名称。
创建适配器并核对可训练参数
以下写法按 PEFT 0.21 官方 quicktour 中的 LoraConfig、get_peft_model() 和 print_trainable_parameters() 整理;数值只是演示配置,不是针对你的模型调优结果。
from peft import LoraConfig, TaskType, get_peft_model
config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
target_modules=["q_proj"],
r=8,
lora_alpha=16,
lora_dropout=0.05,
)
peft_model = get_peft_model(model, config)
peft_model.print_trainable_parameters()
trainable = [name for name, p in peft_model.named_parameters()
if p.requires_grad]
print(trainable[:20])
if not trainable:
raise RuntimeError("没有发现可训练参数,停止后续训练")
检查打印出的可训练参数名是否属于预期的 LoRA 适配器,数量大于零,并确认没有把不该训练的全部基座参数打开。PEFT 文档指出 get_peft_model() 会把配置应用到已有模型;它可能原地修改模型,所以不要把包装前的 model 当成一份完全独立的原始副本。
下一步与边界
配置通过后,再把 peft_model 交给已验证的数据集、损失与训练循环,先运行一个小批次并检查损失与梯度;适配器保存和重新加载也要用同一基座模型版本核对。若目标层为空、训练参数不符合预期或基座模型许可不允许目标用途,先停下,不要直接开始微调。
本文只完成微调前的配置检查,没有在特定模型、显卡或数据集上实测训练速度和结果,也不能据此推断某个模型“低显存一定能训”。安装包版本、模型权重获取条件和许可,应按实际使用的 PEFT 版本与基座模型卡核对。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/29931.html