PEFT(Parameter-Efficient Fine-Tuning)是 Hugging Face 开源的低成本大模型微调工具库。全参微调一个 7B 模型,考虑权重、梯度和优化器状态,至少需要约 60GB 显存,消费级显卡无法承担;而 PEFT 通过冻结基座模型、只训练少量额外参数,把显存需求压到一张 24GB 消费级 GPU 可以承载的水平,QLoRA 甚至可以降到 12GB 左右。它提供 LoRA、QLoRA、Prefix Tuning、P-Tuning、Prompt Tuning、IA3、DoRA 等十余种参数高效微调方法,统一 API、与 transformers 训练生态深度集成,是当前开源社区做模型定制的事实标准之一。本文基于官方文档整理:先讲安装与验证,再用一个可运行的 LoRA 指令微调示例带你跑通全流程,接着拆解核心能力与生产部署要点,最后给出选型对比、常见误区与面试题。读完即可在自己的 GPU 上完成一次真实微调。

岗位关联

掌握 PEFT 是 LLM 领域微调的入门必修课:它让你在消费级显卡上完成 7B 级模型定制,是 RAG、Agent 与多租户服务中最通用的低成本适配技术。

目录
  1. 为什么需要 PEFT:全参微调的高门槛 → 1% 参数完成领域适配
  2. 安装与环境配置:4 步就绪
  3. 快速上手:15 分钟跑通 LoRA 指令微调
  4. 核心能力详解:4 大支柱
  5. 生产部署与监控:从上线到运维
  6. 版本迭代
  7. AI 应用场景
  8. 常见误区
  9. 面试题
工具类型
参数高效微调方法库(开源 Python 库)
开发商
Hugging Face
开源协议
Apache 2.0(可商用)
GitHub Stars
无
主要语言
Python
当前版本
0.14.0(2024-11)
安装方式
pip install peft
上手难度
★★☆☆☆(较低,API 与 transformers 一致)
适合人群
LLM 工程师、NLP 研究者、模型微调团队
同类工具
Unsloth、LLaMA-Factory、LitGPT
托管服务
无

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 PEFT:全参微调的高门槛 → 1% 参数完成领域适配

全参微调的成本瓶颈体现在两方面。一是显存:以 7B 模型为例,用 Adam 优化器训练,需要同时驻留 fp16 权重(约 14GB)、梯度(约 14GB)和优化器状态(约 28GB),合计约 56GB 起步,单卡 A100(80GB)才够用,24GB 消费级显卡直接出局。二是效率与稳定性:全参微调会更新全部参数,在小数据量场景容易过拟合,并破坏预训练学到的通用能力,即灾难性遗忘;同时每微调一个任务就产出一份与基座等大的权重文件,存储和分发成本高。对 RAG、Agent、领域问答这类“基座能力够用、只需补齐领域知识”的任务,全参微调是明显的资源浪费。

PEFT 的核心思路是冻结预训练权重 W,在模型结构中插入或叠加少量可学习参数,只训练这部分参数。以 LoRA 为例,权重增量 ΔW 被分解为低秩矩阵 A 和 B 的乘积,7B 模型的可训练参数只有约 0.1%。训练显存从约 60GB 降到 24GB 以内;QLoRA 再把基座权重量化为 4-bit,显存进一步降到 12GB 左右,并配合分页优化器处理峰值显存。训练完成后,保存的不是完整模型而是一个几十 MB 的适配器(adapter),推理时叠加回基座即可。参数少还意味着过拟合风险更低,几千条数据也能稳定收敛。

与同类工具相比,PEFT 的气质是“方法全、够底层”。Unsloth 用自研内核把 LoRA 训练加速约 2 倍,但只专注 LoRA 家族;LLaMA-Factory 提供 WebUI 和全流程管理,底层调用的正是 PEFT;LitGPT 是 Lightning 团队独立维护的训练框架。PEFT 的定位是“标准 API + 方法多样性”,不绑定训练脚本和数据格式,适合作为工程化落地的底层组件。

