Appearance
训练框架
分布式训练与通信
- 数据并行、张量并行、流水线并行、序列并行和专家并行分别解决什么问题?
- DDP 的梯度同步和 bucket 机制如何工作?
- FSDP 与 DeepSpeed ZeRO-1/2/3 的分片对象和通信流程有什么区别?
- AllReduce、AllGather、ReduceScatter、Broadcast、AllToAll 的语义是什么?
- Ring 和 Tree AllReduce 如何选择?通信量和延迟如何比较?
- NCCL 如何利用 NVLink、PCIe、InfiniBand 或 RoCE?
- 如何实现通信与计算 overlap?为什么可能出现 NCCL Timeout?
- 训练过程中参数、梯度、优化器状态和激活分别占多少显存?
- 梯度累积、混合精度、Loss Scaling 和 Activation Checkpointing 如何配合?
- Pipeline Parallel 的 bubble 如何估算和降低?
- 多机多卡训练如何处理故障、重试、checkpoint 和一致性?
PyTorch、C++ 与运行时
- PyTorch Autograd 计算图和反向模式自动微分如何工作?
torch.compile、AOTAutograd、Inductor 和 Triton 的关系是什么?- PyTorch 如何通过 dispatch、operator schema 和 backend 接入自研硬件?
- 动态图为什么常转静态图?图优化和 Kernel 优化如何分工?
- C++ 虚函数表、对象布局和多态调用是怎样的?
- C++ 内存对齐、RAII、移动语义和智能指针在框架中有什么作用?
- 静态库与动态库如何选择?符号解析和 ABI 要注意什么?
- Python GIL 对 CPU 密集和 I/O 密集任务有什么影响?
- 线程、进程、协程如何选择?线程池参数如何设置?
- 如何设计 GPU 内存池、workspace、显存碎片和异步回收?