Home Megatron 面试题(二):Tensor 与 Sequence Parallel
Post
Cancel

Megatron 面试题(二):Tensor 与 Sequence Parallel

本文是Megatron 专家面试题系列的 Level 2,覆盖 M025-M040。重点是Column/Row Parallel、mapping autograd、通信量、切分约束与 V100 实测。

上一篇:模型抽象与数据流 · 系列总索引 · 下一篇:PP 调度与负载均衡


4. Level 2:Tensor Parallel 与 Sequence Parallel(M025-M040)

M025. ColumnParallelLinear 如何切参数、输入和输出?

高分回答要点

  • 逻辑 Y=XW,沿 W 输出列切成 W_i;每 rank 输入 X 通常完整,计算本地 Y_i=XW_i
  • 若下一算子可消费分片输出,就不 gather;需要完整 Y 时才 AllGather。
  • backward 本地算 dW_i,各 rank 对 X 的梯度 contribution 需在 TP group 归约。

追问:写出 X:[s,b,h]W:[h,4h]、TP=t 时本地 W/Y shape 和 dX 通信 bytes。

前置知识与分析过程:固定矩阵约定Y=XW,先选W的partition axis,再推local forward,最后用链式法则推dX/dW与collective。任何TP题都按此顺序,不靠“列并行”名称猜通信。

主问题得分点(10分):切分轴和local shape 3 分;forward是否gather 2 分;backward dX归约 2 分;通信bytes/可组合性 2 分;bias边界 1 分。

追问分析与参考回答W_i:[h,4h/t]Y_i:[s,b,4h/t]dW_i=X^T dY_i本地,dX_i=dY_i W_i^T:[s,b,h]是各rank contribution,需SUM AllReduce得到完整dX。logical payload为s*b*h*dtype_bytes,ring实际链路量再乘collective因子。

追问得分点(5分):W/Y shape 2 分;dW本地 1 分;dX归约 1 分;bytes口径 1 分。

M026. RowParallelLinear 如何切分?

高分回答要点

  • 沿 W 输入行切成 W_i,输入 X 也按最后一维切;本地输出 contribution 都是完整 hidden shape。
  • forward 对本地 contribution 求和,通常 AllReduce;SP 下可改为 ReduceScatter 得到 sequence shard。
  • backward 对 dY 的处理取决于 layout,本地即可得到对应输入 shard gradient,dW_i 本地计算。

追问:为什么 row-parallel 的 forward 通信与 column-parallel 的 backward 通信位置互补?

前置知识与分析过程:沿输入维切W并同步切X,写本地乘积后判断如何恢复逻辑Y;再反推dX shard。与ColumnParallel并排画图最清楚。

主问题得分点(10分):W/X切分 3 分;forward contribution归约 2 分;backward layout 2 分;SP的RS变体 2 分;组合意义 1 分。

追问分析与参考回答:RowParallel每rank算Y_i=X_iW_i,完整Y是各rank contribution之和,所以forward归约;其dX_i=dY W_i^T天然就是对应输入shard。ColumnParallel forward天然产出输出shard,但所有输出shards都依赖同一X,backward dX要汇总。因此两者前后组合可让中间shard不gather。

追问得分点(5分):Row forward原因 2 分;Column backward原因 2 分;组合结论 1 分。

M027. 两层 MLP 为什么可以只在边界通信,而不是两个 GEMM 都 gather?

高分回答要点

  • 第一层 column parallel 产生本地 FFN shard,激活是逐元素操作,可直接本地执行。
  • 第二层 row parallel 消费同一 shard,只在输出 contribution 汇合时通信。
  • 这就是 Megatron TP 的核心:相邻 partition 选择让中间大 activation 不必 gather。

追问:若在两层中间插入需要跨 hidden 维全局信息的算子,会破坏该设计。

前置知识与分析过程:先判断中间算子是逐元素、只沿本地分片归约,还是需要全局FFN维。只有前两类可直接消费local shard。

主问题得分点(10分):两层partition配对 4 分;激活本地性 2 分;通信边界 2 分;反例与重排方法 2 分。

追问分析与参考回答:GELU/SwiGLU在每个元素或成对本地分片上计算,无需其他rank;若插入对完整FFN维做LayerNorm、top-k或全局softmax,就必须先AllGather或设计distributed reduction,增加通信和full activation峰值。应重新选择切分轴或融合成分布式算子。

追问得分点(5分):逐元素判断 1 分;给全局维反例 2 分;通信/峰值后果 1 分;替代设计 1 分。

