news 2026/9/17 6:45:30

Miles数据准备指南:JSONL数据源、采样策略与自定义数据源完整教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Miles数据准备指南:JSONL数据源、采样策略与自定义数据源完整教程

Miles数据准备指南:JSONL数据源、采样策略与自定义数据源完整教程

【免费下载链接】milesMiles is an enterprise-facing reinforcement learning framework for LLM and VLM post-training, forked from and co-evolving with slime.项目地址: https://gitcode.com/GitHub_Trending/miles1/miles

Miles是面向 LLM/VLM 强化学习后训练的开源框架(与 slime 共同演进),本文讲清楚 Miles 数据准备的三件事:如何组织JSONL 数据源、如何用采样策略控制训练轨迹的抽取,以及如何通过钩子接入自定义数据源。掌握这三步,你即可把任意提示词数据集接进 Miles 的 RL 训练流程。

一、Miles 数据源基础:JSONL 与 Parquet 双格式

Miles 默认把--prompt-data指向的文件加载为一个全局数据集,训练中每个 rollout 都从中抽取样本。加载逻辑在 miles/utils/data.py 的read_file中实现,支持两种格式:

格式说明依赖
.jsonl每行一个 JSON 对象,解析失败的行会跳过并打印行号
.parquet按 batch 迭代读取需要pyarrow

JSONL 数据的字段约定

每一行至少包含提示词字段,可选标签和元数据字段,通过参数指定列名:

  • --prompt-data /path/to/train.jsonl:数据文件路径
  • --input-key prompt:提示词所在字段(字符串或对话列表均可)
  • --label-key label:标准答案字段,供奖励函数判分
  • --metadata-key metadata:元数据字段,默认读取metadata

官方脚本 scripts/run_qwen3_4b.py 中的标准用法:

--prompt-data ${DATA_DIR}/dapo-math-17k/dapo-math-17k.jsonl \ --input-key prompt \ --label-key label

💡实用技巧:路径支持 Python 切片语法file.jsonl@[start:end],例如train.jsonl@[0:1000]可只读前 1000 行,方便小规模调试。

两条常被忽略的细节

  1. 长提示词过滤:设置--rollout-max-prompt-len后,Miles 会在初始化时过滤掉超长的 prompt,避免撑爆推理引擎的上下文窗口(详见 miles/utils/arguments.py 参数说明)。
  2. 对话模板:若input_key字段是对话列表或需要套用模型 chat template,加--apply-chat-template;配合--apply-chat-template-kwargs可传额外参数。

二、采样策略:从数据集中抽出训练轨迹

数据加载完成后,Miles 的数据源实现 miles/rollout/data_source.py 负责"怎么抽、抽多少"。核心机制有四个:

1. 按组抽样的 GRPO 结构

每次调用get_samples时,Miles 为每条 prompt 深拷贝--n-samples-per-prompt份,形成一个(group)。这是 GRPO 等组相对优势算法的基础——同一提示词的多条轨迹互相比较。

2. 可控的随机打乱

  • --rollout-shuffle:启用每个 epoch 的随机打乱
  • --rollout-seed:随机种子(默认 42),保证打乱可复现

打乱策略在 miles/utils/data.py 的Dataset.shuffle中实现:以seed + epoch_id作为随机种子,每个 epoch 顺序不同但完全可复现

3. 自动 epoch 滚动

当当前 epoch 剩余样本不够一个 batch 时,Miles 会自动取完剩余部分、epoch_id + 1、重新打乱后从头部补齐——训练无需手动循环数据集。

4. 动态采样过滤(DAPO 风格)

--dynamic-sampling-filter-path可在打分后按组过滤"全对/全错"等无信息量的样本,内置参考实现为miles.rollout.filter_hub.dynamic_sampling_filters.check_reward_nonzero_std;配合--partial-rollout还会把未完成样本回收进数据缓冲区。缓冲区出队顺序可用--buffer-filter-path自定义,默认是 FIFO(pop_first)。

三、自定义数据源最佳实践

