You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
flowchart TB
subgraph capture["各训练 rank · 采样与读回"]
direction LR
T["Megatron timer<br/>host 计时 / CUDA event"] --> Q["有界队列<br/>区间结束时绑定上下文"]
Q --> R["后台读回<br/>事件就绪后读取耗时"]
end
subgraph aggregate["global rank 0 · 进程内汇总"]
direction LR
C["Collector<br/>去重 / 迟到 / 丢弃计数"] --> D["Detector<br/>可比集合 / 连续窗口"]
D --> J["JSONL<br/>计时事实与判定"]
end
R -->|"本 rank 直送;其他 rank 经后台 TCP"| C
D --> S["rollout 节奏读取摘要"]
S --> L["既有日志 / TensorBoard<br/>确认告警归属仍需修复"]
classDef blue fill:#eaf2ff,stroke:#4778b8,color:#142d4e
classDef green fill:#eaf6ee,stroke:#488766,color:#173c29
classDef amber fill:#fff4dd,stroke:#bc8734,color:#51360b
style capture fill:#f3f6fa,stroke:#9eacc1,color:#203651
style aggregate fill:#f3f6fa,stroke:#9eacc1,color:#203651
class T,Q,R blue
class C,D,J green
class S,L amber
Loading
图示为启用 CUDA 计时、配置共享 collector 地址的路径。Collector 位于 global rank 0 的训练进程内,不是独立服务;未配置共享地址时,各 rank 仅本地汇总,不能获得完整跨 rank 诊断。
flowchart LR
N["未告警"] -->|"慢窗口满足门槛"| C["候选<br/>累计连续窗口"]
C -->|"默认连续 3 窗"| A["已告警<br/>straggler"]
C -->|"不确定或窗口间隙<br/>中断连续性"| N
A -->|"证据不足<br/>保留告警"| A
A -->|"有效证据回到阈值内<br/>recovered"| N
classDef neutral fill:#eaf2ff,stroke:#4778b8,color:#142d4e
classDef candidate fill:#fff4dd,stroke:#bc8734,color:#51360b
classDef alert fill:#fcebed,stroke:#b85e6a,color:#59232c
class N neutral
class C candidate
class A alert
提案人:@shanyulu · 导师:@Lemon-412 · 实现:Draft PR #378
1. 目标与边界
训练变慢时,首先要回答:哪个 rank、哪个阶段出现持续偏差,比较对象是否可比,证据能支持到哪一步。 本提案复用 Megatron timer,记录 host 与 CUDA stream 区间,在后台汇总窗口,并接入 Relax 现有日志和 TensorBoard。
功能默认关闭。公开产品版本为 a48a23b,当前头 CI 8/8 通过;性能与诊断验收仍未完成,PR 保持 Draft。CI 证明回归检查通过,不替代下文的 C1/C2/C3 实验。
官方 Task 11要求:整体性能开销小于 0.5%;真实 E2E 不影响训练精度、loss 和既有通算重叠收益;通过现有平台实时、清晰地定位慢卡。下文的置信区间、配对实验和参数比较是本提案采用的验证方法,不是额外声称的官方条款。
2. 接入架构
flowchart TB subgraph capture["各训练 rank · 采样与读回"] direction LR T["Megatron timer<br/>host 计时 / CUDA event"] --> Q["有界队列<br/>区间结束时绑定上下文"] Q --> R["后台读回<br/>事件就绪后读取耗时"] end subgraph aggregate["global rank 0 · 进程内汇总"] direction LR C["Collector<br/>去重 / 迟到 / 丢弃计数"] --> D["Detector<br/>可比集合 / 连续窗口"] D --> J["JSONL<br/>计时事实与判定"] end R -->|"本 rank 直送;其他 rank 经后台 TCP"| C D --> S["rollout 节奏读取摘要"] S --> L["既有日志 / TensorBoard<br/>确认告警归属仍需修复"] classDef blue fill:#eaf2ff,stroke:#4778b8,color:#142d4e classDef green fill:#eaf6ee,stroke:#488766,color:#173c29 classDef amber fill:#fff4dd,stroke:#bc8734,color:#51360b style capture fill:#f3f6fa,stroke:#9eacc1,color:#203651 style aggregate fill:#f3f6fa,stroke:#9eacc1,color:#203651 class T,Q,R blue class C,D,J green class S,L amber图示为启用 CUDA 计时、配置共享 collector 地址的路径。Collector 位于 global rank 0 的训练进程内,不是独立服务;未配置共享地址时,各 rank 仅本地汇总,不能获得完整跨 rank 诊断。
源码入口:timer shim、observer、runtime。
为什么选择这条路径
沿用 timer 可以覆盖训练阶段而不要求持续开启 Kineto;将 CUDA event 读回移到后台,避免为观测显式等待设备。但采样、排队、序列化和汇总仍有成本,必须实测。Kineto 仅用于独立检查 overlap,不能用其 trace 反证本功能的常驻开销已低于 0.5%。
CUDA event 给出的是流上可观察区间,可能包含等待,不等于纯 kernel 时间或纯 NCCL 通信时间。嵌套或重叠阶段也不能直接相加为整步耗时。
3. 记录顺序与失败行为
区间结束时绑定 workload 和 step 上下文,再进入读回队列;不能在读回时取“当前 step”,否则会把第 N 步计时与第 N+1 步工作量拼接。序号按区间完成顺序分配,不按开始顺序分配。
默认窗口为 5 秒,但这不是“5 秒内平台可见”的 SLA:窗口推进、连续判定、导出节奏和平台接收是不同环节,必须分别测量。
4. 如何判断慢 rank
先按拓扑与阶段建立 cohort,再为每个 rank 选择工作量可比的参照成员。比较值为该 rank 的窗口 host 耗时中位数,相对其可比集合中最快成员的偏差;不是相对全体 rank 最快值,也不是相对 cohort 平均值。
工作量使用单样本 token 数的窗口中位数,避免“慢 rank 在窗口内完成更少样本”被误当成工作量不同。判定实现保留参照成员、有效覆盖和工作量证据。
图示为有足够参照成员、未触发有界状态淘汰时的告警生命周期。默认相对阈值为 5%,并有绝对耗时门槛;低于门槛的相对偏差不能单独触发告警。候选连续计数与已生效告警分开维护:不确定窗口会打断新告警的连续性,但不能作为恢复证据。
工作量缺失与不可比必须区分:
workload_evidence_degraded=true;仍可能产生判定。它不是“已证明等工作量”,也不是一律输出 uncertain。host_only_stall、gpu_stream_stall是诊断提示;根因仍需结合训练、通信或设备证据确认。5. 当前验收与实验结果
所有数据固定在证据分支(tip
b9c01f2,含复核更正记录、严格验收门禁工具、测量臂原始日志与 16 件原始 trace 归档)。实验结论只适用于对应 manifest 的产品版本;旧版本 pilot 不迁移为当前头性能验收。C1:点估计不是通过结论
%%{init: {"themeVariables": {"xyChart": {"plotColorPalette": "#2969a6,#bd6530"}}}}%% xychart-beta title "C1 pilot:配对开销与验收阈值" x-axis ["S1 AB", "S2 BA", "S3 AB", "S4 BA", "S5 AB", "S6 BA"] y-axis "相对 OFF(%)" -3.5 --> 3 line [2.177, 1.779, -2.308, 2.433, 1.393, -2.970] line [0.5, 0.5, 0.5, 0.5, 0.5, 0.5]A 为 OFF,B 为 ON;每臂 48 步。折线各点为每对整段
perf/train_time均值的相对差,横线为 0.5% 参考线;连线仅便于辨认配对,不作趋势拟合。最终判定使用配对差的均值及其区间上界,不是数有几个配对低于横线。Δᵢ = 100 × (mean(ONᵢ) / mean(OFFᵢ) − 1);6 个 Δᵢ 的均值为 +0.4174268%。按 pair 重采样的 bootstrap 95% CI 上界为 +2.0227648%,因此不能证明开销小于 0.5%。原始判定与配对值。C2:分清指标一致、参数等价和 overlap
两对训练指标对照中,loss 最大绝对差分别为 0.10148、0.03789,均在预先固定的 0.13927 包络内;学习率序列一致,token 差为 0。但旧分析器在 checkpoint 不同的非确定分支未实际比较张量,顶层 PASS 不能解释为参数等价通过;复核后的正式判定为 C2_COMPARE_REVIEWED.json:INCOMPLETE——0 项指标违规、2 项参数证据缺失,干净克隆复算命令按预期退出码 1。
DP4 overlap 结果中,OFF 为 0.428402,ON 为 0.428249;下降约 1.5291e-4,大于冻结允许下降 9.0912e-5。原 NOT PASS 保留。跨会话波动是待检验解释,不能在看过 ON 后放宽旧容差。
四臂
cudaDeviceSynchronize计数均为 68,只支持该 API 计数一致,不能写成“排除了所有新增全局同步”。测量臂原始job.log已入库存档(原始件 + RFC1918 脱敏公开件 + 双哈希台账 + 扫描报告,f69343f8);16 件原始 chrome trace 亦已入库存档(b9c01f2,gitleaks 全量扫描 16/16 PASS、零发现、无需脱敏,附双哈希台账),干净克隆可复算 overlap 判定(已验证 exit 1、NOT_PASS、13/13 字段一致)。C3:已检出异常,不等于平台验收完成
减速臂原始判定显示注入目标 rank 3 有五条告警,非注入 rank 2 有一条;该条是误报还是次生影响,尚不能定性。健康对照本轮没有 straggler,不能推广为总体误报率为零。
平台摘要的
worst_rank目前从各类判定中选最大偏差,uncertain 可能遮蔽确认告警。旧“p50 0.60 s / p95 1.20 s”来自日志与文件增长间隔,已撤回,不是事件端到端延迟(复核记录 c3_summary_slow_reviewed.json:延迟字段记 UNMEASURED,旧时间差保留供审计)。后续需用同一事件身份关联区间结束、判定、落盘和平台接收,保留原始时延,并覆盖最后一个窗口及停止产生日志的场景。6. 支持范围与待决定事项
以下三项待导师确认,决策与后续结果统一维护在本节:
perf/train_time还是 whole-job wall-clock 判定整体开销;另一项保留为辅助指标。下一阶段先补公开产品中的确认告警导出与摘要读取问题,再补参数比较、独立 overlap 验证、C3 事件链与可下载输入。C1 在主指标、产品版本、样本量、分析器和停止规则冻结后运行,不增加试次直到通过。未通过项只有完成验证或取得维护者明确认可的替代验收,才能作为转正式审查的依据。
早期设计与机制实验(不计入当前产品验收)