安装与环境配置:4 步就绪

步骤一·安装 PEFT:推荐用 pip 安装稳定版,要求 Python 3.9+;需要最新开发特性时从 GitHub 主线安装。

步骤二·升级配套依赖:PEFT 依赖 transformers 负责模型加载与 Trainer,accelerate 管理设备,bitsandbytes 提供 QLoRA 的 4-bit 量化。三者需与 PEFT 保持兼容,建议一并升级。Windows 上使用 bitsandbytes 推荐 WSL2 环境。

步骤三·验证版本:打印 peft 与 transformers 版本号,确认安装成功。

步骤四·最小注入验证:加载一个 1.5B 小模型注入 LoRA,观察 print_trainable_parameters() 输出的可训练参数占比,应远低于 1%。

bash6 行
# 1) 安装pip install -U peftpip install -U transformers accelerate bitsandbytes # 2) 验证版本python -c "import peft, transformers; print(peft.__version__, transformers.__version__)"
python14 行
# 3) 最小注入验证(可训练占比应 < 1%)from transformers import AutoModelForCausalLMfrom peft import LoraConfig, get_peft_model, TaskType model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-1.5B", torch_dtype="auto")config = LoraConfig(    task_type=TaskType.CAUSAL_LM,   # 因果语言模型    r=8,                            # 低秩矩阵维度    lora_alpha=32,                  # 增量缩放系数    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],)peft_model = get_peft_model(model, config)peft_model.print_trainable_parameters()# trainable params: 2,752,512 || trainable%: 0.1783

快速上手:15 分钟跑通 LoRA 指令微调

最小可用流程为:加载基座模型 → 注入 LoRA → 用 transformers Trainer 训练 → 保存 adapter → 加载 adapter 推理。数据集使用任意指令式 JSONL(每行含 instruction、output 字段),无需搭建复杂训练框架。下面代码基于 PEFT 0.11+ 与 transformers 正式版,以 Qwen2-1.5B-Instruct 演示:

1. 准备数据:构造 train.jsonl,每行 {"instruction": "…", "output": "…"},随后用 tokenizer 拼成“问题 + 回答”文本,截断到 512 token。

2. 配置 LoRA:r=8、lora_alpha=32、target_modules 覆盖注意力四件套(q/k/v/o_proj),这是 7B 以内模型的安全起点。

3. 执行训练:直接用 transformers.Trainer 即可;想更省事可改用 peft.SFTTrainer(PEFT 0.11 起内置),传原始文本即可。

4. 保存与推理:save_pretrained 产出 adapter_config.json 与 adapter_model.safetensors;推理时用 PeftModel.from_pretrained 叠加回基座。

训练完成后,qwen-lora-final 目录只有两个文件,加载时用 PeftModel.from_pretrained(base, "qwen-lora-final") 即可对话。进阶技巧:先用 lora_alpha=32 跑通,再按需上调 r(8 → 16);数据量小于 1000 条时把 num_train_epochs 降到 2 防止过拟合。

python33 行
from datasets import load_datasetfrom transformers import AutoModelForCausalLM, AutoTokenizerfrom transformers import TrainingArguments, Trainer, DataCollatorForSeq2Seqfrom peft import LoraConfig, get_peft_model, TaskType MODEL_ID = "Qwen/Qwen2-1.5B-Instruct"tokenizer = AutoTokenizer.from_pretrained(MODEL_ID) def to_text(ex):  # 组装指令格式并分词    prompt = f"问题:{ex['instruction']}\n回答:"    text = prompt + ex["output"] + tokenizer.eos_token    return tokenizer(text, max_length=512, truncation=True) ds = load_dataset("json", data_files="train.jsonl")ds = ds.map(to_text, remove_columns=ds["train"].column_names) base = AutoModelForCausalLM.from_pretrained(MODEL_ID, torch_dtype="auto")config = LoraConfig(task_type=TaskType.CAUSAL_LM, r=8, lora_alpha=32,                    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"])model = get_peft_model(base, config)model.print_trainable_parameters() trainer = Trainer(    model=model,    args=TrainingArguments(output_dir="qwen-lora", per_device_train_batch_size=2,                           gradient_accumulation_steps=8, learning_rate=2e-4,                           num_train_epochs=3, bf16=True, save_strategy="epoch",                           logging_steps=10, report_to="none"),    train_dataset=ds["train"],    data_collator=DataCollatorForSeq2Seq(tokenizer, padding=True),)trainer.train()model.save_pretrained("qwen-lora-final")

