帮你快速理解、总结文档立即下载

RL Training Outputs(强化学习训练输出)

最近更新时间:2026-10-19 21:18:03
本文档已由 AI 辅助审校
我的收藏

强化学习训练输出

每次 RL 训练运行都会把文件写入 log_path。所有文件 I/O 都经过 Storage 协议,因此 log_path 可以是本地路径,也可以是云端 URI(例如 gs://bucket/run)。
本页介绍每个文件以及如何从中提取数据。

写入 log_path 的文件

文件
格式
内容
metrics.jsonl
JSONL
每次训练迭代一个 JSON 对象,包含全部标量指标
config.json
JSON
序列化后的训练配置(超参数、模型、数据集等)
checkpoints.jsonl
JSONL
检查点元数据(路径、用于续训的循环状态)
train_iteration_NNNNNN.html
HTML
训练 rollout 的可读 logtree 报告
train_iteration_NNNNNN_logtree.json
JSON
同一份 logtree trace 的机器可读导出
train_iteration_NNNNNN_rollout_summaries.jsonl
JSONL
每条轨迹一个 JSON 对象,含奖励、指标与步级数据
eval_<name>_iteration_NNNNNN.html
HTML
评测 rollout 的 logtree 报告
eval_<name>_iteration_NNNNNN_logtree.json
JSON
评测 logtree trace 的机器可读导出
eval_<name>_iteration_NNNNNN_rollout_summaries.jsonl
JSONL
逐条轨迹的评测数据(用于 RLTestSetEvaluator)
code.diff
text
训练开始时的 git diff
<name> 是评测器名称(已针对文件名做净化处理);迭代编号补零到 6 位。

metrics.jsonl

每一行都是一个以指标名为键的 JSON 对象。常见键(随环境与配置而异):
progress/batch、progress/done_frac — 迭代序号与完成比例
env/all/reward/total — 所有轨迹的总奖励均值
env/all/<metric> — 环境发出的指标(例如 format_parse、correct)
ac_tokens_per_turn — 每回合生成的 token 数均值
entropy — 逐 token 熵
kl_sample_train_v1、kl_sample_train_v2 — KL 散度估计量
optim/lr — 学习率
time/... — 各阶段的墙钟耗时
df = pd.read_json("path/to/metrics.jsonl", lines=True)
df.plot(x="progress/batch", y="env/all/reward/total")

*_rollout_summaries.jsonl

每条轨迹一行。最适合做聚合分析(奖励分布、逐步指标)。
with open("train_iteration_000010_rollout_summaries.jsonl") as f:
trajectories = [json.loads(line) for line in f]

# Each trajectory has:
# - metadata: schema_version, split, iteration, group_idx, traj_idx, tags, sampling_client_step
# - episode totals: total_reward, final_reward, trajectory_metrics, final_ob_len
# - steps: list of {step_idx, ob_len, ac_len, reward, episode_done, metrics, logs}

*_logtree.json

logtree JSON 包含完整的 rollout 记录:提示词、模型回复、评分细节与奖励拆解。当你需要 rollout 的实际文本内容时使用它。
顶层字段:title、started_at、path、root。root 是一棵节点树,每个节点含 tag、attrs 和 children(可以是文本字符串,也可以是嵌套节点)。
部分节点带有 data 字段,内含结构化内容。用 data 可以提取诸如对话消息这类带类型的数据:
def find_conversations(node):
"""Recursively find all nodes with conversation data."""
results = []
if isinstance(node, dict):
if node.get("data", {}).get("type") == "conversation":
results.append(node["data"])
for child in node.get("children", []):
if isinstance(child, dict):
results.extend(find_conversations(child))
return results

with open("eval_test_iteration_000020_logtree.json") as f:
trace = json.load(f)

for conv in find_conversations(trace["root"]):
for msg in conv["messages"]:
print(f"{msg['role']}: {msg['content'][:100] if isinstance(msg['content'], str) else '...'}")
注意:
num_groups_to_log(默认:4)控制有多少个轨迹组会获得详细的环境级日志。超出该上限的组在 logtree 中没有 rollout 内容——只有 Trajectory Details 部分(回合级统计)始终存在。

config.json

序列化后的 chz 配置,记录了全部训练超参数。便于复现某次运行或跨实验比较配置。

checkpoints.jsonl

每行记录一个已保存的检查点,包含其路径以及保存时的循环状态。续训逻辑用它来从上次中断处继续。