| 名称 | nemo-rl-auto-research |
| 开源协议 | Apache-2.0 |
| 描述 | “用于定向假设测试和开放式发现的自主NeMo-RL研究代理工作流。指导代理完成完整的实验生命周期:理解配方和环境、连接RL或NeMo-gym运行、启动可复现的基线和迭代、分析结果、保留人工监督,并使用git和TSV日志作为研究账本。请勿用于:错误修复、代码审查、文档编写、重构、依赖更新或单文件更改。” when_to_use: 自动研究;运行实验;验证这些假设;寻找更好的配方;提高准确性;长期NeMo-RL或NeMo-gym研究活动;自主发现;定向执行。 |
自动研究
针对用户明确的目标(如准确性、奖励、吞吐量、延迟、稳定性或其他特定于配方的指标),在此仓库中运行迭代式NeMo-RL实验,以git作为研究账本。
将依赖视为就绪,但谨慎选择运行时。使用配方的权威指标作为真相来源。保持更改小、可复现且简单。保护无关的用户工作。
安全: 本技能会创建git分支、向磁盘写入文件,并执行shell命令,包括可能消耗GPU资源的训练任务。在创建分支或启动任务前,始终与用户确认活动计划。未经用户明确批准,不要执行破坏性git操作(如reset、force-push)或启动计算密集型任务。
为每个自动研究活动使用nemo-rl-session-memory技能。在分支前开始或恢复会话记录,然后形成计划后、有意义的编辑或长时间运行的启动前后、用户改变方向时以及交接或最终总结前进行检查点记录。
在上下文压缩、交接、断开连接或长时间间隔后,重新加载此技能及已使用的任何伴随技能,读取最新的nemo-rl-session-memory交接记录,并在继续前重述总体目标、停止规则、当前分支和最新结果。除非用户明确更改主要目标,否则将后续引导视为附加内容。
工作流程
- 在分支前检查当前git状态并识别无关的用户更改。
- 使用共享分支前缀。优先使用用户提供的前缀;否则创建一个建议性的默认值,例如
autoresearch/2026-03-24-dapo-qwen2p5。 - 阅读目标配方、其父配方以及
examples/run_grpo.py、nemo_rl/models/、nemo_rl/algorithms/、nemo_rl/environments/和docs/中的相关代码路径。对于NeMo-gym配方,还要检查examples/nemo_gym/中的入口点、配置和启动脚本。 - 将任何用户停止规则转换为可监控的明确值,例如将请求的实验数量作为
target_experiment_count,以及campaign_deadline、per_experiment_timeout或target_metric。 - 验证所需数据、检查点、运行时输入和启动器。
- 创建未跟踪的TSV日志和每个实验的日志目录。
- 如果不存在基线,先在
<prefix>/baseline上运行基线。
对于GPU、CPU密集型、分布式或长时间运行的工作,要慎重选择执行环境。当当前机器具有合适的GPU和容量时本地运行;否则遵循用户请求的环境,对nrl-k8s/Kubernetes使用 launch-nemo-rl,对Slurm使用环境原生的启动器,或在启动前与用户澄清。CPU-only本地运行仅用于轻量检查、试运行和短时的非GPU检查。
如果用户提到Brev,或 /home/ubuntu/RL 存在且 /ephemeral 可作为卷使用,则将机器视为Brev实例,并在创建实验目录、缓存、日志、检查点或经过身份验证的运行时状态之前使用 nemo-rl-brev-etiquette。
分支
- 将每个实验放在共享前缀下的独立分支上。
- 保留每个分支,即使想法失败或较弱。
- 在每个分支上至少提交一次假设。
- 当重新运行合理时,在同一分支上添加后续修复提交。
- 绝不静默地stash、reset或覆盖无关的用户更改。如果脏文件与实验重叠,请使用单独的工作树或先询问。
具体模式参见 references/git-workflow.md。
循环
- 选择一个具体的假设。
- 创建一个类似
autoresearch/2026-03-24-dapo-qwen2p5/prompt-compact-schema的分支。 - 编辑所需的最小文件集。
- 提交假设。
- 在启动运行前,检查监控的停止条件。除非其中一个已明确满足,否则不要提前停止。
- 从配方或日志代码中识别权威指标来源,然后使用唯一的日志路径运行:
LOG_DIR=reports/auto_research/<campaign>/<experiment>
mkdir -p "$LOG_DIR"
uv run <entrypoint> > "$LOG_DIR/run.log" 2>&1
- 如果用户给出了每次实验的墙钟时间限制,请明确执行。如果已有配方级超时,优先使用配方级超时;否则用外部timeout包装命令。如果两者都存在,请遵守更严格的限制。
- 使用适合实际日志格式的命令提取主要指标。如果提取为空,则先检查最后几行日志和配方的日志路径,再标记run。
- 在TSV中记录索引、分支、父提交、提交、配方、指标名称、指标值、内存(GB)、已用时间(分钟)、启动器、作业ID、命令、日志路径、状态和描述,并附带足够的计时或计数信息以评估停止规则。
- 在活动期间定期打印面向用户的进度更新。包括当前分支、最新已知结果、已尝试的实验数量、适用的剩余实验数量、适用的剩余活动时间,以及是否已满足任何停止条件。
- 在实验完成后重新检查监控的停止条件,并显式陈述结果,例如
stop condition not yet met: 17/24 attempted, 6h12m remaining或stop condition met: 24/24 attempted。 - 将结果标记为
keep、discard或crash,然后移至下一个分支,除非用户指定的停止条件已明确满足。
对于基于计数的停止规则,计算已尝试的想法,而不仅仅是成功或完整运行的实验。
对于活动时间预算,请在活动开始时将用户限制转换为绝对截止时间,并持续检查剩余时间。
对于每次实验的预算,请对每次运行强制执行超时,并将超时视为失败。
示例:
做50次实验:仅在TSV中存在50行已尝试的实验后停止总共10小时,每次1小时:每次运行强制1小时限制,并在达到10小时活动预算或剩余预算不足以开始另一个1小时运行时停止50次实验或总共10小时,每次1小时:监控所有三个值,永远不要超过每次运行的上限,并且仅在明确达到某个活动级停止触发时停止
优先级
优先考虑预期目标收益高且复杂度成本低的想法:
- 正确性和后端兼容性
- 提示和rollout格式化
- 批处理、序列和精度布局
- 优化器和调度器调优
- 奖励塑形、裁剪或缩放
- 数据集混合或验证更改
- 基于硬件的同步与异步执行
在其他条件相同的情况下,优先选择更简单的胜利,避免脆弱的硬件特定hack。
避免
- 不要因为一次低功率的冒烟运行就断定训练想法失败。如果运行使用极小的批大小、很少的优化器步骤或非代表性设置,请仅将其视为管道验证;在标记为
discard之前,先扩展到有意义的批大小并训练足够长的时间来检验假设。 - 不要在紧张的编辑-运行-调试循环中反复支付批处理调度器的设置成本。如果Slurm批处理作业有较大的启动开销且失败需要快速迭代,请使用文档记录的交互式Slurm模式,或在重新提交更多批处理作业前询问用户。
- 不要让上下文压缩或后续引导问题抹去原始的活动目标。刷新
nemo-rl-session-memory、重新加载活动技能并保留主要目标,除非用户明确更改它。
停止
如果用户给出明确的停止条件,则这些条件优先于通用规则。不要因为搜索感觉足够就停止;只有在请求的数量、截止时间、预算或目标条件已明确满足时才停止。
在活动期间,明确告知用户停止条件是否已满足。如果未满足,请以具体数值报告剩余数量、剩余时间或其他剩余阈值。
如果用户没有给出明确的停止条件,运行基线并加上最多三个低风险实验,然后总结最佳结果并询问是否继续。
参考
references/git-workflow.md用于分支、脏工作树、父提交和基线规则。references/exploration-ideas.md用于将症状转化为具体假设。references/experiment-log-template.md用于TSV模式和可复现性字段。