百度

大模型算法工程师一面面经

完整信息

8 条问法 · 8 道题

本篇目录
1. 请做一下自我介绍 2. SFT 数据和偏好数据应该如何构建?怎样控制数据污染与分布偏移? 答案: SFT 数据通常由 instruction、input、response 组成,目标是让模型学习任务格式、领域知识和回答方式。数据来源可以包括人工编写、业务历史数据、知识库改写和强模型蒸馏,但不能直接混合后训练。需要依次做规则清洗、语义去重、质量打分、难度分层、安全过滤和人工抽检。 偏好数据一般表示为 (prompt, chosen, rejected)。chosen 和 rejected 最好只在少数关键属性上存在差异,例如事实正确性、推理完整性或指令遵循,否则模型很难学到稳定的偏好边界。负样本不能全部来自明显错误的弱模型回答,还应加入事实基本正确但推理不完整、格式正确但没有解决问题等难负样本。 数据污染控制不能只做字符串去重。应同时使用规范化文本哈希、MinHash、向量召回和答案级匹配,检查训练集与验证集、测试集之间的近似重复。对于代码和数学题,还要检测变量改名、题面改写和答案模板复用。 分布偏移可以通过分桶统计发现,包括领域、长度、语言、难度、拒答比例和答案风格。训练采样比例不应简单等于原始数据比例,而应根据目标线上流量和能力短板进行重加权。 from dataclasses import dataclass import hashlib import re @dataclass class Sample: prompt: str response: str domain: str score: float def normalize(text: str) -> str: text = text.lower().strip() text = re.sub(r"\s+", " ", text) text = re.sub(r"[^\w\u4e00-\u9fff ]", "", text) return text def fingerprint(sample: Sample) -> str: content = normalize(sample.prompt) + "\n" + normalize(sample.response) return hashlib.sha256(content.encode("utf-8")).hexdigest() def filter_samples(samples): seen = set() result = [] for sample in samples: key = fingerprint(sample) if key in seen or sample.score < 0.75: continue seen.add(key) result.append(sample) return result 3. 为什么 Decoder-only 模型的 KV Cache 缓存 K 和 V,而通常不缓存 Q? 答案: 自回归解码的第 (t) 步只会产生当前 token 的查询向量 (Q_t),它用于查询从第 1 个 token 到第 (t) 个 token 的键和值。历史 token 的 (Q) 不会再次参与后续 token 的注意力计算,因此缓存历史 (Q) 没有复用价值。 历史 (K) 和 (V) 会在每个后续解码步骤中被重复访问,所以需要缓存。若不使用 KV Cache,第 (t) 步必须重新计算前面所有 token 的 K、V,整个生成过程会产生大量重复计算。 单层 KV Cache 的元素数量近似为: 其中 2 表示 K 和 V,B 是批大小,L)是序列长度,Hkv 是 KV Head 数量,D 是 Head Dimension。显存占用还要乘以层数和数据类型字节数。 MQA 和 GQA 能降低 KV Cache,是因为多个 Query Head 共享一个或一组 KV Head。它们减少的是 KV Head 数,而不是 Query Head 数。代价是 KV 表达能力下降,尤其在长上下文和复杂检索任务上可能影响效果。 4. DPO 的目标函数是如何从 KL 约束的强化学习目标推导出来的? 答案: DPO 不需要显式训练奖励模型,也不需要在线采样和 PPO 的价值网络,但它仍然依赖偏好数据质量和参考模型。β 较大时,会放大策略模型相对参考模型的隐式奖励差异;实际训练中,它也决定了偏好优化强度及策略偏离参考模型的程度。 import torch import torch.nn.functional as F def dpo_loss( policy_chosen_logp, policy_rejected_logp, ref_chosen_logp, ref_rejected_logp, beta=0.1, ): policy_ratio = policy_chosen_logp - policy_rejected_logp ref_ratio = ref_chosen_logp - ref_rejected_logp logits = beta * (policy_ratio - ref_ratio) loss = -F.logsigmoid(logits).mean() chosen_reward = beta * ( policy_chosen_logp - ref_chosen_logp ).detach() rejected_reward = beta * ( policy_rejected_logp - ref_rejected_logp ).detach() return loss, chosen_reward, rejected_reward 5. 如果训练过程完全正常,但离线评测结果突然下降,怎样定位是哪一个环节出现了问题? 答案: 首先冻结现场,不要立即重新训练。需要保存当前 checkpoint、配置文件、代码提交、数据版本、评测镜像和原始预测结果,然后与最近一次正常实验做单变量对比。 定位顺序通常是: 检查评测集版本、Prompt 模板、Tokenizer、停止词、解码参数和后处理逻辑。 使用同一个 checkpoint 分别运行新旧评测代码,判断问题属于模型还是评测链路。 使用新旧 checkpoint 运行同一套固定评测,确认能力下降从哪个训练阶段开始。 对比训练数据的数量、长度、领域占比、重复率、截断率和拒答比例。 检查是否加载了错误的 LoRA、EMA 权重、Tokenizer 或基础模型。 抽取能力下降最严重的样本,比较 token 级概率、输出长度、终止原因和格式解析结果。 对关键变量做消融复现,避免根据单次指标波动直接归因。 尤其要警惕“模型回答正确,但评测器判错”。例如输出模板变化、答案末尾多出解释、浮点误差或 Judge 模型版本变化,都可能导致结果下降。最终应使用金丝雀样本和固定环境回放,把训练、导出、部署、评测四段链路分别验证。 6. FlashAttention 为什么既能减少显存,又可能提升运行速度?它是否改变了注意力结果? 答案: 标准注意力会显式物化 N×N 的注意力分数矩阵,并在 HBM 与片上 SRAM 之间多次读写。FlashAttention 将 Q、K、V 分块加载到 SRAM,在块内完成矩阵乘法、mask、softmax 和与 V 的乘法,从而减少对高带宽显存的读写。 它的关键不是少做了注意力计算,计算复杂度仍然近似为O(N2d),而是降低了 IO 复杂度。现代 GPU 上注意力常受显存带宽限制,因此减少 HBM 访问后,速度反而更快。 为了避免保存完整分数矩阵,FlashAttention 使用 online softmax。对每一行持续维护当前最大值 m 和归一化因子 l,读取新块后对旧结果重新缩放: 理论上它计算的是精确注意力,不是稀疏近似。但由于浮点运算顺序、混合精度和 kernel 实现不同,结果可能存在很小的数值误差。Dropout 场景还需要可复现的随机数映射,否则反向重计算时无法恢复相同的 mask。 7. 在工业故障诊断大模型项目中,如何证明模型提升来自训练策略,而不是测试集污染或 Judge 偏差? 答案: 项目中的核心风险是维修工单和设备日志存在模板化内容,同一故障可能跨时间重复出现。如果随机切分数据,模型可能在训练集中见过高度相似的设备、错误码和维修结论。 因此数据应按照设备族、故障事件和时间窗口分组切分,保证同一事件链不会跨集合。随后使用文本指纹、MinHash 和向量召回检查近似重复,并单独建立一个发布时间晚于训练数据截止时间的时间外测试集。 评测不能只依赖单个 LLM Judge。故障分类、错误码识别等任务使用确定性指标;诊断解释由多个 Judge 交叉评分,并抽取分歧样本人工复核。Judge 输入中的模型名称和答案顺序需要隐藏,还要交换 A/B 答案位置,检测位置偏差。 训练策略的收益通过严格消融验证:固定基础模型、数据、训练步数、随机种子集合和解码参数,只替换一个训练变量。至少运行多个随机种子并报告均值、方差和置信区间。若某项策略只提升 Judge 分数,却没有提升人工评测、确定性任务或时间外测试集,则不能认为它带来了可靠收益。 8. MoE 的负载均衡损失为什么可能导致专家路由塌缩?如何设计更稳定的路由机制? 答案: MoE 通常由 Router 为每个 token 计算专家分数,并选择 Top-K 专家。理想情况下,不同专家承担不同模式,同时负载相对均衡。问题是 Router 和专家共同训练,早期稍强的专家会获得更多 token,更多梯度又会让它继续变强,形成正反馈,最终导致路由塌缩。 常见辅助损失会同时约束专家接收 token 的比例和 Router 概率质量,例如: 其中 fi是分配给专家i的 token 比例,fi是平均路由概率。但辅助损失权重过大会干扰主任务,强迫本来就不均匀的数据分布均匀路由;权重过小又无法抑制塌缩。 更稳定的方案包括 Router z-loss、路由噪声、专家容量限制、丢弃或重路由
本篇目录
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
    如果训练过程完全正常,但离线评测结果突然下降,怎样定位是哪一个环节出现了问题?
  6. 06
  7. 07
    在工业故障诊断大模型项目中,如何证明模型提升来自训练策略,而不是测试集污染或 Judge 偏差?
  8. 08

相关公司