核心能力详解:4 大支柱

支柱一·方法全家桶:LoRA 及其变体。 LoRA 冻结原权重 W、训练低秩矩阵 A 与 B,推理时叠加增量;QLoRA 将基座做 4-bit 量化(NF4 + 双重量化 + 分页优化器),显存再砍约一半;DoRA 把权重分解为幅度与方向、只对方向做低秩适配,小数据量下精度更接近全参;PiSSA 用 SVD 奇异值初始化 A、B,加速收敛;LoRA+ 给 A、B 设不同学习率;IA3 用逐 token 缩放激活。选择建议:默认 LoRA,显存吃紧上 QLoRA,追求精度上 DoRA。

支柱二·统一 API 与模型无关设计。 一套 LoraConfig / get_peft_model / PeftModel 适配所有方法,TaskType 声明任务类型(因果 LM、序列分类等)。适配器保存/加载与 Hugging Face Hub 打通:push_to_hub 一键发布,from_pretrained 从远端拉取,团队间共享 adapter 如同共享权重文件。更换方法只需改配置对象,训练代码不动。

支柱三·与训练生态无缝集成。 与 transformers Trainer、TRL 的 SFTTrainer、accelerate、DeepSpeed、bitsandbytes 全面兼容,支持多卡训练与 ZeRO-3 下的 LoRA 分片。不局限于文本:diffusers 生态中可对 Stable Diffusion 注入 LoRA 做概念定制,视觉生成模型使用同一套 API。

支柱四·适配器组合与动态装卸。 同一基座可并行挂载多个 adapter,训练互不干扰;推理时可 merge_and_unload() 把增量写回基座、导出一份完整权重,做到零额外推理延迟;也可保留 adapter,由 vLLM 等推理引擎在运行时动态加载/卸载,实现一套基座多任务切换。

生产部署与监控:从上线到运维

部署方式一:merge 后标准部署。 适合单模型服务。将训练好的 adapter 合入基座并导出标准 safetensors,交给 vLLM/TGI 或 transformers pipeline 部署,无额外推理延迟。合并前先做一次生成质量回归,确认无精度回退。

部署方式二:vLLM 动态 LoRA 服务。 适合多租户/多任务。vLLM 0.4+ 原生支持 LoRA:启动时开启 enable_lora,请求时携带 LoRARequest 指定要加载的适配器。每个 adapter 磁盘仅几十 MB、显存按 rank 计,服务端按需唤起,一套基座服务多个领域模型。

可观测性。 训练期:TrainingArguments(report_to="wandb") 记录 loss、grad norm、token/s 与显存水位,把 r、alpha、数据集规模记入模型卡;升级依赖或换基座时用固定评测集(如 200 条领域 QA)做回归。部署期:merge 形态监控单实例 QPS 与首 Token 延迟;动态形态额外监控 adapter 切换耗时、并发 adapter 数与显存占用,max_loras 超限会导致排队或 OOM。

<p class="para-label">避坑清单:</p>

<ul class="dash-list"><li>版本兼容:PEFT 与 transformers/accelerate 同步迭代,报 module 'peft' 无 LoraConfig 属性或 save_pretrained 失败时先对齐三者版本,生产环境锁定版本组合。</li><li>target_modules 写错:模块名不匹配时 LoRA 注入 0 个模块,可训练占比接近 100%,等于全参训练。用 print_trainable_parameters() 确认占比 ≤ 1%。</li><li>r 值过拟合:r=8 起步,并非越大越好;r 超过任务复杂度反而过拟合训练集,且 adapter 体积线性膨胀。</li><li>merge 精度损失:fp16 下 merge_and_unload() 可能引入微小误差,上线前做生成质量回归,不要反复 merge 累积误差。</li><li>多 adapter 显存叠加:动态切换时 adapter 权重常驻显存,数量过多会 OOM;用 max_loras 控制上限并持续监控显存水位。</li></ul>

