SuperAPI AI 工具集

mcore-determinism-debug

智能体与模型

查看项目

更新于 11-03 00:54

技能介绍

用途:定位两次 Megatron 运行结果不一致的真正起点。核心观点是:loss 曲线出现分歧的迭代号并不代表差异起点,逐位差异通常早于可见差异;因此不应从 loss 分歧的那一步开始排查,而应从头运行两次(相同的种子、数据、配置),每个 rank 各写一份 trace,为每个算子记录指纹,再离线按身份逐条对齐比较,第一个不匹配处即为问题源头。

主要能力:对每条记录做判定:输入哈希相同而输出哈希不同,说明该算子由正确输入产生了错误输出,是候选源头;若输入也不同,说明它只是接收了别处传来的错误值,属于下游后果。方法强调“第一个”只在一个 rank 内严格成立;跨 rank 没有全局时钟,因此不能比较序号,只能按输入测试做因果排序。捕获分两层:语义层钩住通信集合、重计算、优化器、P2P 等已知边界;算子层通过 TorchDispatchMode 为每个 ATen 算子输出打指纹,可覆盖绕过 PyTorch 的 TE/Triton 内核(在其输出被首个算子读取时暴露)。trace 为 rank 本地 JSONL,不加集合通信、不扰动被观测步骤;摘要用 torch.hash_tensor 在 GPU 上做与顺序无关的归约,只回传标量,按字节处理因而与 dtype 无关,覆盖 MXFP8/NVFP4 及其 scale 缓冲。捕获可按步数(起止、每 N 步)和 rank 列表(如 0,3,8-15)限定并设置预算上限,默认关闭、零开销。

使用方式:建议先在最小规模复现——模块级可用 tests/unit_tests/determinism/ 在恢复 RNG 状态下跑两遍并断言输出与梯度逐位一致,参数化覆盖模型×并行×FP8/FP4 配方;作业级可用单节点 N 个任务并行运行独立副本。随后按阶梯逐级升级捕获:0 级全精度指标定位首个分歧迭代;1 级语义层(集合通信、重计算、优化器、P2P、梯度分片);2 级算子层;3 级针对扩展调用的定点探针;4 级到调度器之下(CUBLASLT_LOG_LEVEL、nsys、ncu)命名内核。前三级写入同一有序流,便于一起比较。实践中需限定迭代窗口(如 1-2),流写到共享文件系统,调高分布式超时以免 NCCL watchdog 误触发,算子层需关闭 CUDA graph。还需注意三类误判:绕过调度器的内核表现为“晚一跳”在下游确定性算子上出现分歧;未初始化内存、异步通信缓冲、DMA 中的张量属于探针伪影;顺序无关摘要只是强筛子而非防碰撞键,需同时比较 shape/dtype/numel,且不跨 schema 版本比较。

适用场景与限制:适用于 Megatron-LM 训练中的数值不确定性排查、低精度及 MoE/路由等路径的逐位一致性问题定位、修复验证(成对运行:两臂带修复、两臂不带,未修复对必须分歧、修复对必须逐位一致,并说明是同一分配内还是跨分配、代价是否可测、修复是原则性的还是偶然规避)。限制:本技能只记录方法而非现成功能,需要自行提供 tracer,搭建细节见 references/tracing-setup.md;按 rank 子集追踪时“未发现分歧”不能说明未追踪的 rank 没有问题;遇到文档中已列的不支持算子应视为已知缺口而非待查 bug。