#专项遗漏问题补答区(第七批:架构、RoPE、复杂度与训练系统)
这一节专门补前面专项题库里仍然以“问题清单”形式存在、但没有逐题写出标准答案的部分。这里统一按“问:/答:”补齐,避免同一份材料里继续出现“列了问题却没写回答”的情况。
#一、模型架构专项补答
- 问:
Encoder-only、Decoder-only、Encoder-Decoder三种架构分别适合什么任务?答:
Encoder-only更适合理解类任务,如分类、匹配、抽取;Decoder-only更适合生成类任务,如对话、写作、代码补全;Encoder-Decoder更适合输入输出结构明确的条件生成任务,如翻译、摘要和问答生成。 - 问:为什么大语言模型大多采用
Decoder-only?答:因为它和 next-token prediction 目标天然一致,数据组织简单、扩展路径统一、生成任务兼容性最好,所以在大规模预训练和通用生成场景里工程收益最高。
- 问:
BERT、T5、GPT代表了哪三类典型架构?答:
BERT代表Encoder-only,GPT代表Decoder-only,T5代表Encoder-Decoder;它们分别对应理解、生成和条件生成三条典型路线。 - 问:
MoE架构和 dense(稠密)架构的差异是什么?答:dense 模型每个 token 都经过整套参数,
MoE则只激活少数专家,因此MoE的总参数量可以很大,但单 token 激活计算量不一定线性变大,代价是路由和通信复杂度更高。 - 问:
MHA、MQA、GQA分别是什么?答:
MHA是每个 query 头都有独立K/V;MQA是多个 query 头共享同一组K/V;GQA是分组共享K/V,本质上是在质量和缓存成本之间做折中。 - 问:如果让你从零选一个基础架构做企业通用 LLM,你为什么会优先考虑
Decoder-only?答:因为企业通用 LLM 往往既要做问答又要做生成和工具调用,
Decoder-only在训练目标、推理链路、生态成熟度和模型扩展性上都最统一,综合工程风险最低。 - 问:
Encoder-Decoder为什么在翻译、摘要里历史上很强,但在超大规模通用 LLM 上不是绝对主流?答:因为它对强条件生成任务很自然,但在海量自回归预训练、统一任务接口和通用聊天生成上不如
Decoder-only简洁,所以通用基座更偏后者。 - 问:dense 模型和
MoE模型在训练成本、推理成本、路由稳定性上的 trade-off 是什么?答:dense 模型训练和推理更直接、更稳定,但容量扩展成本高;
MoE能在较低激活 FLOPs 下扩大容量,但路由、负载均衡、专家并行和部署调度都更复杂。 - 问:为什么很多新模型在注意力头设计上从
MHA转向GQA/MQA?答:核心原因是长上下文推理里
KV cache占用和带宽压力太大,GQA/MQA能显著减小缓存成本,因此成为更现实的 serving 选择。 - 问:为什么很多现代 LLM 使用
RMSNorm而不是LayerNorm?答:
RMSNorm省掉了显式去均值步骤,计算更简单、实现更轻,在现代 LLM 中通常已足够稳定,因此常被用作更高性价比的归一化方案。 - 问:为什么很多模型用
SwiGLU/GeGLU替代普通ReLU FFN?答:因为门控 FFN 让不同通道的信息流更有选择性,表达能力通常强于普通两层
ReLU FFN,虽然参数和计算略增,但在大模型里往往值得。 - 问:为什么
Pre-Norm更适合深层训练?答:因为先归一化再进入子层能让梯度流更稳定,减轻深层网络里的训练不稳和梯度问题,所以现代深层 Transformer 通常更偏
Pre-Norm。 - 问:residual connection(残差连接)对训练深层网络的作用是什么?
答:残差连接给信息和梯度提供了短路路径,降低深层网络训练难度,避免每一层都必须完整重建输入表示。
- 问:
RMSNorm + SwiGLU + RoPE + GQA这类组合为什么会在现代开源模型里反复出现?答:因为它们分别优化训练稳定性、前馈表达能力、位置信息注入和推理缓存成本,这是一组工程上非常均衡的组合。
- 问:一个结构改动到底是“提高上限”,还是“提高训练稳定性 / 推理效率”,你怎么区分?
答:看它主要影响的是模型表达空间、优化过程还是运行成本;如果主要改变建模能力,就是提高上限,如果主要改善收敛或降低显存/带宽,就是偏稳定性或效率优化。
#二、RoPE 与位置编码专项补答
- 问:为什么 Transformer 需要位置编码?
答:因为 attention 本身对输入顺序不敏感,如果不显式注入位置信息,模型无法区分“谁在前、谁在后”和“谁离谁更近”。
- 问:绝对位置编码、相对位置编码、
RoPE、ALiBi的差异是什么?答:绝对位置编码强调第几个位置,相对位置编码强调相距多远,
RoPE通过旋转把相对位置信息注入Q/K,ALiBi则通过对注意力分数加距离偏置来实现长度友好的相对建模。 - 问:
RoPE的基本思想是什么?答:把位置信息编码到
Q/K的旋转变换里,让 attention 内积天然带上相对位置关系,而不是把位置直接加到 token 向量上。 - 问:为什么
RoPE常用于自回归大语言模型?答:因为它和自回归 attention 的相对位置需求很契合,工程上也容易和 Decoder-only 模型统一起来。
- 问:
RoPE为什么更容易支持长度外推?答:因为它基于相对位置结构而不是死记绝对位置 embedding,所以在一定范围内对超出训练长度的外推更自然,但并不是无限稳。
- 问:不用公式,你怎么解释
RoPE到底做了什么?答:可以理解成它让每个位置都给
Q/K向量一个不同角度的旋转,于是模型在比较两个 token 时,自然就能感知它们的相对顺序和距离。 - 问:为什么
RoPE能把位置信息编码进 attention 计算里?答:因为位置变换直接作用在
Q/K上,最终 attention 分数来自二者内积,所以分数本身会随相对位置而变化。 - 问:为什么上下文从
8K拉到128K后,RoPE仍然可能失效?答:因为问题不只在编码公式,还在训练长度覆盖、长距离信息稀释、数值稳定性和模型是否真正学会利用这么长的上下文。
- 问:
NTK-aware scaling、YaRN、位置插值这类方法在试图补什么问题?答:它们都在试图让原本按较短长度训练出来的
RoPE在更长上下文下仍保持可用,减少长度外推带来的相位失真和性能退化。 - 问:
RoPE的问题到底是“数学上不支持”,还是“训练分布没覆盖”?答:更常见的是后者,即模型没在足够长的长度分布上学会稳定使用这些位置关系,而不是公式本身完全不能工作。
- 问:
RoPE和ALiBi谁更适合长上下文?答:
ALiBi往往在长度外推稳定性上更直观,RoPE在主流开源模型和综合效果上更常见,二者没有绝对胜负,取决于目标长度和生态选择。 - 问:为什么“支持 128K 上下文”不代表“真的能有效利用 128K 信息”?
答:因为形式上能塞进去,不等于模型能稳定检索、定位并利用中间和远端证据,实际效果还取决于训练分布和注意力利用效率。
- 问:如果一个 RAG 系统召回很多文档,长上下文 +
RoPE是否就可以完全替代 reranker?答:不可以,因为长上下文并不能自动解决证据排序和噪声控制问题,reranker 仍然决定哪些证据最先进入模型的注意力焦点。
- 问:为什么
RoPE往往按二维一组做旋转,而不是对整个向量整体做一次旋转?答:因为这样实现简单、可分解,并且能在不同频率子空间上稳定编码位置信息,更适合 Transformer 里的向量结构。
- 问:
RoPE的 base theta(基频)调大或调小,会怎样影响长短程位置分辨率?答:它决定不同维度旋转频率的分布,影响模型对短距离和长距离位置差异的分辨能力,本质是在长短程位置建模之间做权衡。
- 问:为什么很多长上下文方法不直接改模型结构,而是先改
RoPE scaling?答:因为改
RoPE scaling的工程代价更低、兼容现有模型权重,也更容易在不重做整套架构的前提下先验证长上下文收益。 - 问:位置插值(position interpolation)和外推(extrapolation)在直觉上有什么不同?
答:插值更像把原有位置范围压缩后重新映射到更长区间,外推则是直接往训练范围外延伸;前者通常比硬外推更稳。
- 问:为什么有时候模型“形式上支持长上下文”,但真正问跨
50Ktoken 的问题仍然答不好?答:因为模型可能缺乏长程检索能力,或者中间证据利用率太差,导致“能装下”和“能用好”之间存在很大差距。
#三、参数量、显存与复杂度专项补答
- 问:一个 Transformer block 的参数主要来自哪里?
答:主要来自 attention 投影矩阵和 FFN,其中在现代 LLM 里 FFN 通常比 attention 占更多参数。
- 问:Self-Attention 的时间复杂度和空间复杂度是什么?
答:核心由
QK^T决定,通常都看作随序列长度呈O(n^2)增长。 - 问:
KV cache的显存占用和哪些变量成正比?答:和
batch size、序列长度、层数、kv_heads、head_dim、数据精度字节数直接相关。 - 问:一个模型总参数量可以怎样快速估算?
答:常用办法是按 embedding、单层 attention、单层 FFN 和层数做数量级近似,再加少量 norm 和输出头开销。
- 问:为什么
FFN往往比 attention 占更多参数?答:因为 FFN 隐层维度通常会扩到
d_ff,在 LLaMA 风格模型里门控 FFN 常常贡献每层的大头参数。 - 问:为什么训练显存通常远大于推理显存?
答:训练除了参数外还要存梯度、优化器状态和激活,而推理通常只存参数和运行态缓存。
- 问:为什么推理长上下文时,显存也可能非常高?
答:因为长上下文和高并发会让
KV cache快速膨胀,推理时显存大头常常变成缓存而不是权重。 - 问:参数、梯度、优化器状态、激活值、
KV cache各在什么阶段占主导?答:训练时参数、梯度、优化器状态和激活共同占显存,推理时参数常驻、
KV cache在长上下文和高并发下更容易占主导。 - 问:为什么 7B、13B、70B 之间不是简单线性差别,而是训练成本和服务成本都急剧变化?
答:因为参数量变大时,显存、带宽、通信、批大小限制和服务冗余都会一起放大,系统成本往往是非线性上升的。
- 问:为什么 attention 的复杂度是
O(n^2),但参数量并不随序列长度增长?答:因为参数矩阵是固定大小,二次复杂度来自 token 两两交互,而不是模型静态权重变多。
- 问:为什么长上下文主要先打爆的是缓存与带宽,而不只是参数?
答:因为参数是静态常驻的,而上下文增长会直接扩大 attention 计算和
KV cache读写压力。 - 问:如果把头数翻倍、层数翻倍、隐藏维度翻倍,哪个对参数量和 FLOPs 影响最大?
答:通常隐藏维度翻倍影响最大,因为大部分主矩阵参数和 FLOPs 都近似按
d^2增长。 - 问:
MoE为什么总参数量大,但激活参数量未必大?答:因为每个 token 只走 top-k 专家,真正参与单次前向计算的只是全部专家中的一小部分。
- 问:为什么
LLaMA/Qwen这一代模型常见组合是Decoder-only + RoPE + RMSNorm + SwiGLU + GQA?答:因为这套组合同时兼顾生成统一性、位置建模、训练稳定性、前馈表达能力和推理缓存成本,是很强的工程平衡点。
- 问:这些改动里,哪些主要提高效果,哪些主要提高稳定性,哪些主要优化推理?
答:通常
SwiGLU更偏表达能力,RMSNorm更偏稳定性,GQA更偏推理效率,RoPE则兼顾位置建模与工程适配。 - 问:如果必须删掉其中一个组件,你最不想删哪个,为什么?
答:很多场景下最不想删的是
RoPE或GQA,前者关系到位置信息建模,后者直接影响长上下文推理成本,两者都牵动整条链路。 - 问:
MoE、MLA、Mamba/SSM、linear attention各自想解决什么瓶颈?答:
MoE主要解决容量扩展,MLA/GQA/MQA更偏缓存和带宽,Mamba/SSM/linear attention更偏长序列效率和二次复杂度瓶颈。 - 问:这些路线里,哪一类更偏“提升容量”,哪一类更偏“提升长序列效率”,哪一类更偏“降低缓存成本”?
答:
MoE偏提升容量,Mamba/SSM/linear attention偏提升长序列效率,MLA/GQA/MQA偏降低缓存成本。 - 问:为什么今天行业仍以 Transformer 主干为主,而不是已经全面切到新架构?
答:因为 Transformer 在训练稳定性、生态成熟度、工具链和综合泛化能力上仍然最稳,新架构通常只在某些瓶颈上占优。
- 问:为什么
d翻倍比头数翻倍更可怕?答:因为主矩阵参数和计算量通常按隐藏维度平方增长,而头数翻倍在很多情况下更多是重新分配表示而不是平方放大主矩阵。
- 问:为什么层数翻倍会让参数和缓存都近似翻倍?
答:因为每层都新增一套 attention/FFN 参数,推理时每层也都要维护自己的
KV cache。 - 问:为什么
GQA能显著省缓存,但不一定大幅改 attention 主干参数?答:因为它主要减少的是
K/V头数和缓存带宽压力,而Q和输出投影的大部分主干结构仍然保留。 - 问:为什么
MoE的总参数量大,不代表每个 token 的FLOPs同样大?答:因为 MoE 的关键就是条件计算,总参数很大但单 token 只激活部分专家。
#四、分布式训练、显存与底层系统专项补答
- 问:数据并行(
DP)、张量并行(TP)、流水线并行(PP)的区别是什么?答:
DP切数据、保完整模型;TP切单层矩阵;PP按层切网络并用 micro-batch 调度流水线。 - 问:
ZeRO-1/2/3分别切分了什么?答:
ZeRO-1切优化器状态,ZeRO-2再切梯度,ZeRO-3连参数也切开。 - 问:
FSDP和传统DDP的核心差别是什么?答:
DDP依赖每卡一份完整模型再同步梯度,FSDP则把参数、梯度和优化器状态分片后按需聚合。 - 问:为什么大模型训练常常需要“混合并行”而不是单一并行策略?
答:因为单一策略通常只能解决显存、吞吐或通信中的一类问题,真实系统必须组合多个维度一起优化。
- 问:activation checkpointing(激活重计算)为什么能省显存?
答:因为它不保留全部中间激活,而是在反向时重算一部分前向,用额外算力换更低显存占用。
- 问:梯度累积(gradient accumulation)解决了什么问题?
答:它让小显存环境下也能模拟更大 batch,从而在放不下完整 batch 时维持训练稳定性。
- 问:
all-reduce、all-gather、reduce-scatter在训练里各常用在哪里?答:
all-reduce常用于梯度同步,all-gather常用于参数或激活拼回完整结果,reduce-scatter常用于分片梯度归约后各拿一片。 - 问:为什么
MoE会把分布式通信问题进一步放大?答:因为 token 会按路由跨卡发往不同专家,dispatch 和负载不均都会显著增加通信复杂度。
- 问:如果一个
70B dense模型单卡放不下,你会如何组合TP/PP/DP?答:通常会优先机内做
TP/SP,机间做FSDP/DP,必要时再叠PP,让高频层内通信尽量留在高速互联域内。 - 问:
ZeRO-3和FSDP都在做参数切分,它们在工程实现和性能特征上怎么比较?答:二者都通过全分片降低显存,但
ZeRO-3更常在 DeepSpeed 语境下调 stage 和 offload,FSDP更常在 PyTorch 原生语境下配合all-gather/reduce-scatter生命周期管理。 - 问:为什么有时多卡训练并没有线性加速,瓶颈通常卡在哪?
答:通常卡在梯度同步、层内通信、stage 不均衡、数据加载、激活传输或内存带宽,而不是纯算力不够。
- 问:什么情况下你会优先加
PP,什么情况下会优先加TP?答:单层矩阵太大、且机内高速互联充足时优先
TP;层数很深、模型天然可按层切分时更适合PP。 - 问:为什么说大模型训练经常不是“算力瓶颈”,而是“通信瓶颈”或“显存瓶颈”?
答:因为模型一旦做分布式,很多时间会花在同步和搬运上,而超大模型常常首先是放不下或通信藏不住,而不是卡算力峰值。
- 问:如果 loss 不收敛,你如何判断问题来自学习率、数值稳定性、并行切分,还是通信错误?
答:先做最小规模复现,再逐层拆掉并行和优化技巧,如果单卡稳定、多卡不稳,就优先怀疑切分或通信链路。
- 问:为什么
activation checkpointing省显存但会拖慢训练?答:因为反向传播时需要额外重跑部分前向,所以总计算量会增加。
- 问:如果你要训练
MoE,专家并行(expert parallel)和普通TP/PP如何协同?答:通常专家层由
EP负责按 expert 分布,普通 dense 主干仍用TP/PP/FSDP,关键是让专家 dispatch 和其他并行拓扑配合好。 - 问:训练显存主要由哪几部分组成?
答:通常包括参数、梯度、优化器状态、激活以及临时 buffer/workspace。
- 问:哪些方法可以降低训练显存?
答:常见方法有低精度、
ZeRO/FSDP、checkpointing、sequence parallel、LoRA/QLoRA、减小 batch 或上下文长度、必要时 offload。 - 问:为什么
BF16/FP16能省显存?答:因为每个元素占用字节数更少,从而直接减少参数、激活和部分状态的存储成本。
- 问:activation recomputation(激活重计算)会影响什么?
答:它主要影响训练时间和算力开销,但换来更低的激活显存占用。
- 问:optimizer state 为什么常常比你想象得更占显存?
答:因为像 Adam 这类优化器通常要为每个参数额外存一阶和二阶矩,甚至还有 master weight,总体开销可达参数本身数倍。
- 问:如果你只有有限张
A100/H100,怎么训练更大的模型?答:通常要组合低精度、分片并行、checkpointing、LoRA/QLoRA、缩短上下文和必要的 offload,而不是指望单一技巧解决所有问题。
- 问:显存不够时,你的优化顺序是什么?
答:一般先降精度,再切状态,再压激活,再改训练方式,最后才考虑 offload 这类会明显拖慢速度的手段。
- 问:gradient checkpointing、
QLoRA、ZeRO-3、offload、sequence parallel 分别适合什么阶段?答:checkpointing 和 sequence parallel 主要压激活,
QLoRA适合资源受限微调,ZeRO-3适合全参大模型训练,offload 更像显存兜底方案。 - 问:为什么有时显存够了,训练速度却慢到不能接受?
答:因为显存问题解决后,可能转而暴露出重计算、offload、通信或小 batch 导致的吞吐瓶颈。
- 问:为什么大模型多机多卡训练常常扩到一定规模后效率骤降?
答:因为 world size 变大后,通信延迟、同步频率和负载不均会越来越显著,最终吞掉扩卡带来的收益。
- 问:
all-reduce为什么会成为瓶颈?答:因为梯度同步往往处在主路径上,而且通信量随模型规模和卡数扩大,很容易成为 wall-clock 的大头。
- 问:为什么
TP往往更依赖高速互联?答:因为
TP在单层内部频繁交换中间结果,这类层内通信对延迟非常敏感,最适合放在NVLink/NVSwitch这类高速域内。 - 问:
PP的 bubble(流水线气泡)是什么,怎么缓解?答:bubble 就是 stage 空转等待数据的时间,通常通过增大 micro-batch、均衡 stage 切分和优化调度来缓解。
- 问:为什么 overlap communication and computation(通信计算重叠)这么重要?
答:因为它能把部分通信时间藏在计算后面,减少同步直接暴露在训练总时长中的比例。
- 问:算子融合为什么能提速?
答:因为它减少了 kernel launch 和中间结果落地,从而降低访存和调度开销。
- 问:为什么
FlashAttention主要优化的是IO而不是数学公式?答:因为它没有改 attention 的定义,而是通过分块和在线归一化减少中间矩阵的显式写回与读回。
- 问:
RMSNorm、softmax、GEMM为什么经常是优化热点?答:因为它们在训练和推理链路里调用频繁、总耗时高,且很多都受访存和实现细节影响很大。
- 问:什么是 memory coalescing(访存合并)?
答:指相邻线程尽量访问相邻内存地址,从而减少低效访存事务,提高带宽利用率。
- 问:shared memory / register / global memory 的速度层次关系是什么?
答:通常寄存器最快,其次是 shared memory,再往下是 global memory;越靠近计算单元的存储越快但容量越小。
- 问:为什么很多大模型算子优化最后都在做“减少 HBM 访问”?
答:因为很多算子真正卡的不是算力峰值,而是高带宽显存的读写次数和带宽上限。
- 问:为什么
RMSNorm、softmax、attention这些看起来简单的算子,优化难度反而很高?答:因为它们往往数据依赖强、访存密集、调用频繁,优化收益主要来自执行细节而不是公式复杂度。
- 问:你如何判断某个算子是 compute-bound 还是 memory-bound?
答:看算术强度,也就是每搬运一字节数据做多少计算;高算术强度更偏 compute-bound,反之更偏 memory-bound。
- 问:为什么说
FlashAttention成功的关键之一是“不要显式 materialize 整个 attention matrix”?答:因为完整落地大矩阵会带来巨大 HBM 读写成本,而这恰恰是标准 attention 的一个主要性能瓶颈。
- 问:
all-reduce、all-gather、reduce-scatter分别做什么?答:
all-reduce是规约后人人都有完整结果,all-gather是把分片拼完整,reduce-scatter是规约后各自拿一片结果。 - 问:为什么
reduce-scatter + all-gather常被拿来替代一次完整all-reduce语义链路?答:因为在分片训练里,我们往往只需要自己负责的 shard,按需再聚回完整结果会更符合分片语义和内存布局。
- 问:
ring all-reduce和tree all-reduce各适合什么场景?答:
ring通常带宽利用率高、适合大消息,tree延迟更低、适合较小消息和更强调时延的场景。 - 问:为什么
FSDP/ZeRO-3经常需要all-gather参数?答:因为参数平时是分片存的,前向或局部计算前需要临时把相关权重聚成完整形态。
- 问:反向传播中,哪些通信最容易与计算重叠,哪些最难?
答:分层完成后即可触发的梯度同步通常更容易重叠,必须等待关键路径结果的通信更难隐藏。
- 问:为什么有时候通信重叠做不好,反而会负优化?
答:因为通信切得太碎会增加调度、流竞争和 buffer 成本,最终可能比直接同步更慢。
- 问:如果
all-reduce很慢,你第一反应会排查什么?答:先看 bucket 配置、world size、拓扑、是否重叠失败以及是不是前面计算把通信暴露到了主路径上。
- 问:为什么 bucket size(分桶大小)会影响训练性能?
答:因为 bucket 太大启动通信晚,太小又过碎,二者都会影响重叠效果和调度成本。
- 问:expert parallel(
EP)是什么?答:它是把
MoE专家按卡分布、再把 token 按路由派发给对应专家的并行方式。 - 问:为什么
MoE比 dense 模型更容易遇到负载不均问题?答:因为路由器可能偏爱少数热点 expert,导致有的卡很忙、有的卡几乎空闲。
- 问:为什么
EP通常要和DP/TP/PP混合使用?答:因为
EP只解决专家层的分布问题,dense 主干、显存和吞吐仍需要其他并行策略共同承担。 - 问:为什么在
MoE里很多时候优先考虑EP,而不是简单把专家层继续做TP?答:因为专家天然就是可按 expert 维度拆分的,而不是所有专家都适合继续做层内矩阵切分。
- 问:top-k 路由为什么会放大跨卡通信?
答:因为 token 可能需要被发往非本地卡上的多个 expert,dispatch 和 gather 都会增加。
- 问:capacity factor(容量因子)和 load balancing loss(负载均衡损失)分别在解决什么?
答:capacity factor 控制单 expert 可接收的 token 容量上限,load balancing loss 则约束路由器别把流量过度集中到少数专家。
- 问:如果某些 expert 特别热、某些 expert 几乎不被激活,你会怎么处理?
答:通常要检查路由器训练、负载均衡损失、capacity 设置和数据分布,必要时重新约束路由或调整专家数。
- 问:为什么 micro-batch 数量会影响 pipeline 利用率?
答:因为 micro-batch 越多,流水线越容易被填满,bubble 占比越低。
- 问:为什么 stage 切分不均会导致整体吞吐下降?
答:因为最慢的 stage 会拖住整条流水线,其余 stage 只能等它完成。
- 问:如果
PP训练很慢,你如何判断问题是 bubble 过大还是 stage 切分不均?答:看 timeline,如果大量空转且在开头结尾明显,就是 bubble;如果某个 stage 长期最慢,就是切分不均。
- 问:为什么增加 micro-batch 能减轻 bubble,但不能无限增大?
答:因为它会增加激活显存和调度成本,到一定程度后收益递减甚至反噬延迟。
- 问:如果 embedding 层和最后输出头特别重,stage 应该如何切?
答:应尽量按实际耗时重新平衡 stage,而不是平均按层数切分,必要时让重层单独占 stage。
- 问:什么叫 1F1B(one-forward-one-backward)调度?它为什么常见?
答:它指流水线中前向和反向交替推进的调度方式,常见是因为能在显存和流水线利用率之间取得较好折中。
- 问:为什么训练系统总在强调 overlap communication and computation?
答:因为真正的优化重点往往不是减少通信量,而是别让通信完整暴露在 wall-clock 主路径上。
- 问:PyTorch
DDP/FSDP里通信重叠通常是怎么发生的?答:通常是在反向传播某层梯度 ready 后尽早触发该层同步,让后续层计算和前一层通信并行进行。
- 问:为什么“计算太快、通信太小、显存太紧”时,通信重叠可能反而不划算?
答:因为可隐藏的时间窗口太小,而额外的 chunk、buffer 和 stream 竞争可能把收益抵消掉。
- 问:如果一个系统说自己做了 overlap,你怎么验证它不是 PPT 优化?
答:最直接的方法是看 profiler/timeline,确认通信和计算是否真的并行,而不是只在文档里写了“支持 overlap”。
- 问:loss 抖得很厉害,但单卡小模型正常,你如何排查是并行切分问题还是数值问题?
答:先从最小单卡基线开始逐步加回并行和优化技巧,如果问题只在特定 world size 或切分方式出现,就更偏系统或通信问题。
- 问:多机训练吞吐忽高忽低,你先看数据加载、NCCL、还是 stage balance?为什么?
答:先看 end-to-end timeline,把抖动归类到数据、计算还是通信,再决定是先查 dataloader、NCCL 还是 stage balance,避免盲猜。
- 问:一换成
ZeRO-3/FSDP就慢很多,你如何判断慢在参数all-gather、offload、还是未重叠成功?答:看 profiler 中参数聚合时间、CPU/NVMe 活跃度和通信是否压在主路径上,分别对应
all-gather、offload 和 overlap 失效三类问题。 - 问:
MoE训练不稳定,是路由器、负载均衡,还是 expert capacity 设置问题?答:三者都要查,但经验上先看路由分布和负载是否塌缩,再看 capacity 是否过小导致 token 被频繁丢弃。