tp submit → console 装配和调度 → 容器里真的训练 → 指标/日志/产物 ingest → SUCCEEDED → 断言。Node 闭环使用真实 CPU 资源授权和两个分别注册的 Node daemon;Kubernetes 闭环模拟 GPU 挂载。两者都不证明真实 GPU 执行已通过。上线前、升级后、改执行器后跑一遍。
本地跑(macOS/OrbStack 或任何 Docker 机器)
docs/ops/e2e-closed-loop.md 构建 Node 测试镜像并配置 PostgreSQL。Node 闭环保留日志并清理容器;Kubernetes 闭环可用 --keep 保留资源。两者都使用仓库中的 SDK CLI,先通过 tp init 创建独立临时项目再提交。
GPU 仿真开关
调度、配额、容量、台账全部按真实语义执行。生产保持默认(直通)。
断言覆盖
- 状态机走到 SUCCEEDED(经历 PENDING / RUNNING);
- 指标闭环:
train/loss可从 API 读回; - 日志闭环:训练日志行入库可查询;
- 产物闭环:checkpoint 登记可见。
CI
.github/workflows/e2e.yml:单测 → Node 闭环(sim + 真实 SFT 矩阵)和 Kubernetes 闭环(kind + operator);不再依赖跨仓 token。
覆盖边界
slurm 后端暂不在闭环内(需容器化 slurmrestd + Apptainer):批脚本渲染、REST 客户端、hetjob、状态映射由单测覆盖。详情与路线见仓库docs/ops/e2e-closed-loop.md。