M028. Self-attention 的 TP 数据流如何与 MLP 类比?

高分回答要点

  • QKV projection column-parallel,把 heads 分给 ranks;attention 对本地 heads 独立计算。
  • output projection row-parallel,汇总各 rank head contribution。
  • softmax 在 sequence/key 维而非 head 维归约,因此 head partition 下通常无需 TP 通信;CP 则改变这一点。

追问:标出 QKV projection backward 和 output projection forward 的 TP collective。

前置知识与分析过程:把attention拆为QKV ColumnParallel、本地heads attention、output RowParallel,再套M025/M026的autograd规则。

主问题得分点(10分):QKV/head分片 3 分;本地attention 2 分;output projection 2 分;F/B collective 2 分;CP例外 1 分。

追问分析与参考回答:QKV ColumnParallel forward无需gather,本地heads完成attention;其backward对输入hidden的dX contributions需TP SUM。output RowParallel forward对各head输出projection contributions做TP AllReduce,开SP时可RS;其backward产生对应输入/head shard。

追问得分点(5分):QKV backward 2 分;output forward 2 分;SP变体 1 分。

M029. 怎样估算一个 Transformer layer 的 TP 通信量?

高分回答要点

  • 从 activation 边界而非参数量出发:典型两次 TP 汇合,张量规模与 sequence x microbatch x hidden x dtype 相关。
  • forward/backward 的 AllReduce 或 RS/AG 算法通信量还乘 (t-1)/t 等 collective 因子。
  • 调用频率是每层、每 microbatch、forward/backward,位于关键路径;不能用每 step 一次 DP 模型估算。

追问:序列翻 8 倍时 TP activation bytes 近似翻 8 倍,但 attention compute 可能增长更快,通信占比未必增加。

前置知识与分析过程:从logical tensor元素数计算payload,再乘层数、microbatches和F/B调用次数;最后与GEMM/attention FLOPs增长比较,区分绝对通信和占比。

主问题得分点(10分):activation而非parameter口径 2 分;payload公式 2 分;collective算法因子 2 分;调用频率 2 分;compute/communication比 2 分。

追问分析与参考回答:TP边界payload约与s*b*h*bytes线性增长;但标准attention score/value FLOPs含s^2项,长序列时compute可能增长更快,所以通信毫秒增加而占step比例下降。本机SP吞吐代价随seq增长缩小符合此机制,但需trace验证,不能仅凭复杂度唯一归因。

追问得分点(5分):bytes线性 1 分;attention二次 1 分;占比结论 1 分;本机证据 1 分;需profile边界 1 分。

M030. copy/scatter/gather/reduce_from_tensor_model_parallel_region 等 mapping 的 backward 为什么不同?

高分回答要点

  • 这些 autograd Function 把 forward layout 变换与 backward 的逆/伴随 collective 成对定义。
  • forward identity/copy 可能在 backward AllReduce;forward scatter 对应 backward gather;forward reduce 对应 backward copy。
  • 专家应根据数学 Jacobian 推导,而不是只背函数名。

追问:让你为一个新 layout primitive 写 forward/backward correctness test,应做 adjoint/gradcheck 和多 rank reference。

前置知识与分析过程:把mapping视为线性算子A,backward应实现伴随A^T。先数学推导,再实现多rankshape/value和autograd验证。

主问题得分点(10分):mapping成对语义 3 分;至少三组F/B关系 3 分;Jacobian/伴随解释 2 分;测试方案 2 分。

追问分析与参考回答:随机小tensor运行distributed primitive,与单进程显式concat/split/sum reference比较forward;给随机上游grad验证<Ax,y>=<x,A^Ty>,再做double precision finite-difference/gradcheck可行部分。覆盖非整齐shape拒绝、不同rank和连续性。

追问得分点(5分):reference 1 分;内积伴随测试 2 分;gradcheck 1 分;边界case 1 分。

M031. 为什么 TP degree 受 hidden、heads、query groups、FFN hidden 和 vocab 约束?

高分回答要点

  • 分片轴通常要求可整除或明确 padding;不合法会造成 rank shape 不一致或负载不均。
  • attention head/query-group 分配、SwiGLU 两路、vocab shard 各有独立约束。
  • 即使数学可 padding,过小本地 GEMM/heads 也可能性能不可接受。

追问:配置校验通过不等于性能合理,必须列本地 GEMM M/N/K。

