八:模型微调:QLoRA与 PEFT 方法对比自测题答案¶
来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247483849&idx=1&sn=175cff5a5ef0ba564d8b4f1d688aa77a&chksm=f01eb2b0c7693ba6a086fdcc91fe05abaa7c3c7df5e9c1a2fc8eedb3a19228926e8fce2826c5#rd
参考资料¶
-
QLoRA: Efficient Finetuning of Quantized LLMs: https://arxiv.org/abs/2305.14314
-
LoRA: Low-Rank Adaptation of Large Language Models: https://arxiv.org/abs/2106.09685
-
Hugging Face PEFT Quantization Guide: https://huggingface.co/docs/peft/main/en/developer_guides/quantization
-
Hugging Face bitsandbytes Quantization Guide: https://huggingface.co/docs/transformers/main/en/quantization/bitsandbytes
-
Prefix-Tuning: Optimizing Continuous Prompts for Generation: https://arxiv.org/abs/2101.00190
-
The Power of Scale for Parameter-Efficient Prompt Tuning: https://arxiv.org/abs/2104.08691
-
GPT Understands, Too / P-Tuning: https://arxiv.org/abs/2103.10385
-
Parameter-Efficient Transfer Learning for NLP / Adapter: https://arxiv.org/abs/1902.00751
评分标准¶
-
合格:能说清 QLoRA 是 4-bit base model + LoRA adapter,知道 NF4、double quantization、paged optimizer 的基本含义。
-
良好:能解释 storage dtype/compute dtype、显存来源、Prompt/Prefix/Adapter/LoRA 的区别。
-
优秀:能从工程配置、loss mask、量化误差、消融实验、部署选型和排错角度完整回答。
一、QLoRA 基础¶
1. QLoRA 的全称是什么?它解决什么问题?¶
QLoRA 是 Quantized LoRA。它解决 LoRA 微调中 base model 仍需占用大量显存的问题。通过把 base model 4-bit 量化并冻结,只训练 LoRA adapter,让低显存微调大模型更可行。
2. QLoRA 和 LoRA 的核心区别是什么?¶
LoRA 通常以 fp16/bf16 加载 base model,冻结 base 并训练 LoRA。QLoRA 以 4-bit 量化形式加载 base model,冻结量化 base,并训练 LoRA。区别在 base 权重存储精度和显存占用。
3. LoRA 已经很省参数了,为什么还需要 QLoRA?¶
LoRA 省的是可训练参数、梯度和优化器状态,但 base model 权重仍需加载。大模型仅权重就可能占几十到上百 GB。QLoRA 把 base 权重压到 4-bit,进一步降低显存。
4. QLoRA 中 base model 权重是否训练?LoRA 参数是否训练?¶
典型 QLoRA 中,base model 的 4-bit 量化权重冻结,不训练。LoRA A/B 参数以较高精度训练。
5. QLoRA 的典型训练流程是什么?¶
加载 4-bit quantized base model,prepare k-bit training,注入 LoRA,冻结 base,只训练 LoRA 参数,使用 SFT 数据训练,保存 adapter。推理时加载 base model 和 adapter,或按支持情况合并/导出。
6. QLoRA 为什么能让单卡微调更大模型成为可能?¶
因为 base 权重从 fp16/bf16 压缩到 4-bit,优化器状态只对应 LoRA 小参数,显存大幅降低。结合 gradient checkpointing 和 paged optimizer,可以在较小显存上训练更大模型。
7. QLoRA 是否等于直接训练 4-bit 权重?为什么?¶
不是。QLoRA 通常冻结 4-bit base 权重,只训练 LoRA adapter。4-bit 权重用于存储和前向计算的反量化,不直接作为高精度可训练参数更新。
8. QLoRA 的主要优势和局限分别是什么?¶
优势是显存低、可微调更大模型、保留 LoRA 的 adapter 管理优势。局限是量化误差、环境依赖、kernel 支持、长序列激活显存仍高、任务复杂时 LoRA 容量可能不足。
二、量化基础¶
9. 什么是模型量化?¶
量化是用低 bit 数值近似高精度权重或激活。例如用 int8、int4 或 NF4 表示 fp16/bf16 权重,从而降低存储、显存和带宽开销。
10. 4-bit quantization 相比 fp16 理论上节省多少存储?¶
fp16 每个值 16 bit,4-bit 每个值 4 bit,理论上是 4 倍压缩。但实际还需保存 scale、zero point 或 codebook 等 metadata,因此不是精确 4 倍。
11. 量化中的 scale 和 zero point 分别有什么作用?¶
scale 控制量化值映射回实数的尺度,zero point 控制零点偏移。常见近似:
不同量化方案形式可能不同。12. 权重量化、激活量化、KV cache 量化有什么区别?¶
权重量化压缩模型参数;激活量化压缩中间计算激活;KV cache 量化压缩推理时缓存的 key/value。QLoRA 主要关注训练时冻结 base 权重的 4-bit 量化。
13. QLoRA 主要使用哪类量化?¶
主要使用 4-bit 权重量化,尤其是 NF4 格式,并配合 double quantization。
14. 量化为什么可能带来精度损失?¶
低 bit 表示能力有限,会把连续高精度值映射到有限离散值,产生舍入和近似误差。误差可能影响模型输出,尤其在敏感层或低质量量化配置下。
15. 量化模型计算时是否一定用 4-bit 直接矩阵乘?请解释 storage dtype 和 compute dtype。¶
不一定。4-bit 常是存储格式,计算时可能反量化到 bf16/fp16 进行矩阵乘。storage dtype 决定权重如何存储,compute dtype 决定实际计算精度。
三、NF4、Double Quantization、Paged Optimizer¶
16. NF4 是什么?为什么 QLoRA 使用 NF4?¶
NF4 是 NormalFloat 4-bit,是适配近似正态分布权重的 4-bit 量化格式。预训练权重常近似正态分布,NF4 的非均匀 codebook 可以比普通均匀 int4 更好地表示这些权重。
17. NF4 和普通均匀 int4 的直觉区别是什么?¶
普通 int4 量化点通常均匀分布。NF4 的量化点按正态分布特性设计,在权重常出现的区间分配更合适的表示,从而降低误差。
18. double quantization 是什么?¶
double quantization 是进一步量化量化常数,例如 scale 等 metadata。它不仅压缩权重,还压缩量化权重所需的辅助常数。
19. double quantization 主要节省哪部分显存?¶
主要节省量化 constants/metadata 的显存,而不是 LoRA 参数本身。
20. paged optimizer 是什么?¶
paged optimizer 利用统一内存机制,在 GPU 显存压力大时把部分优化器状态分页到 CPU 内存,缓解训练中的显存峰值。
21. paged optimizer 解决的是平均显存问题还是显存峰值问题?¶
主要解决显存峰值问题,尤其是长序列或大 batch 训练时瞬时 OOM。
22. QLoRA 的三项关键技术可以如何概括?¶
NF4 用于高质量 4-bit 权重量化;double quantization 进一步压缩量化常数;paged optimizer 缓解训练显存峰值。三者共同降低低显存微调大模型的门槛。
四、QLoRA 实现与配置¶
23. QLoRA 中常见的 load_in_4bit=True 表示什么?¶
表示以 4-bit 量化方式加载模型权重,降低 GPU 显存占用。
24. bnb_4bit_quant_type="nf4" 表示什么?¶
表示 bitsandbytes 使用 NF4 作为 4-bit 量化格式。
25. bnb_4bit_use_double_quant=True 表示什么?¶
表示启用 double quantization,对量化常数进一步量化,以减少额外 metadata 开销。
26. bnb_4bit_compute_dtype 为什么重要?¶
它决定量化权重反量化后计算使用的 dtype,例如 bf16 或 fp16。compute dtype 影响速度、显存和数值稳定性。
27. 为什么 bf16 通常比 fp16 更稳定?¶
bf16 的指数范围更大,更不容易溢出或下溢。虽然尾数精度低于 fp16,但大模型训练中更大的动态范围通常更有利于稳定。
28. 什么是 prepare model for k-bit training?它通常处理哪些问题?¶
它是 k-bit 训练前的模型准备步骤,通常包括处理 norm 层 dtype、冻结参数、启用梯度 checkpointing 兼容、确保输入 embedding 梯度等。具体取决于框架实现。
29. QLoRA 中 LoRA rank、alpha、target modules 是否仍然重要?¶
重要。QLoRA 仍然通过 LoRA adapter 学习任务增量,rank/alpha/target modules 决定 adapter 容量、稳定性和训练成本。
30. QLoRA 训练时显存主要还会花在哪里?¶
除量化 base 权重外,显存还用于激活、梯度、LoRA 参数、LoRA 优化器状态、临时反量化计算、attention 中间结果和 CUDA/kernel workspace。长序列下激活仍可能很大。
31. gradient checkpointing 对 QLoRA 有什么帮助和代价?¶
它减少保存的激活,反向时重算前向,从而省显存。代价是训练速度变慢,因为需要额外计算。
32. QLoRA 训练长序列时为什么仍可能 OOM?¶
因为 attention 激活和中间状态随序列长度增长,尤其 attention 相关计算可能很占显存。QLoRA 降低权重显存,但不完全消除激活显存。
五、Prompt/P-Tuning/Prefix/Adapter¶
33. Prompt Tuning 的核心思想是什么?¶
学习一组连续 soft prompt embeddings,拼接到输入前面,冻结原模型,只训练这些 prompt 向量。
34. soft prompt 和人工离散 prompt 有什么区别?¶
人工 prompt 是人写的自然语言 token。soft prompt 是可训练连续向量,不一定对应可读文本,由模型训练学习。
35. Prompt Tuning 的优点和局限是什么?¶
优点是参数极少、存储小、任务切换方便。局限是表达能力有限,对模型规模、prompt 长度、初始化敏感,小模型上可能效果较差。
36. P-Tuning 和 Prompt Tuning 有什么关系和区别?¶
二者都学习连续提示。P-Tuning 通常用 prompt encoder 或更复杂机制生成 prompt 表示,P-Tuning v2 进一步把 prompt 扩展到深层,增强表达能力。
37. P-Tuning v2 大致增强了什么?¶
它将连续提示用于更深层或更广泛位置,提高对不同规模模型和 NLU/NLG 任务的适配能力,缓解简单 Prompt Tuning 表达不足。
38. Prefix Tuning 的核心思想是什么?¶
为每层 attention 学习 prefix key/value,让模型在每层 attend 到任务相关的虚拟上下文。原模型权重冻结。
39. Prefix Tuning 中 prefix key/value 加在哪里?¶
加在每层 attention 的 K/V 序列前面:
40. Prefix Tuning 对有效上下文长度或 attention 计算有什么影响?¶
prefix 会增加 attention 可见的 key/value 长度,带来额外计算和缓存。推理时每层都需要 prefix K/V。
41. Adapter Tuning 的核心结构是什么?¶
在 Transformer 层中插入瓶颈 MLP:
只训练 adapter 参数。42. Adapter 和 LoRA 的核心区别是什么?¶
Adapter 插入新增模块;LoRA 给已有线性层添加低秩权重增量。LoRA 可 merge 到原权重,Adapter 通常不能简单 merge。
43. Adapter 为什么可能增加推理延迟?¶
因为推理时需要额外执行 adapter 的 down/up projection 和激活函数,增加前向计算路径。
六、PEFT 方法对比与选型¶
44. LoRA、QLoRA、Prompt Tuning、Prefix Tuning、Adapter 各自一句话怎么概括?¶
LoRA 学低秩权重增量。QLoRA 用 4-bit base model 训练 LoRA。Prompt Tuning 学输入 soft prompt。Prefix Tuning 学每层 attention prefix K/V。Adapter 插入小型瓶颈模块。
45. 哪些方法通常可以 merge 到原权重?哪些不容易?¶
LoRA 通常可以 merge 到原线性层。QLoRA 的 adapter 理论上是 LoRA,但量化权重 merge 和保存要看框架支持。Prompt/Prefix/Adapter 通常不容易像 LoRA 那样直接 merge 成原权重。
46. 哪些方法更适合显存极低场景?为什么?¶
QLoRA 最适合显存极低的大模型微调,因为 base model 4-bit 加载,训练参数少。Prompt Tuning 参数更少,但能力可能不足。具体选择取决于效果要求。
47. 哪些方法更适合要求推理低延迟的部署?为什么?¶
merge 后的 LoRA 更适合低延迟,因为可变成普通线性层。Prompt Tuning 会增加输入长度,Prefix 增加每层 K/V,Adapter 增加模块计算,可能带来额外延迟。
48. 哪些方法更适合生成任务?哪些更适合理解任务?是否能绝对区分?¶
不能绝对区分。Prefix Tuning 最初常用于生成任务,Prompt/P-Tuning 在 NLU/NLG 都有应用,LoRA/QLoRA 在生成和理解都常用。实际看任务、模型和数据。
49. 如果业务要求多个任务快速切换,PEFT 方法如何设计?¶
使用统一 base model,为每个任务保存独立 adapter/LoRA/prompt。服务端按任务加载或切换对应 PEFT 参数。需要管理版本、base model 兼容性和输入模板。
50. 如果任务很复杂、领域迁移很大,PEFT 可能有什么不足?¶
PEFT 参数容量有限,可能无法充分改变模型行为或注入大量领域知识。可能需要更高 rank、更多 target modules、继续预训练、全量微调或混合策略。
七、训练数据、Loss Mask 与评测¶
51. QLoRA 和其他 PEFT 方法是否能弥补低质量数据?为什么?¶
不能。PEFT 只是训练方式,数据质量仍决定上限。低质量、冲突、泄漏、格式错误的数据会导致模型学坏。
52. SFT 中为什么通常只让 assistant answer token 参与 loss?¶
prompt/system/user token 是条件输入,通常不希望模型学习复述它们。只对 assistant answer 计算 loss 可以让模型学习在给定 prompt 下生成回答。
53. padding token 参与 loss 会带来什么问题?¶
模型会被训练去预测 padding,污染训练目标,可能输出 `` 或影响 loss。padding 应使用 ignore index mask 掉。
54. chat template 对 QLoRA/SFT 有什么影响?¶
chat template 决定 role token、轮次边界、assistant 起始位置。模板错误会让输入分布偏离模型训练格式,导致角色混乱、格式错误或效果下降。
55. 如何判断 QLoRA 效果提升不是数据泄漏?¶
使用独立测试集,做训练/验证去重,检查 prompt 和答案是否泄漏,比较 base model,做人工 badcase 和外部评测。
56. QLoRA 实验报告应记录哪些配置?¶
记录 base model、量化配置、NF4/double quant、compute dtype、LoRA rank/alpha/dropout/target modules、数据、模板、loss mask、学习率、batch、grad accumulation、seq length、显存、指标和 badcase。
57. 如何比较 LoRA 和 QLoRA 的效果与成本?¶
在相同数据和 LoRA 配置下比较指标、显存、训练速度、稳定性、adapter 大小、推理效果和量化误差。QLoRA 显存低,但可能略慢或有量化损失。
58. 如何做 rank、target modules、量化配置的消融?¶
固定其他变量,分别改变 rank、target modules、nf4/fp4、double quant、compute dtype、seq length 等。每次只改一个因素,记录指标、显存和 badcase。
八、工程排错与面试追问¶
59. QLoRA 训练报 CUDA/bitsandbytes 相关错误,应该如何排查?¶
检查 CUDA、PyTorch、bitsandbytes、transformers、peft 版本;GPU 是否支持对应 kernel;驱动版本;是否 Windows/WSL 兼容;是否正确安装 GPU 版本包。
60. QLoRA 训练出现 NaN,可能有哪些原因?¶
compute dtype 不稳定、学习率过大、fp16 溢出、norm dtype 问题、eps 太小、数据异常、loss mask 错误、梯度爆炸、量化配置不兼容。
61. QLoRA 训练后输出几乎没变化,可能是什么原因?¶
LoRA 未注入、target modules 错、adapter 未加载、rank 太低、学习率太小、训练步数不足、labels 全部被 mask、数据格式错误。
62. QLoRA 训练后输出格式混乱,可能是什么原因?¶
chat template 错误、loss mask 错、数据格式混乱、学习率过大、rank/alpha 过强、训练数据质量差、special tokens 配置错误。
63. 推理时忘记加载 adapter 会出现什么现象?¶
输出会接近 base model,没有微调后的任务适配效果。adapter 文件小并不代表它自动包含在 base model 中,必须显式加载或 merge。
64. 量化模型 merge LoRA 时需要注意什么?¶
要确认框架是否支持在量化权重上 merge,merge 后保存的是量化模型还是反量化模型,dtype 和显存是否足够,是否会丢失 adapter 可切换性。
65. QLoRA 是否一定比 LoRA 效果差?如何客观回答?¶
不一定。QLoRA 引入量化误差,但论文和实践表明在很多任务上可接近 LoRA/全量微调效果。具体取决于模型、数据、量化配置和任务。客观做法是实测。
66. QLoRA 是否适合继续预训练?为什么要谨慎?¶
可以尝试,但要谨慎。继续预训练通常数据量大、训练步数长、可能需要更高容量和稳定性。QLoRA 低秩 adapter 和量化 base 可能不足以承载大规模分布迁移。
67. 面试官问“QLoRA 省显存省在哪里”,你会如何回答?¶
主要省在 base model 权重用 4-bit 存储,优化器状态只针对 LoRA 小参数,而不是全量模型。double quantization 还压缩量化常数,paged optimizer 缓解显存峰值。但激活显存仍然存在。
68. 面试官问“NF4、double quantization、paged optimizer 分别是什么”,你会如何回答?¶
NF4 是适合正态分布权重的 4-bit 量化格式。double quantization 是进一步量化 scale 等量化常数。paged optimizer 是用分页/统一内存缓解训练时优化器状态带来的显存峰值。
69. 面试官问“Prompt Tuning、Prefix Tuning、Adapter、LoRA 怎么选”,你会如何回答?¶
如果追求效果和工程成熟度,优先 LoRA/QLoRA;显存极低选 QLoRA;参数极少且任务简单可试 Prompt Tuning;生成任务可考虑 Prefix;模块化但能接受额外延迟可用 Adapter。最终根据任务指标、显存、延迟、部署和数据规模消融选择。
70. 请总结第八天 QLoRA 与 PEFT 方法对比的完整知识链路。¶
LoRA 冻结 base model,只训练低秩增量,节省可训练参数和优化器状态,但 base 权重仍占显存。QLoRA 在此基础上把 base model 以 4-bit 量化加载,冻结量化权重,只训练 LoRA adapter,并用 NF4、double quantization、paged optimizer 降低显存和峰值。Prompt Tuning 学 soft prompt,P-Tuning 用更强 prompt encoder 或深层 prompt,Prefix Tuning 学每层 K/V 前缀,Adapter 插入瓶颈模块。不同 PEFT 方法在效果、显存、推理延迟、部署灵活性和表达能力上各有取舍,实际要通过任务指标和工程约束选择。
预览时标签不可点
<div class="