执行摘要
修复位相同张量 rel_diff 为 NaN 问题
当两个张量位相同时,calc_rel_diff 计算 0/0 得到 NaN,而 NaN 与任何值的比较结果均为 False,导致确定性模式下的精确匹配检查(如 'rel <= 0')在完美匹配的张量上误报失败,包括合法的全零张量(如饥饿 MoE 专家的梯度)。
值得合并。这是一个明确的正确性修复,逻辑清晰且测试覆盖充分。
无 review 讨论。
当两个张量位相同时,calc_rel_diff 计算 0/0 得到 NaN,而 NaN 与任何值的比较结果均为 False,导致确定性模式下的精确匹配检查(如 'rel <= 0')在完美匹配的张量上误报失败,包括合法的全零张量(如饥饿 MoE 专家的梯度)。
值得合并。这是一个明确的正确性修复,逻辑清晰且测试覆盖充分。
无 review 讨论。
python/sglang/srt/debug_utils/comparator/tensor_comparator/comparator.py 中,将计算 rel_diff 的行从无条件调用 calc_rel_diff 改为先检查 max_abs_diff 是否为零,若为零则直接返回 0.0,否则调用原函数。test/registered/debug_utils/comparator/tensor_comparator/test_comparator.py 中新增 test_bitwise_predicate 方法,验证 'rel <= 0' 对克隆张量返回 passed=True,对符号翻转的近零对返回 passed=False。| 文件 | 模块 | 状态 | 重要度 |
|---|---|---|---|
python/sglang/srt/debug_utils/comparator/tensor_comparator/comparator.py |
比较器 | modified | 5.63 |
test/registered/debug_utils/comparator/tensor_comparator/test_comparator.py |
测试 | modified | 5.17 |
python/sglang/srt/debug_utils/comparator/tensor_comparator/comparator.py
core-logic
核心修复位置,修改了 compute_diff 函数中 rel_diff 的计算逻辑。
# compute_diff 函数中关键变更 (comparator.py)
raw_abs_diff = (x_target - x_baseline).abs()
max_diff_coord = argmax_coord(raw_abs_diff)
max_abs_diff = raw_abs_diff.max().item()
# 当 max_abs_diff == 0.0 时,两个张量位相同,rel_diff 应为 0.0
# 直接计算 calc_rel_diff 会得到 0/0 = NaN,导致谓词比较失败
rel_diff = (
0.0 if max_abs_diff == 0.0 else calc_rel_diff(x_target, x_baseline).item()
)
mean_abs_diff = raw_abs_diff.mean().item()
test/registered/debug_utils/comparator/tensor_comparator/test_comparator.py
test-coverage
新增回归测试,验证修复的正确性。
# test_bitwise_predicate 方法 (test_comparator.py)
def test_bitwise_predicate(self) -> None:
"""'rel <= 0' passes only for bitwise-identical tensors."""
ident = torch.randn(5, 5)
# 克隆张量位相同,应返回 passed=True
assert (
compute_diff(
x_baseline=ident, x_target=ident.clone(), predicate="rel <= 0"
).passed
is True
)
x, y = self._near_zero_pair()
# 符号翻转的近零对,位不同,应返回 passed=False
assert (
compute_diff(x_baseline=x, x_target=y, predicate="rel <= 0").passed is False
)
当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。
风险极低。变更仅影响 max_abs_diff == 0.0 的分支,该分支原本返回 NaN,现在返回 0.0,行为更符合预期。现有测试(如空张量短路)不受影响。
影响范围限于 comparator 工具的用户,特别是使用 'rel <= 0' 谓词进行精确匹配检查的场景。修复后,位相同张量(包括全零张量)将正确通过断言,避免误报。
当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。
参与讨论