执行摘要
新增 source_names 追踪数据来源
当训练混合多个数据源时,需要追踪每个样本的来源,以支持自定义奖励、过滤、日志统计以及未来的按源路由(如 OPD teacher 选择)。PR body 虽未提供详细 issue,但文档中明确说明了该动机。
建议合并。变更清晰、影响范围小,文档完善。值得关注的是 get_source 的优先级设计,为未来扩展提供了灵活性。
本 PR 无 review 评论或讨论。
当训练混合多个数据源时,需要追踪每个样本的来源,以支持自定义奖励、过滤、日志统计以及未来的按源路由(如 OPD teacher 选择)。PR body 虽未提供详细 issue,但文档中明确说明了该动机。
建议合并。变更清晰、影响范围小,文档完善。值得关注的是 get_source 的优先级设计,为未来扩展提供了灵活性。
本 PR 无 review 评论或讨论。
get_source(sample: Sample) -> str 函数,按优先级提取 source:优先返回 sample.source(动态设置),其次 metadata["source_name"],否则返回 "unknown"。将该函数加入 __all__ 导出。get_source;在 _convert_samples_to_train_data 中,当 samples[0].metadata 不为 None 时,为每个 sample 调用 get_source,将结果列表存入 train_data["source_names"];在 _split_train_data_by_dp 的 skip 列表中添加 "source_names",避免被误当作指标处理。log_rollout_data 的 skip 列表中添加 "source_names",防止非张量字段被尝试聚合日志。source_name 的说明和示例 JSON 配置,并清晰列出了查找优先级和用途。| 文件 | 模块 | 状态 | 重要度 |
|---|---|---|---|
slime/utils/data.py |
数据工具 | modified | 6.91 |
slime/ray/rollout.py |
Rollout | modified | 5.99 |
slime/backends/megatron_utils/data.py |
训练后端 | modified | 4.58 |
docs/en/get_started/usage.md |
文档 | modified | 3.02 |
docs/zh/get_started/usage.md |
文档 | modified | 2.85 |
slime/utils/data.py
core-logic
核心新增 `get_source` 函数,定义 source 提取逻辑和优先级。
def get_source(sample: Sample) -> str:
# 优先返回动态设置的 sample.source
if getattr(sample, "source", None):
return sample.source
# 其次从 metadata 中取 source_name
metadata = getattr(sample, "metadata", None) or {}
if metadata.get("source_name"):
return metadata["source_name"]
# 都没有时标记为 unknown
return "unknown"
当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。
风险较低。新增字段仅在 metadata 非空时写入,不影响现有逻辑。get_source 对未设置 source 的样本返回 "unknown",兼容旧数据。需注意:如果其他模块遍历 train_data 时未处理 "source_names",可能导致意外行为,但目前 skip 列表已覆盖日志和 DP 拆分路径。
对用户:需在 metadata 中设置 source_name 或动态设置 sample.source 才能生效;未配置时自动回退为 "unknown"。对系统:新增 ~44 行代码,无性能影响。对团队:为后续按源路由、分源统计等功能奠定基础。
当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。
参与讨论