2026年算法工程师最新必问面试题七:大模型训练工程化

📅 2026/7/27 10:53:33
2026年算法工程师最新必问面试题七:大模型训练工程化
1. 预训练数据 pipeline 如何构建数据清洗、去重MinHash/SimHash、毒性过滤、质量打分的具体做法预训练数据 pipeline 是决定模型能力上限的关键环节通常包含以下核心步骤1.1 数据采集与初步清洗来源网页爬取Common Crawl、书籍、论文、代码仓库等。初步清洗去除 HTML 标签、乱码字符、过短文本如 50 tokens、重复段落。1.2 去重Deduplication方法原理适用场景优缺点Exact Dedup计算文本哈希如 SHA-256完全匹配则去重精确重复文档简单高效但无法处理近似重复MinHash将文本转为 n-gram 集合通过最小哈希签名估计 Jaccard 相似度大规模近似去重可扩展性好适合百亿级文档阈值需调参SimHash将文本映射为 64/128 位指纹通过海明距离判断相似度实时/近线去重速度快内存占用低对短文本敏感度不足实践建议先做 Exact Dedup 过滤精确重复再用 MinHash阈值 0.7-0.8做近似去重。2026 年主流方案如 RedPajama-V2 使用 MinHash LSH 加速。1.3 毒性过滤Toxicity Filtering基于规则黑名单关键词、正则匹配如暴力、色情词汇。基于分类器训练轻量级 BERT/RoBERTa 分类器如 Detoxify、Perspective API对每条文本打分。基于大模型用已有 LLM 做 zero-shot 毒性判别如 Is this text toxic? Answer yes/no。1.4 质量打分Quality Scoring启发式特征困惑度PPL、文本长度、标点符号比例、信息熵。模型打分训练一个质量分类器如 FastText / BERT以人工标注的高质量数据为正样本。2026 趋势使用DataComp-LM框架结合多维度打分语言质量、事实性、教育价值按分数分桶采样。# MinHash 去重伪代码 from datasketch import MinHash, MinHashLSH def minhash_dedup(docs, threshold0.7): lsh MinHashLSH(thresholdthreshold, num_perm128) for i, doc in enumerate(docs): m MinHash(num_perm128) for word in set(doc.split()): m.update(word.encode(utf8)) lsh.insert(fdoc_{i}, m) # 查询相似文档 duplicates set() for i, doc in enumerate(docs): m MinHash(num_perm128) for word in set(doc.split()): m.update(word.encode(utf8)) result lsh.query(m) if len(result) 1: duplicates.add(i) return duplicates2. Scaling Law 在 2026 年还成立吗怎么用 scaling law 反推模型规模与数据量的配比结论Scaling Law 在 2026 年仍然成立但已从暴力扩展转向效率优化。2.1 经典 Scaling Law 回顾Kaplan et al. (2020) 提出模型性能与参数量、数据量、计算量之间存在幂律关系。Chinchilla (2022) 进一步指出对于给定计算预算模型参数量与训练 token 数应等比例缩放即每增加 1 倍参数量训练数据也应增加 1 倍。2.2 2026 年的新变化数据瓶颈高质量文本数据接近耗尽合成数据Self-Play、Rejection Sampling成为补充。多模态 Scaling文本 图像 视频的联合 Scaling Law 正在建立如 DeepSeek-VL2、Gemini 2.0。推理 Scaling测试时计算Test-Time Compute成为新维度模型在推理阶段可思考更久来提升质量。2.3 反推模型规模与数据量配比给定计算预算 CFLOPs可按以下步骤反推确定最优参数量 N根据 Chinchilla 公式N ≈ C / (6 × D)其中 D 是训练 token 数。确定最优数据量 DD ≈ C / (6 × N)。实际配比2026 年经验法则——每 1B 参数对应约 20-30B tokens比 Chinchilla 的 20B 略高因为数据质量下降。def compute_optimal_allocation(compute_budget_flops): # Chinchilla 最优分配 N_opt (compute_budget_flops / (6 * 20e9)) ** 0.5 # 假设 20B tokens/1B params D_opt compute_budget_flops / (6 * N_opt) return N_opt, D_opt 示例1e23 FLOPs 预算 N, D compute_optimal_allocation(1e23) print(fOptimal params: {N/1e9:.1f}B, Optimal tokens: {D/1e9:.1f}B)3. 混合精度训练原理FP16 和 BF16 的区别为什么 BF16 在大模型训练中是主流3.1 混合精度训练原理混合精度训练Mixed Precision Training在训练过程中同时使用 FP32 和低精度FP16/BF16来加速计算并减少显存占用。核心思想前向/反向传播使用 FP16/BF16 计算加速矩阵乘法。权重更新维护 FP32 的权重副本Master Weights防止精度丢失。Loss Scaling对 loss 乘以缩放因子避免梯度下溢。3.2 FP16 vs BF16 对比特性FP16BF16位宽16 bits16 bits指数位5 bits8 bits尾数位10 bits7 bits数值范围±65,504±3.39 × 10^38精度高尾数多低尾数少下溢风险高小梯度易变为 0低指数范围大3.3 为什么 BF16 是主流更大的动态范围BF16 的指数位与 FP32 相同8 bits能表示非常小和非常大的数值避免梯度下溢。无需 Loss ScalingBF16 天然支持小梯度省去 Loss Scaling 的调参成本。硬件支持NVIDIA H100/H200、AMD MI300X、Google TPU v5 均原生支持 BF16 计算。训练稳定性BF16 在大规模训练中 loss 曲线更平滑减少 NaN 崩溃概率。4. 训练 loss 曲线突然震荡/上升可能的原因与排查路径4.1 常见原因原因表现典型场景数据分布突变loss 在某个 step 后突然跳升数据 pipeline 混入了新批次脏数据学习率过高loss 持续震荡不收敛Warmup 阶段后 LR 未合理衰减梯度爆炸loss 突然变为 NaN 或极大值深层网络梯度累积失控Batch Size 变化loss 曲线出现阶梯状跳变分布式训练中 batch size 不一致模型参数损坏loss 从某点开始持续上升Checkpoint 加载错误或显存 ECC 错误4.2 排查路径检查数据 pipeline查看最近 batch 的样本分布确认是否有异常数据如全 0 文本、乱码。监控梯度范数打印每层的梯度 L2 范数若 1e3 则触发梯度裁剪。检查学习率对比当前 LR 与预设 schedule确认是否跳过了 warmup 或衰减过快。回滚 checkpoint加载 loss 正常时的 checkpoint重新训练看是否复现。启用 NaN/Inf 检测器在 loss 计算后插入torch.isnan(loss).any()检查。# 梯度爆炸检测与裁剪 def check_and_clip_grad(model, max_norm1.0): total_norm 0.0 for p in model.parameters(): if p.grad is not None: param_norm p.grad.data.norm(2) total_norm param_norm.item() ** 2 total_norm total_norm ** 0.5 if total_norm 1e3: print(fWARNING: Gradient norm {total_norm:.2f}, clipping...) torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm) return total_norm5. 灾难性遗忘Catastrophic Forgetting在微调中如何缓解经验回放、正则化、LoRA rank 选择5.1 灾难性遗忘的本质微调新任务时模型参数向新任务偏移导致在旧任务上的性能急剧下降。根本原因是神经网络参数共享带来的干扰性更新。5.2 缓解策略5.2.1 经验回放Experience Replay方法在微调数据中混合 10%-30% 的预训练数据或旧任务数据。变体使用Replay Buffer存储旧任务代表性样本每次更新时同时回放。2026 实践结合Data Selection技术只选择对旧任务最关键的样本回放。5.2.2 正则化方法EWCElastic Weight Consolidation对重要参数施加二次惩罚阻止其大幅更新。SISynaptic Intelligence在线估计每个参数对旧任务的重要性。L2 正则化在 loss 中加入λ ||θ - θ_old||²简单有效。5.2.3 LoRA rank 选择Rank适用场景遗忘风险参数量r1-4简单分类、情感分析低极小r8-16通用指令微调、对话中适中r32-64复杂推理、代码生成高较大经验法则rank 越大模型对新任务的拟合能力越强但遗忘风险也越高。建议从 r8 开始观察验证集上旧任务性能若下降超过 5% 则降低 rank 或增加回放数据。6. SFT 数据如何构造高质量指令数据的筛选标准、Self-Instruct / Magpie 合成数据方法、脏数据的影响6.1 高质量指令数据的筛选标准多样性覆盖数学、代码、写作、推理、角色扮演等 20 领域。难度适中太难模型答不出或太简单模型已掌握的数据都应过滤。答案正确性人工标注或 LLM-as-Judge 验证答案是否准确。格式规范指令清晰、答案完整、无格式错误。6.2 合成数据方法Self-Instruct用种子指令如 175 条人工编写指令引导 LLM 生成新指令。对生成指令去重、过滤低质量。用 LLM 为每条指令生成答案。迭代多轮可扩展到数万条。Magpie2024核心思想利用 LLM 的自回归特性让模型自己发现指令。做法给模型一个前缀如 A chat between user and assistant.让模型自动生成完整的对话。优势无需种子指令数据分布更自然覆盖长尾场景。6.3 脏数据的影响毒性污染模型学会输出有害内容。事实错误模型产生幻觉Hallucination。格式混乱模型输出结构不完整。2026 实践使用DeitaData-Efficient Instruction Tuning框架通过模型评分自动筛选高质量子集仅用 10% 数据即可达到全量 SFT 效果。7. 多任务微调中如何平衡不同任务的 loss任务权重、loss mask、数据采样比例7.1 任务权重Task Weighting固定权重根据任务重要性手动设置如数学任务权重 2.0闲聊任务权重 0.5。自适应权重使用Uncertainty WeightingKendall et al. 2018将每个任务的 loss 方差作为可学习参数自动平衡。GradNorm根据梯度范数动态调整权重使各任务梯度量级相近。7.2 Loss Mask作用在计算 loss 时忽略不需要监督的位置如 prompt 部分、填充 token。实现在交叉熵 loss 中传入ignore_index-100只对 assistant 回答部分计算 loss。# Loss Mask 示例 def masked_cross_entropy(logits, labels, ignore_index-100): loss_fn torch.nn.CrossEntropyLoss(ignore_indexignore_index) return loss_fn(logits.view(-1, logits.size(-1)), labels.view(-1))7.3 数据采样比例策略做法适用场景均匀采样每个任务等概率采样任务数据量相近按比例采样按任务数据量比例采样数据量差异大温度采样对采样概率做温度缩放T1 更均匀防止大任务主导课程采样先简单任务后复杂任务训练初期稳定性差2026 最佳实践使用DoReMiDomain Reweighting with Minimax框架通过代理模型自动学习最优数据混合比例。8. 千卡集群训练如何做容错断点续训checkpointing、节点故障处理、3D 并行组合策略8.1 断点续训Checkpointing全量 Checkpoint保存 optimizer state model weights random states每 N 步保存一次。异步 Checkpoint使用独立 CPU 线程或额外 GPU 做 checkpoint 写入不阻塞训练。分布式 Checkpoint每个 rank 只保存自己分片恢复时通过torch.distributed.checkpoint合并。8.2 节点故障处理心跳检测每 30s 检测所有节点通信状态超时则标记为故障。弹性训练使用TorchElasticetcd 或 Kubernetes 原生故障节点自动替换剩余节点重新分配 shard。故障恢复流程检测故障 → 暂停训练 → 加载最新 checkpoint → 排除故障节点 → 重新分配 rank → 恢复训练。8.3 3D 并行组合策略并行策略原理适用场景通信开销数据并行DP每个 GPU 一份完整模型不同 batch小模型10B低AllReduce张量并行TP将单层参数切分到多个 GPU单层过大单卡显存高节点内 NVLink流水线并行PP按层切分不同 GPU 负责不同层超深模型100 层中点对点通信2026 推荐组合节点内TP4-8 卡 PP2-4 阶段节点间DPZeRO-3 或 FSDP总规模TP × PP × DP 总 GPU 数# 3D 并行配置示例基于 Megatron-LM model_parallel_size 8 # TP pipeline_model_parallel_size 4 # PP data_parallel_size world_size // (model_parallel_size * pipeline_model_parallel_size) 容错配置 checkpoint_activations True checkpoint_num_layers 1 no_pipeline_parallel False distributed_backend nccl use_elastic True # 启用弹性训练