python7 行
from peft import PeftModelfrom transformers import AutoModelForCausalLM base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-1.5B-Instruct", torch_dtype="auto")peft_model = PeftModel.from_pretrained(base, "qwen-lora-final")merged = peft_model.merge_and_unload()   # 增量合入基座,卸载 adapter 包装merged.save_pretrained("qwen-merged")    # 导出标准模型,交给 vLLM/TGI
python6 行
from vllm import LLM, LoRARequestllm = LLM(model="Qwen/Qwen2-1.5B-Instruct", enable_lora=True, max_loras=4)out = llm.generate(    ["请解释劳动合同法第 47 条"],    LoRARequest(name="legal-lora", lora_int_id=1, lora_path="/models/legal-lora"),)
维度PEFT(Hugging Face)UnslothLLaMA-FactoryLitGPT
定位参数高效微调算法库(LoRA/前缀/Prompt 等全家桶)基于 LoRA 的极速微调加速库(自研 Triton 内核)基于 PEFT 的全栈微调框架(CLI/WebUI)轻量 LLM 微调训练框架(PyTorch Lightning)
编排范式在 transformers 模型上注入 adapter,训练代码复用 Trainer替换注意力/MLP 算子加速前反向,API 兼容 transformersYAML 配置驱动数据→训练→评测→导出全流程用 Lightning 组织训练循环,脚本化显式控制
类型约束支持 LoRA/QLoRA/DoRA/Prefix/Prompt/P-Tuning/IA3 等十余种方法仅 LoRA/QLoRA,但适配器与 PEFT 兼容可互转方法来自 PEFT,另封装数据集管理与模板系统LoRA/QLoRA/AdaLoRA/全参微调,不依赖 HF Trainer
学习曲线低-中:会 transformers 即可上手低:drop-in 替换,训练代码几乎不改低:WebUI + 配置文件即可开训中:需理解 Lightning 组织方式与脚本结构
生态集成原生集成 transformers/TRL/accelerate/bitsandbytes/DeepSpeed兼容 transformers 生态,导出 GGUF,可接 vLLM集成 transformers/DeepSpeed/vLLM,内置多数据集管理以 Lightning 生态为主,产物可转换 HF 格式
生产部署merge 导出或 vLLM/TGI 动态加载 LoRA适配器可合并导出,支持 GGUF 与 vLLM 部署内置导出脚本与 vLLM/API 部署模板merge 后转 HF 格式再接入推理服务
LicenseApache 2.0Apache 2.0Apache 2.0Apache 2.0
适合谁需要方法自由度、深度依赖 HF 生态的团队单卡追求极限速度与低显存的研究者/个人开发者不想写训练代码、要开箱即用全流程的团队已用 Lightning、偏好独立训练脚本的工程师

选型建议:需要方法多样性并深度绑定 HF 生态,选 PEFT;单卡追求极致速度与低显存(如 8GB 卡训 7B),选 Unsloth;不写训练代码、要 WebUI 全流程管理,选 LLaMA-Factory;已深度使用 Lightning,选 LitGPT。多数场景下 PEFT 是底座,LLaMA-Factory 等上层框架内部仍依赖它。

版本迭代

PEFT 自 2023 年开源后,主线是从“LoRA 单点工具”发展为“参数高效微调方法全家桶”,0.11 起内置 SFTTrainer,正式从注入工具演化为可独立完成训练闭环的框架。后续版本主要围绕新方法(DoRA)、量化适配(GPTQ)与稳定性改进展开。(截至训练数据,最新为 0.14.0,可能已有更新版本)

