执行摘要
- 一句话:增强 Grafter 日志:输出张量信息和差异对比
- 推荐动作:值得合入,为 Grafter 工具提供了关键的调试可见性。建议阅读
_compare_tensors_quick 和 _calc_rel_diff 的实现,理解其设计思路(内联避免依赖、fp32 统一 dtype)。
功能与动机
在分布式调试场景中,Grafter 允许用一个进程的张量替换另一个进程的张量。原有日志仅输出 tags 和 extras,无法直观了解被替换张量的属性及替换效果。增强后的日志可直接观察到替换前后的形状、数值偏差,从而快速定位 graft 配置或 transform 函数的问题。
实现拆解
- 发送方日志增强:在
maybe_intercept 的发送分支中,调用 get_tensor_info(value) 将张量元信息(形状、dtype、device、元素范围等)追加到 _log 输出中。
- 接收方日志增强:在接收分支中,先获取替换前的张量信息
info_before_overridden,然后调用 _compare_tensors_quick(value, value_to_override) 计算差异摘要,最后在日志中同时输出 before_overridden、to_override 和 diff_pre_vs_new。
- 新增辅助函数:在
dumper.py 末尾添加 _compare_tensors_quick(统一 dtype 为 fp32 后计算最大/平均绝对差和相对差异)和 _calc_rel_diff(基于 DeepGEMM 的余弦相似度变体),两者均内联实现以避免跨文件依赖。
- 配套测试:在
test_dumper.py 中新增 TestCompareTensorsQuick 类,覆盖 identical、diverged、shape_mismatch、dtype_unified、empty 五种场景。
关键文件:
python/sglang/srt/debug_utils/dumper.py(模块 调试工具;类别 source;类型 core-logic;符号 _compare_tensors_quick, _calc_rel_diff): 核心变更文件:在 Grafter 的发送/接收日志中增加张量信息与差异对比,并新增 _compare_tensors_quick 和 _calc_rel_diff 辅助函数。
test/registered/debug_utils/test_dumper.py(模块 调试工具;类别 test;类型 test-coverage;符号 TestCompareTensorsQuick, test_identical, test_diverged, test_shape_mismatch): 为 _compare_tensors_quick 添加了完整的单元测试,覆盖各种边界情况。
关键符号:_compare_tensors_quick, _calc_rel_diff
评论区精华
无实质性讨论。仅有一个自动化 bot 的评论,表示没有具体反馈。
风险与影响
- 风险:风险极低。变更仅影响日志输出,不改变张量替换流程。新增的
_calc_rel_diff 函数在计算时将张量转为 float64,在大规模张量时可能消耗额外内存和计算,但由于仅在日志路径调用且 _compare_tensors_quick 在 try 块内,异常不会影响主线逻辑。
- 影响:影响范围限于 Grafter 功能的日志输出,对系统核心性能、功能无影响。开发者可通过更丰富的日志更高效地调试分布式张量替换问题。测试覆盖保证了辅助函数的正确性。
- 风险标记:低风险
关联脉络
- PR #24513 Add e2e test with log snapshot in dumper grafter: 同一作者 fzyzcjy 对同一 dumper grafter 功能线的后续增强,该 PR 增加了端到端测试和日志快照,与本 PR 的日志增强形成互补。
参与讨论