前置知识与分析过程:逐module列切分轴和整除约束,再把合法global shape除以TP得到local M/N/K、local heads和vocab shard,检查硬件tile。

主问题得分点(10分):五类整除约束 4 分;padding语义 2 分;local GEMM性能 2 分;config fail-fast 2 分。

追问分析与参考回答:例如Column FFN的N约为ffn_hidden/tp,Row FFN的K被除;即使都整除,N/K只剩很小tile会导致Tensor Core waves不足。还需列M=s*b,因为小microbatch同样让GEMM变瘦。以Nsight/TE kernel和achieved FLOPs验证。

追问得分点(5分):列M/N/K 2 分;说明两个被TP切的轴 1 分;tile/wave后果 1 分;profiler验证 1 分。

M032. 为什么 TP 经常要求放在节点内 NVLink/NVSwitch 域?

高分回答要点

  • TP 每层多次通信且同步紧,latency/带宽直接进入 layer critical path,难像 DP bucket 跨多层隐藏。
  • 跨节点 TP 还会放大 NIC latency、共享 rail contention 与故障耦合。
  • 本机将 TP pair 从 PIX 换到 SYS 后,同一 TP phase 慢 3.05x,是 topology placement 的直接证据。

追问:超大 layer 单节点仍放不下时可以跨节点 TP,但需量化它与提高 PP/CP 的替代方案。

前置知识与分析过程:先按每层TP collective频率判断网络敏感性,再按容量约束找“最低必要TP”。将剩余GPU优先交给PP/DP/CP候选并做成本比较。

主问题得分点(10分):TP关键路径 3 分;节点内映射 2 分;跨节点风险 2 分;替代方案与实验 3 分。

追问分析与参考回答:若单层权重/activation在节点内TP上仍放不下,跨节点TP是容量性约束;但应比较增PP能否切深度、CP能否切长序列、FSDP能否切状态。对每候选计算内存、每层/每stage通信、bubble和本地GEMM,而非默认跨节点TP。

追问得分点(5分):承认容量场景 1 分;列三种替代 2 分;成本维度 1 分;最小TP原则 1 分。

M033. TP 增大为什么会让 GEMM 效率下降?

高分回答要点

  • partition 后 GEMM 的 N/K 或 head 数变小,Tensor Core tile、wave 数和 kernel occupancy 可能下降。
  • collective launch、同步和框架固定开销不会随本地计算同比下降。
  • 所以总 FLOPs 分摊到更多 GPU 不等于 step time 按 TP 缩短。

追问:profile 时报告本地 GEMM shape、Tensor Core utilization、kernel duration、NCCL exposed time和每 GPU tokens/s。

前置知识与分析过程:把理想计算缩放、kernel效率损失和通信固定成本三项写成step模型。逐TP点检查哪项不按1/t缩放。

主问题得分点(10分):GEMM变小机制 3 分;固定开销 2 分;同步关键路径 2 分;完整指标与实验 3 分。

追问分析与参考回答:先从trace导出每个parallel linear的M/N/K和kernel时间,确认Tensor Core/occupancy;再对NCCL区间做union与compute overlap,算exposed;最后用global tok/s和per-GPU tok/s判断扩展与资源效率。只看nvidia-smi busy无法区分小kernel和有效计算。

追问得分点(5分):shape 1 分;Tensor Core指标 1 分;exposed算法 1 分;per-GPU效率 1 分;拒绝busy单指标 1 分。

M034. Sequence Parallel 到底分了什么?

高分回答要点

  • SP 将 TP 区域中原本复制的 sequence 维 activation 分片,使 LayerNorm、dropout 等逐 token 操作只处理本地 token shard。
  • TP 边界把部分 AllReduce 重写为 ReduceScatter/AllGather,通信总 bytes 量级接近,但中间 activation 不再全复制。
  • SP 不把 attention 的完整 context 依赖彻底切开,不能等同 CP。

追问:画出 row-parallel output 经 ReduceScatter 后的 [s/t,b,h],以及下个 column-parallel 前何时 AllGather。

前置知识与分析过程:先从无SP的复制[s,b,h]出发,把AllReduce分解成RS+AG并标sequence切分。再沿norm/dropout/residual到下个需要完整X的linear。

主问题得分点(10分):SP对象 3 分;RS/AG替代 3 分;非attention/CP边界 2 分;显存收益条件 2 分。