版本时间变化提升
v0.4.02023-09方法体系成型LoRA/Prefix/Prompt/P-Tuning/IA3/AdaLoRA 全部可用,与 transformers Trainer 深度集成
v0.6.02024-01初始化优化引入 LoRA+(分离学习率)与 PiSSA(SVD 奇异值初始化),改进 DeepSpeed/torch.compile 兼容性
v0.9.02024-04新方法 DoRA权重分解低秩适配(DoRA),小数据量下精度更接近全参微调
v0.11.02024-07内置 SFTTrainer重构 TRL 的 SFTTrainer 进库,支持 GPTQ 4-bit 模型上执行 LoRA 微调
v0.13.02024-10稳定性改进修复多轮保存/加载与分布式场景兼容问题,LoRA 训练显存优化
v0.14.02024-11新模型适配适配新版本 transformers 与多类新架构,稳定靠性与文档完善(截至训练数据,可能已有更新版本)
结论

PEFT 是方法库而非模型,无自有基准分数,效果以方法论文与社区实测为准——LoRA 论文报告其在 GLUE 等基准上接近甚至超过全参微调;QLoRA 论文在单张 48GB GPU 上微调 65B 模型,产出 Guanaco 在 Vicuna 基准达到 ChatGPT 的 99.3% 水平。选型建议:新项目直接用当前稳定版(0.14.x)并锁定与 transformers 的兼容组合;生产环境不追开发版,升级前跑通回归用例。

AI 应用场景

垂直领域模型低成本定制(法律/医疗问答)

阶段:领域适配微调(RAG 前置增强)

解决的问题:通用模型在垂直领域“懂但不专”,全参微调成本高、周期长,小数据量下易过拟合。PEFT 让单卡 24GB 即可在数千条标注数据上完成领域适配,adapter 仅几十 MB,便于版本管理与多领域并存。

具体案例:以 7B 基座 + 约 3000 条领域问答数据做 LoRA 微调(r=8),单卡约 4 小时训完,adapter 约 17MB;相比全参微调,显存占用从约 60GB 降至 24GB 以内,QLoRA 可再减半,训练时长从数天缩至数小时。QLoRA 论文已验证单卡 48GB 可微调 65B 参数量级的模型。

多租户/多任务推理:一套基座,N 个适配器

阶段:推理服务编排

解决的问题:电商、客服 SaaS 按行业/租户定制模型,若每个租户全参微调,存储与 GPU 成本线性膨胀。PEFT 训练出多个小 adapter 挂在同一基座上,vLLM 按请求动态切换,租户间冷热隔离。

具体案例:一套 7B 基座挂 8 个行业 adapter(每个约 17MB、训练成本单卡数小时),磁盘占用从 8 份全量权重(约 104GB)降至 1 份基座 + 8 个 adapter(约 13.1GB),单卡即可服务多租户,adapter 切换在运行时完成、无需重启服务。

Agent 工具调用能力增强

阶段:Agent 编排 / 指令微调

解决的问题:7B 级开源模型的工具调用能力弱(不按 JSON Schema 输出函数参数)。用 PEFT 在工具调用指令语料上微调,让小模型学会结构化输出,降低对闭源大模型 API 的依赖与成本。

具体案例:在约 1 万条含函数定义与调用轨迹的指令上做 LoRA 微调,单卡(24GB)数小时完成,adapter 十几 MB;上线后按自有评测集统计“格式合规率 + 执行成功率”,通常显著高于未微调基座。此类实践在 Tool-LoRA 等公开工作中均有报告。

常见误区

误区PEFT 不就是给模型套一层 LoRA 嘛,反正都是同一个方法。

正解PEFT 包含 LoRA 家族在内的十余种方法,还有 Prefix Tuning、Prompt Tuning、P-Tuning、IA3、DoRA、AdaLoRA 等,各方法的可学习参数形态不同(前缀缓存、soft prompt 嵌入、激活缩放矩阵)。多数场景默认 LoRA,但超大模型上 Prompt Tuning 更省显存,图像生成场景常配合 LoRA 家族使用。