当全局数据集不够用(在线数据生成、多任务混采、外部数据管道)时,Miles 提供--data-source-path钩子,让你替换整个数据加载逻辑,完整钩子清单见 docs/user-guide/customization.md。

接入步骤

  1. 继承DataSource抽象类,实现四个方法:
    • get_samples(num_samples):返回num_samples个样本组
    • add_samples(samples):把样本写回数据源
    • save(rollout_id)/load(rollout_id):状态持久化,支持断点续训
  2. 在启动参数中传入--data-source-path my_pkg.my_data_source.MyDataSource
  3. 继承默认实现RolloutDataSourceWithBuffer可保留缓冲区行为,只覆盖get_samples

⚠️注意事项

  • 默认数据源是只读的,直接调用add_samples会抛出RuntimeError,需要覆写
  • 每个样本组长度必须等于--n-samples-per-prompt,否则断言失败
  • 若需要按 epoch 控制数据量,务必同时设置--rollout-global-dataset

VLM 场景实战

多模态数据同样走 JSONL/Parquet 流程,只需额外用--multimodal-keys声明图片列,例如官方 geo3k 视觉数学示例 examples/geo3k_vlm/run_geo3k_vlm.sh:

--prompt-data /root/datasets/geo3k/train.parquet \ --input-key problem \ --label-key answer \ --multimodal-keys '{"image": "images"}' \ --apply-chat-template

其中{"image": "images"}表示images列的内容会替换提示词中的占位符,多模态键的映射规则在 miles/utils/data.py 的_build_messages中处理。

四、快速上手清单

目标关键参数
最小可用 JSONL 数据源--prompt-data+--input-key+--label-key
复现打乱顺序--rollout-shuffle+--rollout-seed
GRPO 组训练--n-samples-per-prompt 8
过滤无效样本组--dynamic-sampling-filter-path
长上下文保护--rollout-max-prompt-len
完全自定义数据流--data-source-path

📦 更多数据与采样细节可参考 docs/user-guide/fully-async.md(异步模式下的数据缓冲区)以及各模型启动脚本目录 scripts/ 中的现成示例。

【免费下载链接】milesMiles is an enterprise-facing reinforcement learning framework for LLM and VLM post-training, forked from and co-evolving with slime.项目地址: https://gitcode.com/GitHub_Trending/miles1/miles

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 6:45:16

海信2026新品解析:Dolby Vision 2、Soundbar与三色激光投影

直接说结论:海信这次2026年的新品布局,方向非常明确,就是要用一场“组合拳”把客厅影音体验的整体水位拉高。Dolby Vision 2从单纯画质技术升级为全链路校准方案,新Soundbar直接对标三星的旗舰级回音壁,投影仪产品线从…

作者头像 李华
网站建设 2026/9/17 6:42:24

时序逻辑电路设计详解:从触发器到计数器

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/17 6:42:02

Java企业微信机器人开发实战:合规API与Spring Boot集成

1. 项目概述作为一名长期从事企业级应用开发的Java工程师,我发现微信机器人在企业私域运营和技术支持中扮演着越来越重要的角色。最近基于企微API完成了一个Java微信机器人项目,这套方案不仅实现了消息自动处理、群组管理等功能,更重要的是解…

作者头像 李华
网站建设 2026/9/17 6:41:41

NoC中断排查指南:从路由机制到外设中断实践

1. “noc中断”这个词,为什么每次查出来都不是同一个东西说实话,我第一次搜“noc中断”的时候,弹出的结果是真“散装”的:有讲芯片里NoC(Network on Chip)互连网络中断路由的,有问LIN串口发送时…

作者头像 李华
网站建设 2026/9/17 6:39:39

OpenClaw翻车后企业级私有化定制智能体平台选型与国产替代方案商推荐2026

一、OpenClaw翻车事件:企业级AI落地的分水岭2026年,开源智能体框架OpenClaw的安全事件在行业内引发广泛关注。依赖外部插件权限、边界模糊、存在公网传输风险、权限颗粒度粗——这些问题在个人使用场景下或许可以容忍,但一旦进入企业核心业务…

作者头像 李华