Repository navigation
Conversation
Independent Kimi XT Review — stack layer 2/6This PR carries the Real CLI model: Parent readback, separate from Kimi: the Python 3.10 compatibility observation is confirmed statically; the configured test environment uses 3.12. No long-run R3 leak was demonstrated, and shared ownership must be respected before adding explicit free. Missing-session-ID counting concerns mixed failed/successful groups. Developer guide · Retained public report copy
review_2257_2026-11-11_21-26审阅对象:#2257 本地拆分实际执行结果(base 仓库内不存在 summary机械拆分(独立复核,全部静态确认,无阻断项) 我在
六层 stack/合入组合理性:T1 三个小修复各自独立成层合理;T2-gate 依赖 T2-trace 的 主体实现(base→merged,~2600 行源码):这是原 #2257 的实现本体,拆分未增删实现。因此实现层面的缺陷绝大多数属于原 2257 已有设计,不是本轮回归;下文章节严格区分。未发现高严重度的新增实际风险。 高严重度实际风险:无(静态确认范围内)。 本轮拆分新增问题:仅 1 项低severity记录性事项(见其他 issues O1:运行级 ACCEPTANCE 内 已有设计建议(原 2257 带入,不阻塞本轮):见“其他 issues”O2–O8,包括 Python 版本声明与 GPU/validation 证据可支撑结论的边界:GPU 实测树是 split + 固定 #2292 的叠加组合( Main Flowchart before this PR改动前(base flowchart TD
subgraph ExternalClient["外部 Agent 客户端 (HTTP)"]
EC1["POST /v1/chat/completions (OpenAI/Anthropic, 可 stream)"]
end
subgraph SessionServer["xtuner.v1.rl.rollout.session_server.SessionServer"]
SS1["_handle_request(request)"]
SS2["_forward_request(request)"]
SS3["on_request / on_response hooks"]
SS4["trace_store insert (TokenizedSegment, Trie)"]
SS1 --> SS2 --> SS3 --> SS4
end
subgraph RolloutController["xtuner.v1.rl.rollout.controller.RolloutController"]
RC1["pause_generation() / continue_generation()"]
RC2["health_manager.pause/resume"]
RC1 --> RC2
end
subgraph Producer["xtuner.v1.rl.agent_loop_manager.producer.AsyncProduceStrategy"]
P1["_local_pending_tasks: set[asyncio.Task] (每次 produce_batch 重置)"]
P2["pause_pending_tasks() (取消并收尾 pending)"]
end
subgraph ManagerC["xtuner.v1.rl.agent_loop_manager.agent_loop_manager.AgentLoopManager (共卡)"]
MC1["produce_batch() -> continue_generation -> 生产 -> pause_generation -> pause_produce"]
end
subgraph ManagerD["xtuner.v1.rl.agent_loop_manager.disagg_agent_loop_manager.DisaggAgentLoopManager (异卡)"]
MD1["produce_loop() / pause_produce() / continue_produce()"]
MD2["DisaggAsyncProduceStrategy._pending_tasks"]
end
subgraph Trainer["xtuner.v1.train.rl_trainer.RLColocateTrainer / RLDisaggregatedTrainer"]
T1["fit() -> produce -> _train_one_batch -> fit同步"]
T2["sampler save/resume (epoch-local step 直接作 global 计数)"]
end
EC1 --> SS1
MC1 --> RC1
MD1 --> RC1
T1 --> MC1
T1 --> MD1
T1 --> P2
Main Flowchart after this PR改动后:新增 RequestGate 准入/结算屏障、affinity 路由、任务保活与 quiescent 保存恢复。突出显示为新增/修改节点(mermaid 8.8.0 flowchart TD
subgraph ExternalClient["外部 Agent 客户端 (HTTP)"]
EC1["POST /v1/chat/completions (非 stream, 带 session_id)"]
end
subgraph AffinityRouter["xtuner.v1.rl.rollout.affinity_router.SessionAffinityRouter / SessionAffinityService (新增)"]
AR1["acquire(sid)->具体 DP entrypoint; retire_sessions(); 410 tombstone"]
end
subgraph RequestGate["xtuner.v1.rl.rollout.request_gate.RequestGate / SettlementReceipt (新增)"]
RG1["request(session_id) 租约: seal -> drain -> install_version -> reopen"]
RG2["未结算/未知结局 => poison barrier, 阻止权重更新"]
end
subgraph SessionServer["xtuner.v1.rl.rollout.session_server.SessionServer (修改)"]
SS1["_handle_request -> 生成端点先进 RequestGate (修改)"]
SS2["_forward_request(request, lease) (修改: 注入 _xt_request_id/_xt_model_step)"]
SS3["结算: backend_ended+terminal_recorded => SettlementReceipt (修改)"]
SS4["TokenizedSegment.request_id/model_step (修改)"]
SS1 --> RG1
SS1 --> SS2 --> SS3 --> SS4
end
subgraph RolloutController["xtuner.v1.rl.rollout.controller.RolloutController (修改)"]
RC1["prepare_pause() freeze+seal+drain (新增)"]
RC2["resume_requests() install->continue_generation->reopen, 单 deadline (新增)"]
RC3["assert_request_gates_healthy() (新增)"]
RC4["retire_route_sessions() (新增)"]
end
subgraph PausePolicy["xtuner.v1.rl.agent_loop_manager.agent_turn_pause_policy.AgentTurnPausePolicy (新增)"]
PP1["pause/resume/check_requests/before_sync(quiesce)"]
end
subgraph Keepalive["xtuner.v1.rl.agent_loop_manager.colocate_keepalive.LoopThread / ColocateKeepaliveManager (新增)"]
K1["专用 event loop 跨同步训练窗口保活 Agent 任务"]
end
subgraph Producer["xtuner.v1.rl.agent_loop_manager.producer.AsyncProduceStrategy (修改)"]
P1["_PendingTasks 统一持有 pending; retain_live_tasks 跨窗口保留"]
end
subgraph ManagerD["DisaggAgentLoopManager (修改)"]
MD1["quiesce(timeout) 关门收单; prepare_sync(checkpoint_due)"]
MD2["scheduling_paused 停新组; close() 取消 pending"]
end
subgraph Trainer["RLColocateTrainer / RLDisaggregatedTrainer (修改)"]
T1["_validate_turn_keepalive/_validate_turn_resume 配置校验 (新增)"]
T2["_initialize_keepalive_rollout 冷启动/冷恢复发布 (新增)"]
T3["_checkpoint_due + produce_batch(quiesce=...) (修改)"]
T4["debug_rollout/debug_train 异卡阶段复用 (新增)"]
T5["sampler rollout_group_count/rollout_next_epoch (修改)"]
end
EC1 --> AR1 --> SS1
RG2 --> RC1
PP1 --> RC1
PP1 --> RC2
K1 --> PP1
MD1 --> PP1
T1 --> K1
T2 --> RG1
T3 --> MD1
classDef changed fill:#ffe08a,stroke:#b58900,stroke-width:2px;
class AR1,RG1,RG2,SS1,SS2,SS3,SS4,RC1,RC2,RC3,RC4,PP1,K1,P1,MD1,MD2,T1,T2,T3,T4,T5 changed;
文字对应说明(流程 → 修改代码):
核心原理
核心实现与对应的单测
静态确认:以上测试与实现逐一对得上,且 CPU 验收(130 项,host 环境)覆盖的是这些文件。 抽象与信息隐藏评估(按 module/interface/depth/seam 词汇)
新增功能守则对既有类的接触点核查(T2–T7 相对既有类):
公开接口的线性业务流程评估
单测建议现有测试已较完整(上表)。补充建议(均为静态推断,优先级低):
其他 issuesO1(低,静态确认,本轮拆分新增): O2(中,静态确认,原 2257 带入):Python 版本声明不匹配。 O3(低,静态确认,原 2257 带入):异卡 O4(低,静态确认,原 2257 带入):request-aware 的 O5(低,静态确认,原 2257 带入): O6(低,静态确认,原 2257 带入): O7(信息,静态确认): O8(信息,静态确认):T2-trace 与 #2252 的 Trie 遍历重叠按“标记重叠、不换实现”处理; O9(验证边界汇总,静态确认 + 推断):可支撑——机械相等(我独立复核)、叠加 #2292 组合上 2 次真实 optimizer 更新/冻结 MTP 全量哈希不变/IPC 同步/版本 0→1→2/affinity 绑定/受控任务跨更新续跑/完整 DCP 冷恢复后真实 HTTP;runner( 审阅执行说明:全程只读(git show/diff/cat-file、源码阅读、JSON 证据读取),唯一写入为本报告。未运行项目代码(依原文第 6 条),未改任何 git refs/index,未 push/评论/merge,未操作 RJob/SSH/权重。中间产物(prompt 快照、SCOPE、diff、日志、metadata)按要求全部保留,未做清理。 |
Agent RL stack — bottom to top
Review each PR against its configured base. The complete delivery is split from #2257, which remains unchanged as the pre-split reference.
xs1997zju/agent-rl-stack-20261111/01-admin-retry→mainxs1997zju/agent-rl-stack-20261111/02-sampler-resume→ #2294 ← you are herexs1997zju/agent-rl-stack-20261111/03-fit-cleanup→ #2295xs1997zju/agent-rl-stack-20261111/04-agent-core→ #2296xs1997zju/agent-rl-stack-20261111/05-disagg-debug→ #2297xs1997zju/agent-rl-stack-20261111/06-valid-attempts→ #2298The core layer (#2297) contains five separate topic commits that form one integration group. Shared tests/docs are carried in the final layer (#2299). Intermediate commits are review units, not independently validated feature versions.
Independent related PRs: #2252 (iterative trace traversal; overlaps with #2297 and needs reconciliation) and #2292 (native frozen MTP). They are not additional layers of this stack.
Developer guide, diagrams, scripts and validation scope.
Checkpoint resume must continue the global rollout-group identity and logical epoch. Persist those values while retaining compatibility with older sampler states.
Review scope and dependencies
Layer 2/6 of the mechanical split of #2257. Base:
xs1997zju/agent-rl-stack-20261111/01-admin-retry; reviewed head:0d468e63f59146f5eb9506db7c93f5eedc8c5043. Review this PR against its configured base; later layers depend on earlier layers. The original #2257 remains unchanged as the pre-split reference.Code entry:
xtuner/v1/rl/agent_loop_manager/sampler.py: Sampler save/resume.Validation
Reviewer guide and independent review
Developer guide, diagrams, scripts and experiment scope.
A real Kimi XT Review of the completed split and evidence is posted in this PR's comments. It found no mechanical-split blocker; original #2257 compatibility/design observations remain explicitly recorded. This Draft does not include fixes for those observations.
Related independent PRs: #2252 (iterative trace traversal; overlap must be reconciled before landing the core layer), #2292 (native frozen MTP). Lagent #385 targets v1.0.0; the CyberGym recipe is separate in CRG !78. The external MTP route #2289 is not part of this delivery. Keep Draft; no automatic merge.