Prhub

#1862 chore: include length context in slice_log_prob_with_cp assert

原始 PR 作者 leofan-lab 合并时间 2026-04-28 10:53 文件变更 1 提交数 1 评论 0 代码增减 +4 / -1

执行摘要

增强断言信息以提升调试体验

PR body 明确指出:当 len(log_prob) != response_length 时,裸 assert 仅抛出 AssertionError,无法区分是 rollout_log_probs 被截断、response_length 过时还是 prompt_length 计算错误,开发者必须添加打印并重跑才能定位。加入三个数值后,根因可从栈追踪中直接推断。

值得合并的小优化,无需额外 review。

讨论亮点

无 review 评论或讨论。

实现拆解

  1. slime/backends/megatron_utils/cp_utils.py 文件的 slice_log_prob_with_cp 函数中,将第 226 行的裸 assert len(log_prob) == response_length 替换为带格式化消息的 assert,消息包含 len(log_prob)response_lengthtotal_length 三个变量的值。
  2. 改动仅 4 行新增、1 行删除,不涉及其他文件或测试。
文件 模块 状态 重要度
slime/backends/megatron_utils/cp_utils.py 后端工具 modified 4.12

关键符号

slice_log_prob_with_cp

关键源码片段

slime/backends/megatron_utils/cp_utils.py core-logic

核心变更文件,修改了 `slice_log_prob_with_cp` 函数中的断言消息。

# slime/backends/megatron_utils/cp_utils.pydef slice_log_prob_with_cp(
    log_prob: list[float] | torch.Tensor,
    total_length: int,
    response_length: int,
    qkv_format: str = "thd",
    max_token_len: int | None = None,
) -> list[float] | torch.Tensor:
    # 带上下文信息的断言,方便从栈追踪直接定位问题
    assert len(log_prob) == response_length, (
        f"log_prob length mismatch: len(log_prob)={len(log_prob)}, "
        f"response_length={response_length}, total_length={total_length}"
    )
​
    cp_size = mpu.get_context_parallel_world_size()
​
    if cp_size == 1:
        return log_prob
​
    prompt_length = total_length - response_length
    _, _, logits_offset, _ = get_logits_and_tokens_offset_with_cp(
        total_length, response_length, qkv_format, max_token_len
    )
​
    chunk_1 = log_prob[logits_offset[0][0] - (prompt_length - 1) : logits_offset[0][1] - (prompt_length - 1)]
    chunk_2 = log_prob[logits_offset[1][0] - (prompt_length - 1) : logits_offset[1][1] - (prompt_length - 1)]
​
    if isinstance(log_prob, list):
        return chunk_1 + chunk_2
    else:
        return torch.cat([chunk_1, chunk_2], dim=0)

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低。仅修改了 assert 消息格式,不改变任何控制流、数据或返回值。断言条件本身未变更,因此不会引入回归。无性能影响。

影响范围极小,仅对 Context Parallel 训练中触发该断言失败的场景有正向调试体验提升。不影响正常路径。

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论