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

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

相关产品
弹性 MapReduce 产品页,含版本规格、价格与购买入口。

一、强化学习训练输出

本页介绍每个文件以及如何从中提取数据。

二、写入 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 resultswith 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

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

赞 (0)
上一篇 4天前
下一篇 4天前