追问分析与参考回答:RowParallel本地contribution为[s,b,h],RS(SUM)同时归约并按sequence给每rank[s/t,b,h];本地norm/dropout/residual保持该layout。下一ColumnParallel若实现要求每rank完整输入,则AG回[s,b,h]后做GEMM;某些融合路径可重排,但数学布局等价。

追问得分点(5分):RS输入/输出shape 2 分;本地算子 1 分;AG位置 1 分;实现可优化边界 1 分。

M035. 为什么 SP 参数 gradient 可能需要额外 TP 归约?

高分回答要点

  • LayerNorm 等参数在 TP ranks 复制,但每 rank 只看不同 sequence shard,因此本地参数 gradient 只含局部 tokens。
  • backward 后必须在 TP group 汇总这些复制参数的 gradient,才能等价完整序列。
  • 本机教学脚本显式对带 sequence_parallel 标记的参数 AllReduce;生产 MCore 由对应 runtime 完成。

追问:漏掉这一步 loss 仍可能 finite,但 TP ranks 的复制参数会逐步漂移。

前置知识与分析过程:判断一个参数是sharded还是replicated,再判断每rank看到相同还是不同token。复制参数若看到不同数据,其grad必须归并。

主问题得分点(10分):SP参数复制语义 3 分;局部token gradient 2 分;TP归约 2 分;静默错误与测试 3 分。

追问分析与参考回答:LayerNorm gamma/beta在TP ranks各有副本,SP后每rank只累积本地sequence shard贡献。若不AllReduce,各副本更新方向不同;下一轮即使activation collective正确,模型已不再逻辑等价。测试应每step比较复制参数hash和gathered reference gradient。

追问得分点(5分):复制参数 1 分;不同token贡献 1 分;AllReduce 1 分;漂移后果 1 分;hash/reference 1 分。

M036. 为什么 TP+EP 的一些配置要求 SP?

高分回答要点

  • dense TP 区域若保持 token activation 复制,进入 expert routing 前会让 token 被多个 TP ranks 重复路由/通信。
  • SP 提供按 token 分片的输入 layout,使每个 token 在目标 routing 域具有清晰 ownership。
  • 具体限制随 MCore 版本和 expert-TP 设计变化,回答时应核对当前 config validation。

追问:不要只背“官方要求”,要画出没有 SP 时重复 token 如何进入 EP dispatcher。

前置知识与分析过程:画dense TP输出在各rank是复制token还是sequence shard,再定义router/dispatcher期望的token ownership。检查同一token是否被重复路由。

主问题得分点(10分):TP复制layout 2 分;EP token ownership 3 分;SP作用 2 分;版本约束和验证 3 分。

追问分析与参考回答:无SP的某些TP边界上,每个TP rank都持同一组tokens的hidden表示(hidden内部可能已汇合);若各rank都进入EP router/dispatcher,同一logical token会被发送多次。SP让token按sequence只属于一个TP rank,再路由一次;expert-TP内部另行处理hidden分片。

追问得分点(5分):画重复token 2 分;SP唯一owner 2 分;expert-TP区别 1 分。

M037. SP 的通信量为什么“近似不变”但性能仍会变?

高分回答要点

  • AllReduce 可分解为 ReduceScatter+AllGather,算法总 bytes 量级相近,但 collective 次数、位置和 tensor lifetime 改变。
  • RS/AG 的 kernel/protocol、stream 依赖、可 overlap 窗口和小消息 latency 不同。
  • SP 还改变 LayerNorm/dropout kernel shape和 allocator 峰值,端到端结果不能只从 bytes 推断。

追问:本机 TP2/SP 吞吐降 15.9%,说明 PCIe 上额外同步/布局成本超过少量显存收益。

前置知识与分析过程:先比较AllReduce与RS+AG算法bytes,再比较collective个数、时间位置、kernel shape和activation lifetime。最后回到端到端数据,而非从通信量直接判快慢。

主问题得分点(10分):bytes近似关系 2 分;时序/collective差异 3 分;kernel/allocator影响 2 分;实验解释 3 分。

追问分析与参考回答:本机seq512小模型中可被SP切的activation只占很小峰值,省约3%;RS/AG和layout转换在7.6GB/s PCIe上增加同步,局部norm等kernel也变小,最终tok/s降15.9%。这支持该shape不划算,不证明SP普遍无效。

追问得分点(5分):给3%与15.9% 1 分;链路机制 2 分;其他kernel因素 1 分;不外推 1 分。

M038. 为什么 seq=4096 时本项目 SP 相对显存收益反而缩小?