为何常见:社区教程八成在讲 LoRA,曝光度过高导致以偏概全。

误区微调完把 adapter 存起来就行,参数都在里面,基座可以删了。

正解LoRA 训练的是增量 ΔW≈A×B。推理时必须先加载基座权重,再叠加增量;没有基座,adapter 本身无法做任何推理。部署时要么“基座 + 动态加载 adapter”,要么先 merge_and_unload() 合并成完整权重。

为何常见:adapter 文件只有几十 MB,容易误以为它是自包含模型。

误区把 r 设成 32、64 甚至 128,可学习参数更多,效果肯定更强。

正解LoRA 论文与社区实践均表明 r=8 在多数下游任务已接近全参效果。r 过大不仅训练变慢、adapter 体积膨胀,还会过拟合训练集、损害泛化。r 决定“适配子空间维度”,与任务复杂度匹配即可,先试 r=8,不收敛再上调,并配合 lora_alpha(常见取 2r)微调。

为何常见:“参数越多越强”的直觉;云端用户对显存不敏感,容易忽略副作用。

误区反正都是微调,PEFT 只是省显存,结果应该和全参一样。

正解PEFT 是通过限制参数子空间换取显存效率。数据量大、任务与预训练分布差异大时,PEFT 精度会低于全参。数据量在万级以下时 LoRA 通常足够;追求极限效果时可采用“LoRA 打底 + 短轮次全参精调”的混合策略。

为何常见:营销文章夸大了“接近全参”的适用范围,未提前提条件。

误区PEFT 是万能钥匙,随便拿个模型装上配置就能训。

正解模型必须是 PyTorch 的 nn.Module,且 target_modules 要匹配模型实际模块名(Qwen/LLaMA 用 q_proj、k_proj、v_proj、o_proj,其他架构命名不同)。硬套模板会导致注入 0 参数或训练报错。动手前用 model.named_modules() 打印确认模块名。

为何常见:教程都用同一套配置模板,换模型时忘了核对结构。

面试题

Q1. PEFT 中 LoRA 方法的核心思想是什么?

单选题 · easy

  • A.冻结原有权重,训练低秩增量矩阵← 正确答案
  • B.只训练模型最后几层全连接层
  • C.用知识蒸馏替代参数微调流程
  • D.对全部权重做低精度量化存储

答案:A。LoRA 将权重增量 ΔW 分解为两个低秩矩阵 A 与 B 的乘积,训练时冻结原权重 W,仅更新 A 和 B。B 是 head-only 微调,C 是蒸馏,D 是量化,均不属于 LoRA 的思路。

Q2. 下列哪条命令可以安装 PEFT 库?

单选题 · easy

  • A.pip install transformers
  • B.pip install peft 库即可← 正确答案
  • C.pip install langchain 框架
  • D.pip install torch 深度学习库

答案:B。PEFT 的 PyPI 包名就是 peft,安装命令为 pip install peft。A 是 transformers,C 是 LangChain,D 是 PyTorch,均为不同包。

Q3. 下列哪些属于 PEFT 库支持的方法?

多选题 · mid

  • A.LoRA 低秩增量适配方法← 正确答案
  • B.Prefix Tuning 前缀缓存微调← 正确答案
  • C.P-Tuning 可学习 prompt 的嵌入← 正确答案
  • D.全参数微调所有层全部权重

答案:ABC。PEFT 支持 LoRA、Prefix Tuning、P-Tuning、Prompt Tuning、IA3、DoRA 等。全参数微调不是参数高效方法,不属于 PEFT 范畴。

Q4. QLoRA 相比 LoRA 最关键的改动是什么?

单选题 · hard

  • A.增大低秩矩阵的维度与规模
  • B.将基座权重 4-bit 量化并冻结← 正确答案
  • C.将学习率提升为原来的数倍
  • D.使用更少的数据与更短的训练

