AI Infra 综合面经题库 (3)


Q: 给定训练所需的Tokens,怎么估计模型训练所需的完整时间?

估算公式:训练时间 = 6 * N * D / (GPU数 * 单卡FLOPS * MFU)

其中N=模型参数量,D=训练token数,6是前向+反向的系数(前向2N FLOPS/token,反向4N FLOPS/token),MFU是模型算力利用率(Model FLOPs Utilization,通常30-50%)。还需考虑通信开销、故障恢复时间等。


Q: Prefill和Decode阶段各有什么优化技术?

Prefill优化(计算密集型):

  • Flash Attention减少显存和IO。
  • Tensor Parallelism提高并行度。
  • 长序列分块处理(chunked prefill)。
  • Prefix caching复用重复前缀的KV Cache。

Decode优化(访存密集型):

  • KV Cache量化减少访存量。
  • Speculative Decoding(投机解码)减少解码步数。
  • Continuous Batching提高GPU利用率。
  • PagedAttention减少内存碎片。
  • Multi-Query/Grouped-Query Attention减少KV Cache大小。

Q: 什么是Two-batch overlap?什么场景下是负优化?

Two-batch overlap是将一个batch的计算和另一个batch的通信(如AllReduce)同时进行,利用计算和通信的硬件独立性实现重叠。

负优化场景

  • 单个batch已经能充分占满GPU计算资源,overlap不会带来额外收益反而增加调度开销。
  • 通信量很小,通信本身不是瓶颈。
  • 显存紧张时,两个batch同时在GPU上增加显存压力。
  • 通信和计算共享带宽资源时(如PCIe),overlap导致相互争抢反而都变慢。

Q: Megatron-LM中通信优化怎么做?

  • TP通信与计算重叠:将AllReduce分解为Reduce-Scatter + All-Gather,与计算流水线化。
  • Sequence Parallelism:减少激活显存,将非TP部分沿序列切分。
  • PP通信优化:1F1B调度减少bubble、interleaved schedule。
  • 异步通信:使用独立的通信stream与计算overlap。
  • 分层通信:机内NVLink做TP,机间IB做DP/PP。
  • 梯度累积:减少通信频率。

Q: 多机PD分离有KV Cache transfer开销,为什么还要做PD分离?

  • 资源异构适配:Prefill是计算密集型(用高算力卡),Decode是访存密集型(用大带宽/大显存卡),分离后各自用最适合的硬件。
  • 调度灵活性:Prefill和Decode负载波动独立,分离后可独立扩缩容。
  • 消除干扰:混合部署时Prefill的长计算会阻塞Decode的低延迟要求。
  • 总体效率:虽有传输开销,但资源利用率和吞吐量的提升远超传输成本(NVLink/RDMA可达100+GB/s)。

Q: Muon和AdamW的pretrain和posttrain为什么不能混用?

Muon(Momentum Orthogonalization)优化器通过正交化动量更新来优化模型,其更新方向和大小与AdamW有根本性差异。混用导致问题:

  • 两种优化器对参数空间的”最优区域”假设不同,pretrain用一种到达的参数状态可能不适合另一种继续优化。
  • Muon维护的动量状态与AdamW的一阶/二阶矩估计不兼容,切换时优化器状态无法继承。
  • 梯度统计分布在切换点突变,可能导致训练不稳定。

Q: 如何看待跨SM的PD分离和AF(Attention-FFN)分离?

跨SM分离将SM划分为不同功能组:如部分SM做Attention(访存密集),部分做FFN(计算密集),类似warp specialization的思想扩展到SM级别。

优势:不同workload对硬件资源需求不同,分离后可以为各部分配置最优的资源(如共享内存分配、occupancy设置)。劣势:增加SM间通信开销、负载均衡困难、实现复杂度高。目前更多是学术探索,实际中Flash Attention + 大batch的pipeline重叠更实用。


Q: CUDA的global memory和shared memory访存分别需要注意什么?

