news 2026/9/3 16:37:55

LLM 微调工程师 30 道高频题:从 LoRA 到 QLoRA 到 DPO(带答案与代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LLM 微调工程师 30 道高频题:从 LoRA 到 QLoRA 到 DPO(带答案与代码)

30 题覆盖 80% LLM 微调面试考点——我面试 50+ 微调候选人后整理的,比 LoRA 论文更实用。每题都附答案 + 代码,最后给一份按"LoRA / QLoRA / DPO"分层的复习清单。

题型分布

模块题数难度占比
微调基础(Q1-Q8)8易-中27%
LoRA / QLoRA(Q9-Q16)8中-难27%
数据 / 训练(Q17-Q22)6中-难20%
偏好对齐 DPO / RLHF(Q23-Q26)413%
工程化 / 部署(Q27-Q30)4中-难13%

模块 1:微调基础(Q1-Q8)

Q1:什么是 LLM 微调?为什么需要微调?

:微调是在预训练模型上用领域数据继续训练,让模型适配特定任务。

微调 vs Prompt 工程

维度微调Prompt 工程
改的是模型权重输入文本
成本训练贵,推理便宜训练零成本,推理贵
适用数据量足、长期使用快速验证、小数据
效果上限

Q2:全参数微调 vs LoRA 的区别?

维度全参数LoRA
可训练参数100%0.1-1%
显存10-20x1x
训练时间
效果差距100%90-95%
适用数据 > 100w数据 < 10w

Q3:数据量多少适合微调?

任务数据量
风格微调1k-10k
领域适配10k-100k
任务专精100k-1M
全量重训> 1M

少于 1k 样本用 Prompt 工程比微调更划算。


Q4:微调用的优化器有哪些?

优化器适用
AdamW全参数微调标配
SGD极少用(不稳定)
Lion新优化器(2023 出现)
Adafactor显存敏感场景

Q5:学习率怎么选?

  • 全参数微调:1e-5 ~ 5e-5
  • LoRA:1e-4 ~ 5e-4
  • 学习率 warmup:前 10% 步数从 0 升到目标值
  • cosine decay 调度
# myaifast-1305-q05-lr.pyfromtransformersimportTrainingArguments args=TrainingArguments(learning_rate=2e-4,# LoRA 推荐lr_scheduler_type="cosine",warmup_ratio=0.1,)

Q6:batch size 怎么选?

显存推荐 batch size梯度累积
24 GB48
40 GB84
80 GB162

经验法则:有效 batch size = 32(batch × grad_accum_steps)。


Q7:训练多少 epoch?

  • 风格微调:3-5 epoch
  • 领域适配:1-3 epoch
  • 任务专精:1-2 epoch
  • 超过 10 epoch 必过拟合

Q8:如何判断过拟合?

指标表现
Train Loss持续下降
Eval Loss先降后升
间隔1-2 epoch 后 Eval Loss 不降 = 过拟合

应对:早停 / 加 dropout / 加正则 / 数据增强。

模块 2:LoRA / QLoRA(Q9-Q16)

Q9:LoRA 的核心原理?

:LoRA(Low-Rank Adaptation)冻结原模型权重,在旁路添加低秩矩阵BA

W_new = W_frozen + BA 其中 B ∈ R^{d×r}, A ∈ R^{r×k}, r << min(d, k)

可训练参数从d×k降到r×(d+k)


Q10:LoRA rank 怎么选?

rank可训练参数适用
4极少风格微调
8任务微调
16通用首选
32复杂任务
64+接近全参数

经验值:rank=16 是甜蜜点。


Q11:LoRA 作用在哪些层?

:主要作用在 attention 层的q_projv_proj(性价比最高)。可选k_projo_proj,甚至 FFN 层。

# myaifast-1305-q11-lora-target.pyfrompeftimportLoraConfig config=LoraConfig(r=16,lora_alpha=32,# 通常 = 2*rtarget_modules=["q_proj","v_proj"],# 核心lora_dropout=0.05,bias="none",task_type="CAUSAL_LM",)

Q12:QLoRA 和 LoRA 的区别?

维度LoRAQLoRA
原模型FP164-bit NF4
显存1x0.3x
训练速度1x0.7x
效果100%99%

QLoRA 的核心:把模型量化到 4-bit + LoRA 微调,显存降 70%。


Q13:QLoRA 的 NF4 量化是什么?

:NF4(4-bit NormalFloat)是 QLoRA 论文提出的 4-bit 数据类型,专门为正态分布权重优化。比 FP4 更准,比 INT4 更适合 LLM 权重分布。

# myaifast-1305-q13-qlora.pyfromtransformersimportBitsAndBytesConfigfrompeftimportLoraConfig,get_peft_model,prepare_model_for_kbit_trainingfromtransformersimportAutoModelForCausalLM# 1. 4-bit 量化配置bnb_config=BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_quant_type="nf4",bnb_4bit_compute_dtype=torch.float16,bnb_4bit_use_double_quant=True,)# 2. 加载量化模型model=AutoModelForCausalLM.from_pretrained("deepseek-ai/deepseek-v3",quantization_config=bnb_config,device_map="auto",)# 3. 准备 k-bit 训练model=prepare_model_for_kbit_training(model)# 4. 加 LoRAlora_config=LoraConfig(r=16,lora_alpha=32,target_modules=["q_proj","v_proj"])model=get_peft_model(model,lora_config)

Q14:LoRA 推理怎么合并权重?

# myaifast-1305-q14-merge.pyfrompeftimportPeftModel# 加载原模型 + LoRA 权重base_model=AutoModelForCausalLM.from_pretrained("base-model")peft_model=PeftModel.from_pretrained(base_model,"lora-weights")# 合并 LoRA 到原模型merged_model=peft_model.merge_and_unload()# 保存合并后的模型merged_model.save_pretrained("merged-model")

推理延迟:合并后推理延迟 = 原模型延迟(无额外开销)。


Q15:LoRA 和 Adapter 区别?

维度LoRAAdapter
插入位置旁路(线性相加)串行(前馈层)
推理延迟0(可合并)有(不可合并)
显存

LoRA 现在主流——可合并到原模型,推理零开销。


Q16:完整 LoRA 微调代码

# myaifast-1305-q16-lora-full.pyfromtransformersimportAutoModelForCausalLM,AutoTokenizer,TrainingArguments,TrainerfrompeftimportLoraConfig,get_peft_modelfromdatasetsimportload_dataset# 1. 加载模型和分词器model_name="deepseek-ai/deepseek-v3"tokenizer=AutoTokenizer.from_pretrained(model_name)model=AutoModelForCausalLM.from_pretrained(model_name)# 2. 配置 LoRAlora_config=LoraConfig(r=16,lora_alpha=32,target_modules=["q_proj","v_proj"],lora_dropout=0.05,bias="none",task_type="CAUSAL_LM",)model=get_peft_model(model,lora_config)model.print_trainable_parameters()# 显示可训练参数占比# 3. 准备数据dataset=load_dataset("json",data_files="train.jsonl",split="train")defformat_example(example):text=f"### 问题:{example['instruction']}\n### 回答:{example['output']}"returntokenizer(text,truncation=True,max_length=512)dataset=dataset.map(format_example)# 4. 训练args=TrainingArguments(output_dir="./lora-output",num_train_epochs=3,per_device_train_batch_size=4,gradient_accumulation_steps=8,learning_rate=2e-4,bf16=True,logging_steps=10,save_strategy="epoch",)trainer=Trainer(model=model,args=args,train_dataset=dataset)trainer.train()# 5. 保存 LoRAmodel.save_pretrained("./lora-weights")

模块 3:数据 / 训练(Q17-Q22)

Q17:微调数据怎么准备?

:5 个步骤:

  1. 清洗——去重、去噪、去敏感
  2. 格式化——{instruction, input, output}三字段
  3. 质量过滤——人工抽检 10%
  4. 平衡——各类别样本数 ±20%
  5. 划分——train/eval/test = 8:1:1

Q18:数据增强怎么做?

方法适用
同义改写通用
回译(中→英→中)文本
Prompt 模板变化多场景
LLM 生成相似样本数据少时
主动学习挑难样本分类

Q19:微调数据格式有哪些?

格式适用
{instruction, output}指令微调
{prompt, completion}OpenAI 风格
{messages: [...]}多轮对话
{input, output}任务微调

Q20:训练时怎么监控?

指标工具
LossTensorBoard / W&B
GPU 利用率nvidia-smi
显存nvidia-smi
学习率TensorBoard
Eval Loss训练时同步

反共识:监控 Loss 不够,要监控Eval Loss + 人工评估。Loss 降但生成质量差,是过拟合。


Q21:训练中断了怎么恢复?

# myaifast-1305-q21-resume.pyfromtransformersimportTrainingArguments args=TrainingArguments(output_dir="./lora-output",resume_from_checkpoint=True,# 自动从最新 checkpoint 恢复save_strategy="steps",save_steps=500,)trainer=Trainer(model=model,args=args,train_dataset=dataset)trainer.train(resume_from_checkpoint=True)

建议:每 500 步保存一次 checkpoint,保留最近 3 个。


Q22:DeepSpeed / FSDP 怎么选?

维度DeepSpeedFSDP
显存优化ZeRO-3全分片
速度
配置复杂度低(PyTorch 原生)
适用单机多卡 / 多机多机训练

推荐:单机多卡用 DeepSpeed,多机训练用 FSDP。

模块 4:偏好对齐(Q23-Q26)

Q23:什么是 RLHF?

:RLHF(Reinforcement Learning from Human Feedback)三步:

  1. 训练 Reward Model(基于人类偏好)
  2. 用 PPO 强化学习优化 LLM
  3. 平衡 KL 散度(不让模型偏离太远)

Q24:什么是 DPO?和 RLHF 区别?

维度RLHFDPO
训练步骤3 步(RM + PPO)1 步(直接训练)
实现复杂度高(需要 RM)低(一行 loss)
数据效率
稳定性不稳定(PPO 抖动)稳定
效果⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

DPO 优先——2024 年后几乎所有偏好对齐都用 DPO。


Q25:DPO 完整代码

# myaifast-1305-q25-dpo.pyfromtrlimportDPOTrainer,DPOConfigfromtransformersimportAutoModelForCausalLM,AutoTokenizerfromdatasetsimportload_dataset# 1. 加载模型model=AutoModelForCausalLM.from_pretrained("deepseek-ai/deepseek-v3")tokenizer=AutoTokenizer.from_pretrained("deepseek-ai/deepseek-v3")# 2. 准备偏好数据(chosen vs rejected)dataset=load_dataset("json",data_files="preference_data.jsonl",split="train")# 数据格式:{"prompt": "...", "chosen": "...", "rejected": "..."}# 3. DPO 配置config=DPOConfig(output_dir="./dpo-output",beta=0.1,# KL 散度权重learning_rate=5e-7,# 比 LoRA 低num_train_epochs=1,per_device_train_batch_size=2,gradient_accumulation_steps=16,)# 4. 训练trainer=DPOTrainer(model=model,ref_model=None,# 自动用初始模型做参考args=config,train_dataset=dataset,tokenizer=tokenizer,)trainer.train()

Q26:什么时候用 DPO 不用 LoRA?

场景选 DPO选 LoRA
改模型输出风格
改模型价值取向
加新能力
数据量 < 1k

反共识:DPO 不是 LoRA 的替代,是补充。先 LoRA 学会能力,再 DPO 调整偏好

模块 5:工程化 / 部署(Q27-Q30)

Q27:微调后怎么部署?

部署方式适用
合并权重 + vLLM单 GPU 高并发
LoRA 热加载多 LoRA 切换
TensorRT-LLM生产极致性能
llama.cppCPU / 边缘设备
# myaifast-1305-q27-deploy.pyfromvllmimportLLM,SamplingParams# 合并 LoRA 后部署llm=LLM(model="./merged-model",tensor_parallel_size=1)outputs=llm.generate(["麦芽AI 是什么?"],SamplingParams(max_tokens=200))print(outputs[0].outputs[0].text)

Q28:LoRA 权重怎么管理?

策略适用
单 LoRA单一模型
多 LoRA 热切换多业务线
LoRA 合并部署性能优先
LoRA + base 分离灵活调试

Q29:微调效果怎么评测?

任务指标
分类Accuracy / F1
生成BLEU / ROUGE / BERTScore
问答EM / F1
对齐人类偏好胜率 / Alpaca Eval
综合LLM-as-Judge(GPT-4 评分)

Q30:微调工程师的核心能力?

数据处理 + LoRA/QLoRA + 偏好对齐 + 部署——这 4 项覆盖 80% 工作场景。

反共识(克制一处)

很多面试题考 “PPO / RLHF 公式推导”——但80% 的微调工程师不需要从零实现 PPO,需要的是用 TRL / DeepSpeed 跑通 DPO/PPO。我面试时反而会问"训练数据怎么清洗"、“LoRA rank 怎么选”、“DPO 数据格式是什么”,这些是真正影响交付的能力。候选人答"PPO 公式"很溜但答不上"beta 参数怎么调",多半在生产里会卡壳

我面试 50+ 候选人后的 5 个观察

跑了 50+ 候选人面试后,我对 LLM 微调工程师招聘有 5 个深层观察:

观察 1:候选人"跑通教程"≠ 能落地产线

很多候选人简历写"微调过 Llama",面试时让他写 LoRA 配置,ralphatarget_modules都说不清。理论 90 分但实操一塌糊涂,我直接淘汰。

观察 2:显存计算是基础能力

50+ 候选人里能准确算出"13B 模型 LoRA 微调需要多少显存"的不到 30%。显存计算 = 模型参数 × 4(FP32) × LoRA 比例 + 激活值 + 优化器状态。不会算显存 = 不会规划训练。

观察 3:数据处理经验稀缺

100% 的微调项目 60% 时间花在数据上。候选人简历写"做过微调"但没提"清洗了多少脏数据"的,多半没真干过。数据 > 模型

观察 4:超参调试经验稀缺

50+ 候选人能完整说出"学习率 / batch size / warmup / scheduler"四件套的不到 40 个。微调是经验科学,不是理论科学——超参调不好,效果差 50%。

观察 5:评估意识薄弱

微调后怎么评估?80% 候选人答"看 Loss"。Loss 降 ≠ 生成质量好。LLM-as-Judge、人类评估、Bad Case 分析才是真评估。

30 题按"面试官视角"的优先级

按"面试官最想考察的能力"排序:

优先级题目考察能力
⭐⭐⭐⭐⭐Q9 LoRA 原理基础
⭐⭐⭐⭐⭐Q12 QLoRA 显存实战
⭐⭐⭐⭐⭐Q16 LoRA 代码编码
⭐⭐⭐⭐⭐Q24 DPO vs RLHF取舍
⭐⭐⭐⭐Q5 学习率经验
⭐⭐⭐⭐Q11 LoRA target设计
⭐⭐⭐⭐Q25 DPO 代码编码
⭐⭐⭐⭐Q30 核心能力综合
⭐⭐⭐Q17/Q22/Q27数据 / 分布式 / 部署

核心建议:先答好 ⭐⭐⭐⭐⭐ 的 4 题(占面试通过率 80%),再去练 ⭐⭐⭐⭐ 的次级题。

面试常见 4 个翻车点

跑 50+ 面试后,我整理出候选人最常翻车的 4 个点:

翻车点 1:把"跑通 LoRA 教程"当微调经验

很多候选人简历写"微调过 DeepSeek",面试时问"数据怎么清洗"答"按行读"。微调的核心是数据 + 评估,不是调包。

翻车点 2:把"看过 LoRA 论文"当原理

LoRA 论文 14 页,能讲清核心公式 + loss 推导 + 适用场景的候选人不到 20%。理解原理 > 看过论文

翻车点 3:把"用过 PEFT 库"当工程能力

PEFT 调包谁都会,但显存计算、DeepSpeed 配置、QLoRA NF4 量化、DPO 训练这些工程能力,不到 30% 候选人能完整答出。

翻车点 4:把"跑通 DPO"当对齐经验

DPO 训练跑通 ≠ 偏好对齐经验。偏好对齐的核心是数据质量——chosen vs rejected 标注是否合理、beta 参数怎么调、KL 散度怎么平衡。

7 题"必会"清单

时间不够就答好这 7 题:Q9 LoRA 原理、Q12 QLoRA 显存、Q16 LoRA 代码、Q24 DPO vs RLHF、Q25 DPO 代码、Q26 DPO 何时用、Q30 核心能力。覆盖 80% 工作场景。

30 题按主题复习清单

模块重点题复习优先级
基础Q1 / Q5 / Q7⭐⭐⭐⭐⭐
LoRAQ9 / Q12 / Q16⭐⭐⭐⭐⭐
数据Q17 / Q19 / Q22⭐⭐⭐⭐⭐
对齐Q24 / Q25 / Q26⭐⭐⭐⭐
工程Q27 / Q28 / Q29⭐⭐⭐⭐

可复用下载包(myaifast-1305)

文件内容
myaifast-1305-lora-full.pyLoRA 微调完整代码
myaifast-1305-qlora.pyQLoRA 4-bit 量化训练
myaifast-1305-dpo.pyDPO 偏好对齐完整代码
myaifast-1305-cheatsheet.md30 题一页速查表
myaifast-1305-interview-guide.md面试官视角:哪些题要深挖
myaifast-1305-vram-calc.py显存计算工具(13B/70B 模型)

下载:https://www.myaifast.com ,编号myaifast-1305

行动清单

  1. 按模块刷题——基础 / LoRA / 数据 / 对齐 / 工程各 1 周
  2. 每题跑代码——Q16 / Q25 必跑,其他看代码读懂
  3. 算显存——13B/70B 模型的 LoRA/QLoRA 显存
  4. 拒绝死记硬背——80% 场景是"用好框架"不是"实现算法"
  5. 每周 mock 一次——找朋友当面试官,过 7 题算过关

一句结论:30 道题覆盖 80% LLM 微调考点,但真正决定 offer 的是工程化能力——数据清洗、显存计算、超参调试、效果评估,比"LoRA 论文"重要得多。

本文工具实测环境为麦芽AI(myaifast),详见 https://www.myaifast.com

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 16:35:37

大学四年,我把这份Python题库刷了三遍

先前一阵子的时候整理电脑, 翻找出一个标注着“题库100道”的PDF, 点开之后查看, 是密密麻麻的代码再加上注释, 刹那间就想起大二那年为了期末不会挂科, 硬是顽强地把它刷了三遍。 讲真, 刚踏入大学校门之际, 我对于“变量”究竟是什么完全处于懵懂状态。那时老师在课堂之上讲解…

作者头像 李华
网站建设 2026/9/3 16:35:28

接口自动化测试报告

引言在接口自动化测试体系那儿, 测试用例的设计, 还有测试报告的输出, 是两个关键环节。前面那个决定了测试的覆盖率以及有效性, 后面这个则直接对团队对测试结果的解读以及后续改进的效率产生影响。本文会详细去解析接口测试用例的设计方法, 并且提供一套完整的接口测试报告模…

作者头像 李华
网站建设 2026/9/3 16:32:24

201、【Agent】【OpenCode】JS 语法:setTimeout 七种常用形式

【声明】本博客所有内容均为个人业余时间创作&#xff0c;所述技术案例均来自公开开源项目&#xff08;如Github&#xff0c;Apache基金会&#xff09;&#xff0c;不涉及任何企业机密或未公开技术&#xff0c;如有侵权请联系删除 标题 201、【Agent】【OpenCode】JS 语法&…

作者头像 李华
网站建设 2026/9/3 16:29:24

Khadas VIM3升级全铝CNC外壳:散热改造与性能释放实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 16:27:32

Adobe软件安全使用指南:破解风险、正版方案与免费替代

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 16:26:35

告别付费PPT模板✨Paperxie隐藏王牌!学术答辩PPT一键顶配

谁懂啊&#xff01;写论文熬大夜&#xff0c;最后栽在答辩PPT上&#x1f62d; 大多数同学写论文、查重、降重都能顺利搞定&#xff0c;唯独卡在答辩PPT环节&#xff01;网上找的模板要么花哨廉价不适合学术答辩&#xff0c;要么好看的全部收费&#xff0c;手动排版几小时&…

作者头像 李华