答案:B。QLoRA 用 NF4 4-bit 量化基座权重,配合双重量化与分页优化器,未量化的 LoRA 矩阵保持原精度训练,显存较 LoRA 再降约三分之一。A/C/D 均非 QLoRA 的核心机制。

Q5. 保存 LoRA 训练产物时,adapter 目录包含哪两类关键文件?

单选题 · mid

  • A.适配器配置与适配器权重两种文件← 正确答案
  • B.分词器配置与原始基座两种文件
  • C.训练脚本与数据集副本两种文件
  • D.推理引擎与量化表两种文件

答案:A。save_pretrained 产出 adapter_config.json(记录 r、alpha、target_modules 等超参)与 adapter_model.safetensors(低秩矩阵权重)。基座权重、分词器、训练脚本均不在 adapter 目录内。

Q6. 执行 model.merge_and_unload() 后会发生什么?

单选题 · hard

  • A.将 LoRA 增量合入基座并返回标准推理模型← 正确答案
  • B.删除基座权重,仅保留轻量 adapter 文件
  • C.将 PyTorch 模型转换为 ONNX 推理格式
  • D.清空优化器状态并继续执行下一轮训练

答案:A。merge_and_unload 把 A×B 累加到原权重 W 上,并卸载 PeftModel 包装,返回标准 transformers 模型,可直接 save_pretrained 后交给 vLLM/TGI 部署。fp16 下合并可能引入微小精度误差,且合并后不再保留 adapter 独立性。

Q7. PEFT 微调时 print_trainable_parameters() 显示可训练占比接近 100%,最可能的原因是?

单选题 · mid

  • A.target_modules 模块名不匹配导致注入失败← 正确答案
  • B.训练数据集中存在大量重复的样本
  • C.优化器选择错误导致梯度爆炸不收敛
  • D.批处理大小设置过大导致显存不足

答案:A。target_modules 写的模块名在模型中不存在时,LoRA 不会注入任何模块,get_peft_model 退化为全参模型。通过 model.named_modules() 核对模块名,并观察可训练占比是否 ≤ 1% 即可排查。

Q8. 关于 PEFT 适配器的生产部署,正确的做法有哪些?

多选题 · hard

  • A.merge 后导出完整权重并用服务框架部署← 正确答案
  • B.用 vLLM 动态加载多个 adapter 服务多租户← 正确答案
  • C.部署时把 adapter 当作独立模型直接加载
  • D.训练前锁定 peft 与 transformers 版本组合← 正确答案

答案:ABD。单模型服务适合 merge 后部署;多租户场景用 vLLM 的 enable_lora 按请求动态切换 adapter;版本组合在训练前锁定可避免 API 漂移。C 错误——adapter 依赖基座权重,无法独立推理。

Q9. 关于 LoRA 中 lora_alpha 参数的作用,下列说法正确的是?

单选题 · mid

  • A.缩放因子越大,LoRA 增量对输出影响越强← 正确答案
  • B.缩放因子越大,基座权重量化精度越高
  • C.缩放因子仅影响训练速度,与推理无关
  • D.缩放因子在推理阶段自动归零不起作用

答案:A。LoRA 推理时增量按 (alpha/r) 缩放后叠加到输出,alpha 越大增量影响越强,常见取 alpha=2r。B 混淆了量化参数,C/D 错误:缩放因子在推理阶段通过合并权重持续生效。

Q10. DoRA 与 LoRA 的核心差异是什么?

单选题 · extreme

  • A.DoRA 将权重幅度与方向解耦后分别适配← 正确答案
  • B.DoRA 用更大秩以逼近全参微调效果
  • C.DoRA 对基座权重做 4-bit 双重量化
  • D.DoRA 通过蒸馏教师模型获得增量

答案:A。DoRA(Weight-Decomposed Low-Rank Adaptation)将预训练权重分解为幅度向量与方向矩阵,LoRA 只作用于方向部分,幅度直接可学习。这使优化空间更接近全参微调,在低数据量下精度更好。B/C/D 分别混淆了秩、量化与蒸馏概念。