高德 大模型开发 一面
1. LoRA 时如何选择合适的参数?这些参数的选择如何影响模型性能?
答:LoRA 里最关键的参数是 r、lora_alpha、lora_dropout、target_modules。LoRA 的权重更新可以写成:
其中B∈Rd×r,A∈Rr×k,r 是低秩分解的秩。r 越大,可训练空间越大,通常效果上限更高,但显存占用、训练耗时和过拟合风险也会增加,常见取值是 4、8、16、32。lora_alpha 是缩放系数,实际更新一般写成:

alpha 越大,LoRA 分支对原模型的影响越强,太小可能学不动,太大可能不稳定。lora_dropout 主要用于减少过拟合,数据量小或噪声大时通常设成 0.05 或 0.1。target_modules 决定把 LoRA 挂在哪些层上。大语言模型里最常见的是 attention 中的 q_proj、v_proj,有时也会加 k_proj、o_proj 或 MLP 层。挂得越多,训练参数越多,上限更高,但成本也更大。实际做法通常是先从 r=8、alpha=16、dropout=0.05、q_proj+v_proj 起步,再根据验证集效果、loss 曲线和显存情况微调。
from peft import LoraConfig, get_peft_model
config = LoraConfig(
r=8,
lora_alpha=16,
lora_dropout=0.05,
target_modules=["q_proj", "v_proj"],
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(base_model, config)
2. LoRA 的优势是什么?
答:LoRA 的核心优势是只训练少量新增参数,而冻结原始大模型参数,因此显存占用更低、训练速度更快、存储更省。相比全量微调,LoRA 不需要保存一整份新模型权重,只需要保存低秩增量矩阵,所以一个底座模型可以挂很多个不同任务的 LoRA 适配器,切换成本很低。它特别适合企业里的领域微调、风格微调、指令微调,因为这类场景往往资源有限,但又需要快速迭代。另外 LoRA 对原模型侵入小,工程上也容易接入 Transformers、PEFT、DeepSpeed 等生态。缺点是它的表达能力受 rank 限制,如果任务和底座模型差异特别大,或者需要非常深的能力迁移,效果可能不如全量微调。
3. 大模型如何通过人工指标来评估效果?有哪些常用的人工指标?
答:人工评估主要是解决自动指标无法准确反映真实体验的问题,尤其是在开放问答、对话、总结、代码生成、Agent 执行这些场景里。常用人工指标包括:正确性、相关性、完整性、流畅性、逻辑性、事实性、指令遵循、安全性、可读性、稳定性。如果是 RAG 场景,通常还会加上是否基于检索内容回答、有没有编造、引用是否准确;如果是 Agent 场景,会关注工具选择是否正确、参数是否合理、任务是否完成、失败时是否会瞎编。人工评测一般有两种常见方式,一种是单回答打分,比如 1 到 5 分;另一种是偏好评测,也就是同一个问题给标注员看两个回答,让他选哪个更好。人工评测要想稳定,关键是题目覆盖真实业务、标注规则一致、最好双人标注并做冲突仲裁。
4. 学习率、Batch Size、Warmup 这些训练参数如何影响模型的学习和优化?
答:学习率决定参数更新步长。学习率过大,loss 容易震荡甚至发散;学习率过小,收敛会变慢,甚至可能陷在次优解附近。对大模型微调来说,学习率通常比较小,LoRA 微调常见是 10-4到 10-5,全量微调一般更小。Batch Size 会影响梯度估计的稳定性。Batch 越大,梯度越稳定,但显存占用越高;Batch 太小,噪声大,训练容易波动,不过有时泛化可能更好。Warmup 的作用是让学习率在训练初期从很小逐渐升高,避免一开始梯度更新过猛导致不稳定。除了这几个参数,大模型训练里常配合权重衰减、梯度裁剪、学习率衰减调度器一起使用。经验上一般先确定总 batch,再根据 batch 和可训练参数规模调学习率,然后配 warmup 和 cosine/linear decay。
from transformers import get_cosine_schedule_with_warmup
import torch
optimizer = torch.optim.AdamW(model.parameters(), lr=2e-4, weight_decay=0.01)
scheduler = get_cosine_schedule_with_warmup(
optimizer,
num_warmup_steps=500,
num_training_steps=10000
)
5. DeepSpeed 的 ZeRO-1、ZeRO-2、ZeRO-3 分别有什么区别?
答:ZeRO 的目标是切分训练中冗余保存的状态,减少单卡显存压力。ZeRO-1 只切分优化器状态,比如 Adam 的一阶矩和二阶矩,模型参数和梯度仍然每张卡完整保存。ZeRO-2 在 ZeRO-1 基础上再切分梯度,也就是优化器状态和梯度都分片,但参数还是完整的。ZeRO-3 连模型参数也切分,每张卡只保存一部分参数,前向和反向时按需聚合和释放。显存节省能力是 ZeRO-3 最强,ZeRO-2 次之,ZeRO-1 最弱;但通信开销和系统复杂度也是 ZeRO-3 最高。如果模型不是特别大,ZeRO-2 往往是工程上比较平衡的选择;超大模型训练一般会使用 ZeRO-3。
6. Transformer 的自注意力中,KV-Cache 的引入有什么作用?它如何帮助加速推理过程?
答:KV-Cache 的作用是在自回归生成时缓存历史 token 的 Key 和 Value,避免每生成一个新 token 都把之前所有 token 的 K、V 重新计算一遍。如果没有 KV-Cache,生成第 (t) 个 token 时,需要对前 (t) 个 token 重新做投影并参与注意力;有了 KV-Cache 后,历史 token 的 K、V 可以直接复用,只需要计算当前 token 的 Q、K、V,并把新的 K、V 追加到缓存中。这样做能显著降低重复计算,尤其在长文本生成时加速非常明显。代价是显存会随着生成长度增长,因为缓存要一直保留历史 K、V。所以 KV-
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.