TUNEPLANE_JOB_ENDPOINT / TUNEPLANE_JOB_RUN_ID / TUNEPLANE_JOB_TOKEN。官方方法由 runner 自动埋点;自定义训练用 tuneplane.report 把曲线打进来。stdout/stderr 也是 runner 转发的,脚本里不用自己报日志。
端点一览
这些是 runner / SDK 用的,一般不用手搓 HTTP。
Ingest token 按 run 签发,限定 scope 和有效期(
TUNEPLANE_INGEST_TOKEN_DAYS,要盖得住最长那次训练)。Web 守卫会拒绝拿 ingest token 去调普通 API。
运维要点
TUNEPLANE_INGEST_URL 必须是训练节点能访问的地址
TUNEPLANE_INGEST_URL 必须是训练节点能访问的地址
图表没数据,最常见是填了
127.0.0.1 或集群外的地址。容器 / Pod / 计算节点要能直连这个 URL。SSE 与反代
SSE 与反代
实时日志是 SSE:nginx 对
/api 关掉 proxy_buffering,读超时放宽。断线的客户端会按游标续传,不丢行。指标失败不会打断训练
指标失败不会打断训练
SDK 上报是旁路,挂了只打日志,不抛异常。lifecycle 是硬语义,失败会重试。
AI 诊断
AI 诊断
作业失败会自动跑诊断(可配 LLM),输入是日志尾部、指标趋势、验证样本和配置快照。诊断失败不影响作业状态。
自定义训练怎么上报
不要手写 urllib,也不要拷 tutorial 里已经删掉的common/telemetry.py。
tuneplane,import 名 tuneplane。镜像、train.sh、图表是空的怎么查,见自定义训练。
确认成功
提交一个短作业并看它的作业页。日志出现表示日志写入通了;Charts 标签页上出现第一个点表示指标写入 通了。那是两条不同的路,可以各自单独坏掉。训练方法覆盖与 Agent 观测
图表页区分观测覆盖与训练健康。收到候选指标并不能证明指标正确。运行会保存方法观测要求和已启用能力的快照;未知指标按普通数值显示,不判定升降好坏。分来源验证指标保留数据集、core/aux 分组和采样次数,历史上已经合并丢失的数据无法恢复。 按实验实际使用的能力启用观测配置。这不会替你在训练框架中开启异步训练、工具或沙箱执行。percent 表示已经处于 0–100 范围的百分数,ratio 表示 0–1 的比例。
事件与分布
这些测量由环境或训练框架负责。在其支持的回调中、完成计算后调用以下函数;SDK 不执行 rollout、评分或分布式归约。每个汇总指标应指定一个上报进程。(-inf,0]、(0,1]、(1,2]、(2,4]、(4,8]、(8,+inf)。不要根据均值推测分布。复用事件 ID 表示重试同一条不可变事件;同一 learner step 的不同事件会独立保留,不同执行尝试也会区分。面板显示最近 100 条事件,单独绘制直方图桶。提示词和轨迹正文应进入受治理的样本或产物存储,不应放进指标名或事件字段。
交付与容量限制
指标和事件使用有界后台队列。标量默认每批最多 2,048 个点,队列最多保存 100,000 个标量点和 128 条事件。每条事件不超过 16 KiB、最多 32 个受限长度的标量或字符串字段;直方图最多 64 个有限边界。每个运行最多接收 4,096 条标量序列。来源和桶维度需要保持有界,不要把轨迹 ID 放进标量键名。超限批次会被明确拒绝。 这是尽力交付,不是持久化本地日志。网络故障和进程退出可能导致待发数据丢失。传输健康信息会上报丢失、失败计数和队列占用;心跳缺失或过期表示健康情况未知,不能证明训练已停止。无效数值单独记录,不用零替代。即使后续事件将健康记录挤出最近事件窗口,健康快照仍可查询。 摘要在写入时增量维护,修正旧 step 时同步修正极值。曲线查询先在 PostgreSQL 中缩减数据,再分配 Python 对象;CSV 导出流式读取原始标量。大规模部署仍需按真实上报频率、并发运行数、数据库资源和 GPU 工作负载进行容量测试。数据库迁移会回填摘要并添加索引,请根据历史遥测数据量安排升级,不应默认可以零停机完成。评估结果覆盖情况
登录后在任务的 验证 页,可分别查看模型成功、模型失败、执行故障、已完成但未评分,以及尚未上报的数量。统计来自本次执行的全部明确分类事件,不取决于展示的抽样数量或最近 100 条事件。没有这些事件的旧任务显示未知状态。 成功的含义由实验定义。不要把任意奖励为零的样本当成执行故障。同一题的多次采样应使用不同的trial_id;真正重试同一次采样时递增 trial_attempt,统计采用已上报的最高重试次数。传输重试复用原标识。任务重新执行时,服务端按令牌中的执行次数隔离统计。
status 可选 success、failure、infra_error、unscored。执行故障与未评分结果不能标记为可训练;保留评估集即使答对,也应保持不可训练。此标记只是记录实验的决定,不会自动创建数据集或控制训练器过滤样本。
成功率为 success / (success + failure),评分覆盖率为 (success + failure) / expected。总数未知、分母为空或独立任务数超过声明总数时,不会编造百分比。总数声明与每个终态尝试不可修改,以首次收到的事件为准;评估范围改变时使用新的轮次标识。结果可以早于总数声明到达。
这些便捷函数使用有容量上限的后台队列,返回 True 只表示进入队列,不保证送达。需要可靠重放时,应保留原始结果。批量评估可以使用 Reporter.observations,每批最多 32 个经过校验的事件;同步接口会重试传输故障,最终失败会抛出异常。示例仓库的 common/eval/math_eval.py 已接入该方式,沿用原有的二值数学判分器,将保留评估样本标为不可训练,并区分生成/判分器异常与模型答错。真实 GPU 执行仍依赖该示例的运行环境。
派生任务提交前检查
在 重新运行 或诊断生成的待提交计划中点击 检查就绪情况。预检查涵盖配方兼容性、参数、源码可用性、平台支持的生效配置规则、集群硬件匹配及运行时引用解析。检查使用临时副本并自动清理,不提交任务、不占用 GPU。修改参数会清除旧报告;请求失败不会显示检查通过。 准入策略仍在实际提交时检查。工作节点内的模型下载、挂载、环境连通性,以及真实生成/评分/训练冒烟运行,明确显示为 未检查。源码可用不等于备用仓库与原始归档完全一致;没有对应静态规则的框架也保留为未检查。 新的训练提交会在 配置 页保留提交当时的检查记录、时间及输入指纹。这是当时的准入证据,不是持续有效的运行许可或工作节点健康证明。输入指纹覆盖任务规格与配置,不是整个源码包的校验和。无论是否有预检查报告,实际提交都会重新执行准入检查。检查完整的结果记录
在任务的验证标签页选择评估轮次,点击查看逐条结果,可筛选模型成功、模型失败、执行错误和未判分试次。点击试次 ID 可查看最多 100 次重试历史。计数和列表包含全部已上报结果,不代表保存了全部样本文本;重试结束后,实时结果可能移入其他筛选分类。 登录后的 Review 页面增加了同协议评估证据。为每个运行明确选择评估轮次后,只有数据集、试次集合、判分器和配置指纹一致,且全部试次均已判分,才显示相对基线的成功率差值。这个差值不代表统计显著性,已有的配方或指标对比也不能证明评估协议一致。 实验可在上报结果之前声明协议证据:report.validation_protocol 上报 dataset_digest、cohort_digest、verifier_digest、settings_digest、split 和精确的 checkpoint 引用。四个指纹均为小写 SHA-256,配置指纹应包含生成、上下文、重复次数、运行时和工具/网络策略。这些信息由实验声明,不代表平台认证。协议变化须使用新的轮次 ID;缺少协议证据的历史评估仍可查看,但不能进行同协议对比。
查看轨迹与比较试次结果
作业的 验证 页将全量结果记录与保留的正文分开。点击试次的“查看轨迹”, 即可分页阅读消息、查看工具调用和耗时,或复制对应执行的固定链接。 正文缺失不代表试次失败;抽样和截断会分别标明。训练 rollout 使用独立的范围, 也可上报采集和消费时使用的策略版本。 轨迹正文需要配置对象存储,保留七天,到期后由定时任务清理。 也可提前删除正文,结果计数仍保留。除作业访问权限外,读取受管材料相关正文 还需相应的材料权限。公开分享链接不提供这些正文。 自定义实验可在平台上报启用时调用Reporter.from_env().trajectory(...)。
必填字段包括 scope、round_id、trial_id、trial_attempt、messages、
total_messages、complete 和 capture_policy(all 或 sampled)。
每条消息包含 role 和 content,可补充工具名、调用 ID、token 数及毫秒耗时。
上报前应移除敏感内容。单条轨迹最多 1 MiB、1,024 条消息,截断时必须明确声明。
同一身份的正文不可覆盖;新的执行应使用新的试次重试编号。
在 Review 中选择协议一致的评估轮次,可查看失败转成功、成功转失败及缺失结果。
这些是观察到的试次变化,不是模型进步的统计证明。比较总体成功率还需要完整判分覆盖率,
以及一致的协议声明。
选中两个运行后,可通过“发起同配置基准评估”选择各自登记的 HF 导出产物、一个基准,
以及可选的样本上限。先预览配置,再分别启动两边。两个作业均经过正常准入和调度;
启动一边不会自动启动另一边。完成后打开新评估作业,再比较它们上报的评估轮次。
lm-eval 集成会上报全部原生结果记录。不超过 128 个试次的评估默认保留全部可用正文,
更大的评估默认保留 32 条。TUNEPLANE_JOB_VAL_UPLOAD_SAMPLES 可覆盖此上限,设为 0 可关闭正文上传。有效总体反映实际评估上限,不会把冒烟抽样称为完整数据集。
协议证据依赖原生任务版本和内容哈希,缺失时会明确显示。
其他评估器仍可上报汇总分数,并分别接入结果记录与轨迹协议。
训练 rollout 排查
在轨迹浏览器选择“训练 rollout”、排查分类及可选的训练步数。 筛选先在服务端完整索引中执行,再分页返回,不会只筛选当前页。 低奖励、奖励缺失或异常、普通样本分别显示。低奖励不自动等于答案失败, 这些有偏抽样也不能用来计算整体训练成功率。 NeMo-RL 0.7 的对话类配方启用已验证的 TunePlane logger 后,会读取已完成的训练 JSONL 日志。 每步最多保留 32 条分层样本;TUNEPLANE_JOB_ROLLOUT_UPLOAD_SAMPLES 可降低上限,设为 0 可关闭。
网络上传在后台执行,队列压力导致正文丢弃时会打印日志。消息长度和条数有上限,截断会明确标记。
其他框架可通过 Reporter.trajectory 上报 scope="training"。
可选字段包括 diagnostic(failure、anomaly、low_reward、representative)、
有限数值 reward、step、collection_policy 和 consumption_policy。
只有实验明确判定失败时才上报 failure。缺失的策略版本保持未知;
训练日志步数不能证明异步 rollout 由哪个策略生成。
导入原生评估产物
示例项目的common/eval/native_import.py 可以导入已有 Lego-RL/Harbor 的
result.json,并按需导入 ATIF 格式的 agent/trajectory.json。在安装了当前
tuneplane SDK 的 tuneplane-examples 项目根目录运行。它不会启动 agent、沙箱或训练。
当前适配的源代码格式版本为 ea644fecbc24abf404483d804df4e28caeb44d33;其他版本需要重新验证适配器。
这个格式版本标记不代表 GPU 运行栈已通过认证。
根据计划执行的完整评估集合创建 import-plan.json,未生成目录的试验也必须列出。
把以下四个 REPLACE_... 占位符替换为真实的小写 SHA-256 摘要,分别对应不可变的数据集清单、
验证器代码与配置、运行环境锁文件或镜像清单、harness 代码与配置。
比较双方必须采用相同的指纹计算规则;导入器无法为这些声明提供真实性证明。
retry 区分该试验的多次执行,编号最大的重试决定当前结果。目录必须是 --root 下显式指定的相对路径,
不会从目录名猜测任务身份;路径穿越、符号链接和重复目录会被拒绝。
空的 attempts 保持为缺失覆盖;已声明执行但缺少结果文件则记为未评分。
只有数值型二元 reward 才映射为成功或失败,缺失或非二元 reward 保持未评分。
验证器超时归为基础设施错误;agent 超时仍保留有效的二元判分。
未知异常即使带有 reward,也保持未评分。
先生成并检查本地快照:
native: 开头的轮次 ID 含有内容哈希:
在同一平台作业内重复上传相同快照不会增加试验数,输入变化会生成新轮次。
协议指纹涵盖运行环境、harness 和评估设置,checkpoint 身份单独记录,便于跨模型比较。
正文默认关闭。实现项目自己的脱敏函数后,可以加上
--trace-limit 32 --redactor common.redact:clean。函数必须接收并返回字符串,清除消息、
工具参数、观察结果、工具名称和调用 ID 中的敏感内容;脱敏在截断之前执行。
上传前检查生成的本地快照。最多保留 128 条轨迹,按任务、重复试验、重试的固定顺序选取,
每条上限为 1 MiB、1,024 条消息。导出的正文始终标记为抽样且不完整,
不能据此证明原始完整上下文、token 数或训练消费情况。不支持旧的 litellm-trajectory.jsonl。
需要上传时,在平台作业内使用正常下发的 ingest 凭据,给命令增加 --upload。
结果会出现在该导入作业已有的评估结果和轨迹浏览器中,不会修改之前的原生作业。
全部输入验证通过并保存快照之后才开始上传,上传失败会使命令报错退出。
如果需要直接重传已保存快照而不再读取源文件,可在同一平台作业内执行:
执行固定 checkpoint 的原生评估
示例项目的common/eval/native_eval.py 通过 Harbor 执行一个明确的小规模试验集合,
然后生成并按需上传同样的导入快照。运行镜像必须预先安装 Harbor、选定的 agent 实现及沙箱后端。
模型服务必须加载声明的不可变 checkpoint;hosted_vllm/... 是路由名称,不能证明实际加载的权重。
GPU 可以由该模型服务持有,评估协调进程本身不一定需要 GPU。
以上一节的导入清单为基础,把任务路径、agent 和模型端点改为实际运行环境的值:
task.toml。
这里的 Docker 指运行时可用的 Harbor 后端;把协调进程放进训练容器,并不会自动提供 Docker 服务,
也不等于为内部 agent 动作建立了新的隔离边界。远程后端需要相应配置与凭据。
提供方密钥不要写进清单,应通过正常凭据机制注入运行时。
--check-plan 检查本地路径和声明,不导入 Harbor,也不启动沙箱。
实际执行前会验证所有原生 TrialConfig。最多顺序执行 128 个试验,不自动重试。
比较协议中的设置依据实际传入的执行配置生成。输出目录必须是新目录,不会静默续跑执行状态不确定的历史目录。
如果只是上传失败,用导入器的 upload 函数重传已保存快照即可。
Harbor 负责沙箱创建与清理。协调器到达时限后取消试验,并等待原生清理;这是协作式取消,不是保证立即终止的硬时限。
也需要设置提供方的资源存活时间限制。异常或超时会停止后续试验,并保留完整计划分母;
SIGTERM 取消时会保存本地部分结果。存在未评分、基础设施错误或未完成执行时返回非零退出码;
全部完成判分但模型答错,仍属于正常完成的评估。元数据会在正文转换和上传之前保存,
协调器错误类型写入 execution-errors.json。
此入口已通过替代运行时的 CPU 测试,真实 Harbor、模型服务和沙箱生命周期仍需要部署后的冒烟验证,
不能据此把执行后端标记为已认证。它是用户项目入口,不是新增内置配方,也不替代平台已有的 OpenEnv 路径。