Global Memory

  • 合并访存(coalesced access):同一Warp内线程访问连续地址,一次事务完成。
  • 对齐访问:起始地址对齐到128字节。
  • 避免partition camping(早期架构)。

Shared Memory

  • 避免Bank Conflict:32个bank,4字节为一个bank宽度。
  • 适当padding消除conflict。
  • 注意shared memory容量限制对occupancy的影响。

Q: DeepSeek-V3有哪些优化点?

  • MLA(Multi-head Latent Attention):将KV Cache压缩为低维latent表示,大幅减少推理时KV Cache大小。
  • DeepSeekMoE:细粒度专家 + 共享专家设计,提高专家利用率。
  • FP8训练:混合精度训练进一步降低显存和加速计算。
  • Multi-Token Prediction(MTP):训练辅助目标,提升模型质量,推理时可用于speculative decoding。
  • DualPipe:优化的流水线并行策略,减少bubble。
  • 无辅助损失的负载均衡:通过bias调节替代auxiliary loss。

Q: DeepSeek-DSA、NSA和MoBA的区别?

  • DSA(DeepSeek Sparse Attention):训练时使用的稀疏注意力,基于预设的稀疏模式减少计算量。
  • NSA(Native Sparse Attention):硬件原生支持的稀疏注意力实现,利用block-sparse等模式在Tensor Core上高效执行。
  • MoBA(Mixture of Block Attention):将注意力计算分为多个block,通过路由机制选择每个query关注哪些key block,类似MoE思想应用于注意力。

核心区别在于稀疏模式的确定方式:DSA是预定义模式,NSA是硬件适配模式,MoBA是动态学习的路由模式。


Q: NCCL中的通信原语有哪些?AllReduce参数更新一次需要几次通信?

通信原语:AllReduce、AllGather、ReduceScatter、Broadcast、Reduce、AllToAll、Send/Recv。

AllReduce通信次数:Ring AllReduce分为两个阶段:Reduce-Scatter(N-1步)+ All-Gather(N-1步),总通信量为2*(N-1)/N倍数据量(N为GPU数)。对于一次参数更新,只需要一次AllReduce操作(内含多步通信),总通信数据量约2倍模型大小。


Q: 小数据量场景用NVSHMEM直接读取其他GPU数据做本地reduce,相比Ring AllReduce有什么好处?

  • 延迟更低:NVSHMEM是one-sided通信,kernel内线程直接发起远端读取,无需集合通信的同步协调开销。
  • 适合小数据:Ring AllReduce的启动开销(launch latency)对小数据占比大,NVSHMEM细粒度通信更高效。
  • 编程灵活:可以在kernel内部按需通信,不需要退出kernel调用NCCL API。
  • 减少同步点:不需要等待所有GPU都就绪才开始通信。

对大数据量,Ring AllReduce的带宽利用更优(接近理论带宽峰值)。


Q: 训练时如何设计超长序列下的并行?

  • Sequence Parallelism(SP):将序列切分到不同GPU,非TP层各GPU处理局部序列。
  • Ring Attention / Context Parallelism:将KV序列分到不同GPU,Q序列块循环访问所有KV块。
  • Ulysses:对attention的head维度做AllToAll,将序列并行转为head并行。
  • 结合使用:TP + SP + Context Parallelism多维并行。
  • 梯度Checkpointing:减少激活显存。
  • Flash Attention:减少单步的显存占用。

Q: 将Ampere架构的算子适配到Hopper架构,会对哪些地方进行升级改造?

  • TMA(Tensor Memory Accelerator):用TMA替代手写的全局内存加载逻辑,异步预取到共享内存。
  • Warp Specialization:将生产者(数据加载)和消费者(计算)分配到不同warp group,流水线化。
  • Cluster:利用Thread Block Cluster实现跨block的共享内存访问(Distributed Shared Memory)。
  • FP8 Tensor Core:将FP16计算升级为FP8利用更高的Tensor Core吞吐。
  • 异步屏障:用cp.async.bulkmbarrier替代传统同步方式。