# Harbor Qwen GRPO 项目工作周期 > 更新时间:2026-08-30。项目已完成统一64K P0并阶段性归档;腾讯云CVM、云硬盘和相关计费资源已释放。本文保留历史执行周期,不代表集群仍在线。 ## 1. 总体时间线 ```mermaid flowchart LR A["方案调研"] --> B["项目骨架"] B --> C["ACK/ACR/BuildKit"] C --> D["Harness与模型"] D --> E["数据/镜像/Oracle"] E --> F["冻结与Canary"] F --> G["腾讯CVM+k3s迁移"] G --> H["GRPO链路修复"] H --> I["4/4 rollout + backward"] I --> J["TCR迁移与500任务冻结"] J --> K["新Canary与单卡GRPO smoke通过"] K --> L["两卡通信与FSDP1链路通过"] L --> M["Verified 27题Canary"] M --> N["强模型验证数据扩充"] N --> O["统一57题模型选择"] O --> P["PPO critic与训练诊断"] P --> Q["统一64K P0:SFT与step20持平"] Q --> R["当前:停止追加训练并释放云资源"] ``` ### 最终阶段:统一64K P0与项目归档 - 固定`official-public-repro`、65536 context、temperature 1.0、retry 0和每题一次,比较原始SFT与parent step20。 - test38两者均为6/38;Verified27按全部attempt两者均为9/27。 - test38配对3胜32平3负,Verified27配对2胜23平2负;两个exact McNemar p均为1.0。 - parent消耗更多token、agent step和时间,但没有提升总体成功数;critic低VF loss与负explained variance也不能替代能力门禁。 - 决策为停止追加PPO训练。腾讯云CVM、CBS及相关计费资源随后释放,历史k3s运行面不再在线。 ## 2. 已完成阶段 ### 阶段1:方案调研和责任拆分 - 对比rLLM Harbor示例、Daytona、ACK、本地Docker、E2B、Firecracker和其他sandbox方案。 - 确定GPU训练与CPU沙箱分离:AutoDL负责模型和训练,Kubernetes负责任务环境。 - 建立Mac、AutoDL、CPU云、Registry四方边界。 ### 阶段2:项目骨架和可重放补丁 - 创建 `scripts/`、`src/`、`tests/`、`configs/`、`patches/` 和固定commit的 `upstream/`。 - Makefile收敛Mac准备、集群初始化、数据、Canary、训练和停止入口。 - 发布包排除 `.env`、凭证、state和运行输出。 ### 阶段3:早期ACK、ACR和BuildKit闭环 - 在阿里云建立ACK、ACR、VPC、RBAC和公网API。 - 部署rootful BuildKit、100Gi PVC和mTLS端口转发。 - 修复Registry域名、镜像重写、任务镜像构建、Pod命名和离线verifier。 - 该阶段完成了基础设施验证,但ACK因长期成本过高,后来被腾讯CVM+k3s替代。 ### 阶段4:从Qwen Code切换mini-swe-agent - Qwen Code Canary证明模型会输出工具调用文本而非所需结构化 `tool_calls`。 - 切换到mini-swe-agent 2.3.0和mini-coder-4b,以文本Bash动作执行任务。 - 统一动作提示、工作目录、步骤上限和verifier处理。 ### 阶段5:POC数据、基础镜像和Oracle - 从SWE-Smith Filtered下载320候选,静态接受287。 - 31个ACR基础镜像覆盖101个任务;67个超过1GiB的镜像被跳过。 - NOP baseline要求reward为0;Oracle要求reward为1。 - verifier统一480秒超时;异常最多额外重试2次;失败任务不阻断同批其余任务。 - 最终Oracle记录101条、接受100条。 ### 阶段6:冻结数据和Canary稳定性 - 按仓库隔离和难度平衡冻结59条:train 37、validation 15、test 7,覆盖27个仓库。 - 修复mini-swe-agent达到步数上限后非交互stdin EOF。 - 将上下文上限退出作为正常截断并继续verifier。 - 将单步最大输出改为2048,减少32K上下文溢出。 - 最近一次新validation Canary:10/10完成、Exceptions=0、平均reward 0.1,其中1条reward为1。 结论:环境、agent、trajectory和verifier链路稳定;reward为0反映当前4B策略解题能力,不是基础设施异常。 ### 阶段7:迁移到腾讯云按量CVM和单节点k3s - 选择北京六区按量CVM,8 vCPU/32GiB、Ubuntu 24.04、x86_64。 - 50GiB系统盘保留操作系统;200GiB数据盘格式化ext4并挂载到 `/var/lib/rancher`。 - 安装k3s v1.36.3,使用Rancher中国镜像和airgap镜像包绕过Docker Hub连接问题。 - k3s配置EIP TLS SAN、节点标签、禁用Traefik/ServiceLB、secrets encryption和local-path目录。 - PVC冒烟测试验证数据实际写入200GiB数据盘,删除PVC后目录能正常回收。 - 管理员KubeConfig保存在Mac;为AutoDL创建最小权限ServiceAccount KubeConfig。 - AutoDL能创建runtime Pod、exec和builder port-forward,但不能读取nodes、namespaces或 `kube-system`。 - BuildKit Deployment、Service和100Gi `local-path` PVC恢复,smoke build通过。 - Pod到AutoDL模型Gateway的网络smoke和完整preflight通过。 ### 阶段8:Canary和Gateway兼容修复 - 修复ContextWindowExceeded被误记为agent基础设施失败的问题。 - 规范 `RLLM_GATEWAY_PUBLIC_URL` 为公网origin,避免Gateway重复拼接 `/v1`。 - 训练时强制优先导入仓库内的 `rllm-model-gateway` 源码,解决site-packages旧版缺少 `set_weight_version`。 - Gateway将Harbor placeholder模型改写为真实 `actor_rollout_ref.model.path`。 - Harbor trial将agent异常且reward 0正确标为失败,不再误报env_done。 ### 阶段9:早期GRPO smoke进入真实backward - 停止独立Canary vLLM,释放6008端口后启动colocated训练。 - smoke固定1个训练任务、4条rollout、1个batch,关闭compact filtering并记录episode。 - 两个并行sandbox Pod能够立即调度并运行。 - 4/4 rollout约20分钟完成,Gateway健康检查和chat completion均返回200,session trace可以读取和删除。 - verl成功构造batch并进入Actor `loss.backward()`。 - backward发生CUDA OOM:A800总计约79.25GiB,actor约31.43GiB、vLLM约40.05GiB,剩余7.72GiB,而backward还需9.14GiB。 结论:该早期配置证明rollout → trace → reward/batch → loss → backward链路已经打通,但当时尚未完成optimizer step。 ### 阶段10:CVM/Linux基础镜像搬运入口 - 新增 `make dataset-images-mirror-linux`。 - 使用skopeo直接执行Registry到Registry复制,无需Docker daemon和完整镜像解压。 - 只选择linux/amd64;支持逗号分隔的Docker Hub代理,候选失败后回退源站。 - 保持pending/completed/skipped/rewrites队列格式兼容。 - 超限镜像进入skipped;源目标digest一致后才归档completed;全部失败继续保留pending。 - Python、Shell语法和14项相关单元测试通过。 状态:真实完成84个ACR基础镜像,3个超限跳过,missing=0、errors=0。 ### 阶段11:TCR个人版低成本任务镜像链路 - 保留ACR兼容路径,新增通用OCI Registry凭证变量。 - 任务镜像按环境名和基础镜像哈希写入80个 `task-NN` 仓库,以唯一tag替代“每任务一仓库”。 - `base-sharded-tags`布局使用每基础镜像5条lane;最大投影标签数93/100。 - `make tcr-prepare-personal` 使用腾讯云CLI幂等创建命名空间、基础仓库和任务分片仓库。 - `make registry-migrate-linux` 在CVM直接把ACR现有基础设施/基础镜像及队列状态复制到TCR,不经Mac下载镜像层。 - 北京CVM访问TCR个人版域名时以腾讯云内网链路为目标,避免CVM向跨云ACR推送产生EIP出流量费用。 状态:3个infra镜像、84个基础镜像、166个历史任务镜像和357个预热组合均已迁移并通过digest验收。 ### 阶段12:500任务Oracle、正式冻结与导出 - 3000候选全部下载,2614条静态通过。 - Oracle以batch40、concurrency10运行,累计记录1440条、接受981条。 - `freeze-check`选出train/validation/test为350/75/75,split仓库数55/11/11,总覆盖77个仓库,返回 `freeze_ready=true`。 - 自动bulk输出 `BULK_ORACLE_FREEZE_READY` 后正常停止。 - 旧217条短缺冻结集已移动到版本目录外的可恢复归档。 - 正式500条冻结集已生成;manifest内嵌语义摘要为 `8e29a24910b727e72b63fed539cb834fda47994b8d963c2e002ffa8deb23e654`,JSON文件SHA-256为 `0e23cbcf8c7a1d0eba498a867898514344f2a1e8826130cf0937691dc36077e5`。 - CVM导出包 `swesmith-20260808-v2-poc-curated.tar.gz` 为29377680字节,SHA-256为 `8ce630ad5850c1b0456802cb26230257bb7a0b4ca76be50b643534c3248ced05`;AutoDL导入校验一致。 - AutoDL已完成import/register/status:3000/2614、1440/981、350/75/75,共500条。 ### 阶段13:新Canary与单卡GRPO smoke验收 - 新validation Canary完成10/10 trial、Exceptions=0、平均reward=0.1,其中1条reward为1。 - 训练权重改为BF16直接加载,actor、optimizer与reference CPU offload默认关闭。 - 单卡首次完整smoke因rollout vLLM占约40.04GiB,在backward额外申请7.31GiB时OOM。 - 将 `TRAIN_GPU_MEMORY_UTILIZATION` 从0.5降至0.35后,4/4 rollout、episode logging、backward、optimizer step、权重同步和 `training/global_step=1` 全部完成。 - 训练侧峰值分配42.70GiB、预留43.76GiB;单步总耗时约1271秒。 - 该批4条rollout全部timeout且reward为0,因此advantage、loss和grad norm均为0;链路已通过,但本批没有有效参数变化。 - 原始双卡 `all_reduce` 同样死锁,确认根因是当前机器的NCCL Direct P2P/CUMEM路径,而不是FSDP本身。 - 设置 `NCCL_P2P_DISABLE=1` 后,两卡FSDP2隔离smoke通过;两卡传统FSDP1完整GRPO也完成4/4 rollout、backward、optimizer step、权重同步和global step 1,峰值分配/预留显存约38.29/39.91GiB。 - LoRA rank 0同条件smoke恢复合法Bash action并完成更新;rank 32两条rollout均生成2048-token乱码、相关性为负并超时,严格A/B已确认LoRA首次rollout加载路径异常。 当前决策:保留 `NCCL_P2P_DISABLE=1` 作为该机器专用规避项;LoRA rollout固定使用 `safetensors`。rank 32同条件复测已恢复合法动作,现扩大train任务内的group和step限制以获得非零奖励方差、advantage和grad norm。 ### 阶段14:SWE-bench Verified 27题Canary与离线verifier闭环 - 从固定30题分层/仓库限额清单中派生27个镜像可用任务,3个超限镜像保持skipped。 - 64K vLLM的8K、40K和64.5K探针均通过;Verified Canary启动前再以真实40K请求阻止实际32K服务进入评测。 - offline-v2完整作业请求27题,25题正常评分、2题verifier异常,获得10个reward 1和15个reward 0,Harbor报告Mean 0.370。 - `pallets__flask-5014` 和 `sphinx-doc__sphinx-8621` 在offline-v3分别复测为 `Exceptions=0, reward=0`,校正口径为10/27 = 37.04%。 - offline-v3不再在parser中调用会访问GitHub的 `make_test_spec`,并以60秒硬超时防止单题无限占用trial。 - 37.04%与论文SFT checkpoint的38.2%数值接近,但当前只能声称固定27题能力诊断数值一致,不能声称Verified 500完整复现。 ### 阶段15:SWE-Smith RL重叠集30题停止判断 - Klear公开66K数据是SFT消息轨迹集;固定revision共65,994行,只有`instance_id`和`messages`字段,未提供reward、resolved或verifier结果。 - 论文没有披露公开SWE轨迹的生成模型;单独提到的“强教师模型至少成功一次”属于RL任务筛选,不能反推66K SFT轨迹来源或逐轨迹成功性。 - 166题清单中的`klear_trajectory_count`是公开轨迹行数,不是成功轨迹数;提交标记、自测通过和shell return code均不能替代官方verifier。 - 从166题候选中固定筛选30个train任务;实际并发10偏离计划并发4。 - 27题正常评分,reward 1/0为2/25,scoreable-only `pass@1=2/27=7.41%`。 - 其余3题均为基础设施异常:2题agent容器OOMKilled(exit 137),1题自动label为66字节触发Kubernetes 422。 - 30/30后人工中断未正常结束的job收尾,job级`finished_at`为空;该批不能报告成无异常的`2/30`。 - 当前结果已足以作停止判断:不重跑Canary,不从这30题选择8题进入train smoke。 - ACK自动label已统一进行确定性63字符净化;普通Canary增加默认并发硬上限4,Verified专用目标显式允许10。该上限只防止意外放大节点负载;两个8GiB单Pod OOM未复测,停止本轮后不提高默认内存。 ### 阶段16:强模型验证数据扩充与统一模型选择 - 固定官方SWE-Smith 59,136题、完整`swe-smith-filtered` 3,748题、官方Claude/GPT成功轨迹和SWE-Master教师池成功统计的revision。 - 阶段A保留125题`freeze-pro`并增加225个已有completed基础镜像的`filter-pro`任务,共350题。 - 阶段B从官方SWE-Smith与完整filtered集合的差集中固定350题;这350题全部具有两个公开数据源的成功证据。 - 主名单合计700题并准备487题候补;新增任务尚未完成Oracle、任务环境镜像和数据注册。 - `Klear-AgentForge-8B-SFT`在统一32K固定任务上得到SWE-Smith 5/30、Verified 8/27、合计13/57,异常为0。 - 最终`Klear-AgentForge-8B`得到完全相同的5/30、8/27和13/57,异常为0。 - `mini-coder-4b`在同一口径下得到SWE-Smith 1/30、Verified 7/27、合计8/57,异常为0。 - `GLM-4_7-swesmith-SFT`已完成固定57题:SWE-Smith Pro为3/30、Verified offline-v3为6/27,合计9/57(15.79%);作业`2026-08-15__23-32-59`和`2026-08-16__00-29-43`分别耗时1h0m13s和48m38s,分别有7和8个`NonZeroAgentExitCodeError`。 - `a3-rl-swesmith`的Verified27作业`2026-08-16__01-21-05`为6/27,10个`NonZeroAgentExitCodeError`;SWE-Smith作业`2026-08-16__01-23-40`请求30题但只记录29个trial,reward 1为0,异常含13个`NonZeroAgentExitCodeError`和1个`PodReadyTimeoutError`。两作业并发8且几乎全程重叠,单ACK节点同期出现CPU/内存不足,因此当前只归档`6/27`和`0/29 recorded`,不进入无干扰57题正式排名。 当前判断:固定57题上未观察到Klear最终RL模型相对SFT模型的通过率增益;GLM的9/57略高于`mini-coder-4b`的8/57、低于两个Klear 8B模型的13/57,但GLM有15/57个agent非零退出,稳定性明显较差。`a3-rl-swesmith`没有显示出高于现有候选的证据,而且本次作业受资源竞争污染,不能用于精确能力排序。其他候选模型仍在评测,暂不选择GRPO基模。 ### 阶段17:freeze-700首批Oracle验收 - 首批固定batch `b1bdff89b852`共40题,Stage A/B为26/14,train/test/validation为34/4/2。 - ACK独占重试中NOP得到38题reward 0和2题`VerifierTimeoutError`;Oracle对38个NOP通过任务得到35题reward 1、1题reward 0和2题`VerifierTimeoutError`。 - 首批正式接受35/40,其中Stage A/B接受23/12;正式Oracle由280条增至320条,raw accepted为212条。 - 结合静态、alignment、镜像和指纹门禁后,有效可冻结185题:Stage A 173、Stage B 12,距350/350分别缺177和338,`final_ready=false`。 - `oracle/results.jsonl` SHA-256为`5530c01e04030193ef33a34ab7416387c32e0739c9e33f5326e850a3386b650e`;`reports/oracle-summary.json`为`81cc0c417a26ed8fee945935a691b85755ec40a7065f0c280b4051d5e1811fbb`。 - Oracle结束后本地进程、ACK Running和Pending Pod均为0。下一批生成前先审计Stage A有效pending和理论最大可达数量。 ## 3. 2026-08-17历史系统状态 | 领域 | 已完成 | 未完成/风险 | | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | | 基础设施 | k3s、RBAC、EIP、PVC、BuildKit、TCR、Gateway均通过smoke;两卡collective/FSDP2/FSDP1均在禁用故障P2P路径后通过 | 当前AutoDL机器必须禁用NCCL Direct P2P;正常机器不应盲目继承 | | 数据 | 现有500题已导入注册;下一版GRPO已固定350+350主名单和487题候补;freeze-700生成、指纹、Oracle对账、镜像门禁与注册验收代码已就绪 | 新增任务仍需在CVM实际执行Oracle和镜像验收,700题名单不能直接训练 | | Canary | Klear SFT与最终RL模型均为13/57;`GLM-4_7-swesmith-SFT`为9/57但有15个agent异常;`mini-coder-4b`为8/57;`a3-rl-swesmith`为Verified 6/27和SWE-Smith 0/29 recorded | `a3`两作业重叠造成ACK资源竞争,不能并入无干扰排名;其他候选仍在评测,当前不选基模 | | GRPO | 两卡FSDP1完成更新;rank 32 safetensors恢复合法动作、相关性0.999536 | 当前批次两条轨迹均reward 0;等待非零学习信号与更新后adapter同步验证 | | 镜像/Registry | TCR 80分片、84基础镜像、166历史任务镜像、357预热组合均完成 | 无当前缺口 | ## 4. 2026-08-17历史执行顺序 1. 按统一57题、32K、runtime v3口径完成其余候选模型评测,分别记录SWE-Smith30和Verified27;同一ACK节点一次只运行一项评测,且不得与Oracle重叠。 2. 全部候选完成前不选择GRPO基模;协议或基础设施异常不得计作模型失败。 3. 分阶段处理700题名单:先验收阶段A新增225题,再生成和验收阶段B任务;失败项按同阶段候补替换。 4. 数据正式冻结后,在候选train任务上验证同组rollout同时出现reward 0和1,再运行非零学习信号smoke。 5. 完整多卡GRPO产生至少一个非零advantage/grad norm batch后,才启动正式训练;训练完成后评估冻结test。 ## 5. 历史CVM按需开关机周期(当前不适用) 以下流程只适用于保留CVM和云硬盘的历史场景。当前CVM、CBS及相关资源已经释放,不能通过重新开机恢复。历史上关机前需停止训练/Oracle并清理残留sandbox Pod;保留BuildKit和PVC后重新开机流程为: ```text CVM:确认数据盘挂载 → k3s active → node Ready → BuildKit正常 → 重启本地tunnel → curation preflight AutoDL:按需开机 → 验证P2P规避项 → rank32 safetensors → 非零学习信号smoke ``` 过去仅在EIP、系统盘和数据盘保持不变时,才不需要重装k3s、重签TLS或重做KubeConfig。未来恢复属于全量重建,必须重新完成这些步骤。 ## 6. 2026-08-17历史门槛 - 数据门槛:已通过;AutoDL import/register/status与350/75/75数量一致。 - Verified能力门槛:固定27题恢复口径10/27 = 37.04%,两个原verifier异常已在offline-v3复测为无异常失败;如需单一归档证据仍需完整27题重跑。 - SWE-Smith RL重叠集门槛:未通过;正常评分27题中仅2题reward为1,scoreable-only `pass@1=7.41%`,停止本轮8题选择和train smoke。 - 模型选择门槛:Klear SFT与最终RL模型均为13/57,`GLM-4_7-swesmith-SFT`为9/57,`mini-coder-4b`为8/57;Klear与mini-coder三组作业均无异常,GLM有15/57个agent非零退出。`a3-rl-swesmith`记录为Verified 6/27和SWE-Smith 0/29 recorded,但因两作业重叠引发ACK资源竞争而不进入正式排名。其余候选尚未完成,因此未选择基模。 - 下一版数据门槛:700题候选名单已固定,但新增任务尚未完成Oracle、镜像和注册,未达到训练就绪状态。 - 训练链路门槛:单卡与两卡FSDP1均已完成optimizer step、权重同步和global step 1。 - 多卡门槛:已通过;两卡FSDP2最小smoke和两卡FSDP1完整更新均完成。 - 正式训练门槛:至少一个batch具有非零advantage/grad norm;新数据Canary、k3s并发和W&B记录均已具备。 ## 7. 2026-08-17历史周期 原700题扩充目标已按允许短缺规则收敛并冻结为`swesmith-curated-grpo-267-v1`:train/validation/test为187/42/38,覆盖89个仓库,267/267个任务镜像已验证。该结果取代第3、4、6节中“700题尚待作业”的当前状态,但保留那些段落作为历史执行记录。 新数据集上的64K Canary已完成:`Klear-AgentForge-8B-SFT`在validation确定性抽样30题中通过12题、失败18题、异常0。当前执行顺序调整为: 1. 保持GRPO入口和历史结果不变; 2. 完成PPO静态配置、critic/value兼容和GRPO回归测试; 3. 在4×80GB上先通过四卡collective/FSDP门禁,再执行关闭reference KL的PPO micro smoke; 4. 验证同一PPO入口的checkpoint恢复;有显存余量时再验证非零KL; 5. 根据4卡每rank峰值显存和吞吐选择正式PPO使用6卡或8卡。 PPO已完成从四卡colocated诊断到五卡分离拓扑验收:4×A800 80GB运行actor/critic FSDP,另1卡运行唯一TP=1 vLLM。Parent 20步及其后的40K、900秒、并发8 warm-start 20步均完成actor/critic更新、权重同步和紧凑checkpoint;effective step 40 checkpoint已生成。后续统一64K P0已经完成:SFT与parent step20在test38均为6/38,在Verified27均为9/27,配对检验无差异。最终决策为停止追加训练并释放腾讯云运行面,项目阶段性归档。