高分回答要点

  • SP 只切一部分逐 token activation;attention 相关张量、workspace、参数和 allocator 项不一定同比被切。
  • 随 sequence 增长,未被 SP 等比例切分的部分增长更快,导致可切部分占总峰值比例下降。
  • 实测 TP2 从 seq512 的 3.1% 降到 seq4096 的 1.3%,是否值得应看绝对 GiB 和吞吐代价。

追问:下一步应做 memory snapshot 按 allocation 分类,而不是继续假设“长序列必然利好 SP”。

前置知识与分析过程:把峰值拆成SP可切、不可切和固定项;观察这些项随sequence的增长阶。用绝对GiB和比例两个口径解释。

主问题得分点(10分):可切范围 2 分;未切项增长 3 分;本机数字 2 分;后续证伪实验 3 分。

追问分析与参考回答:在关键peak前后抓PyTorch memory snapshot并按stack/module分类:norm/dropout/residual、attention score/workspace、参数/optimizer和NCCL buffer。对seq512/2K/4K比较每类bytes及lifetime;若attention未切项增长主导,就能解释SP比例下降。再加入CP或高效attention作对照。

追问得分点(5分):snapshot 1 分;分类 2 分;跨sequence对照 1 分;CP/attention证伪 1 分。

M039. 如何公平 benchmark TP/SP?

高分回答要点

  • 固定模型、global batch、sequence、dtype、总 GPU;TP 改变 DP 时用 accumulation 保持 batch 语义。
  • 报 max-rank step、tokens/s、每 GPU efficiency、allocated/reserved peak、本地参数数和 loss correctness。
  • warmup/JIT、三次重复、拓扑 placement 与实际 group 必须保存;再用 trace 分解 GEMM 与 collective。

追问:本项目 TP1/DP8 到 TP8/DP1 是固定 GPU 预算下替换 DP,不是固定 DP 的 scaling test。

前置知识与分析过程:先定义研究问题:固定总GPU比较并行配置,还是固定DP增加TP做scale。随后锁定GBS/shape和测量窗口,明确吞吐聚合口径。

主问题得分点(10分):公平控制变量 3 分;GBS计算 2 分;指标/correctness 2 分;拓扑/重复/trace 3 分。

追问分析与参考回答:8卡始终全用,但TP升高会相应降低DP,所以aggregate tok/s同时反映层内TP成本和失去DP副本吞吐;它回答“固定预算如何选配置”。若要测TP scaling,应固定同一DP replica并从TP1的1卡增加到TP8的8卡,另报speedup/efficiency。

追问得分点(5分):固定预算含义 2 分;混合因素 1 分;正确TP scaling设计 2 分。

M040. 如何解释本机 TP8 显存降 83.4%,吞吐只剩 TP1 的 17.3%?

高分回答要点

  • 参数/GEMM 成功分片,所以容量收益真实;但 V100 PCIe 8 卡 bus BW 约 7.6 GB/s,层内 collective 昂贵。
  • tiny GPT 本就单卡可放,TP 后本地 GEMM 过小;同时 DP 从 8 降到 1,失去无层内通信的副本吞吐。
  • 正确结论是该 workload 上 TP 是容量工具,不是“Megatron TP 实现无效”;换大 hidden/NVSwitch 需重测。

追问:若面试官给 H100 NVSwitch 70B,哪些项会改变?链路、GEMM shape、模型可放性和 precision 都变,但分析框架不变。

前置知识与分析过程:把本机结果拆为硬件相关量、模型shape相关量和算法不变量。迁移时重新估算容量、local GEMM与通信,而不是缩放旧tok/s。

主问题得分点(10分):解释容量收益 2 分;三类性能损失 3 分;本机数字 2 分;正确外推边界 3 分。

追问分析与参考回答:H100 NVSwitch显著提高TP带宽/降低相对通信,70B的hidden与GEMM更大且模型可能迫使TP,BF16/FP8/TE kernel也改变compute;因此TP可能从纯容量工具变成有效加速。但每层同步、local shape和最小必要TP原则仍成立,需重新做TP degree sweep和MFU/peak/trace。

追问得分点(5分):列硬件链路 1 分;模型shape/容量 1 分;precision/kernel 1 分;稳定机制 1 分;重测方案 1 分。



上一篇:模型抽象与数据流 · 系列总索引 · 下一篇:PP 调度与负载均衡

This post is licensed under CC BY 4.0 by the author.

Megatron 面试题(一):模型抽象与训练数据流

Megatron 面试题(三):Pipeline Parallel 调度