ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

UI-S1 数据集格式全解:verl RLHF / SFT / RM 数据管线的字段规范与源码实现

UI-S1 数据集格式全解:verl RLHF / SFT / RM 数据管线的字段规范与源码实现 UI-S1 数据集格式全解verl RLHF / SFT / RM 数据管线的字段规范与源码实现【免费下载链接】MobileAgentMobile-Agent: The Powerful GUI Agent Family项目地址: https://gitcode.com/GitHub_Trending/mo/MobileAgent本篇技术指南以 UI-S1/verl/utils/dataset/README.md 为骨架系统讲解 MobileAgent 仓库中 UI-S1 项目所依赖的 verl 数据集格式约定如何将多来源数据合并为单个 parquet 文件、如何把 prompt 组织成 Chat 消息格式以支持多轮对话、如何通过指令跟随文本约束模型输出以便规则化提取答案以及data_source、prompt、ability、reward_model等核心字段的语义。读完本文你将掌握 RLHFGRPO/PPO、SFT、RM偏好对齐三类训练数据的构造方法并能结合源码定位字段到实际加载与 tokenize 全流程直接复用到 GUI Agent 的 GUI 轨迹微调与强化学习场景中。一、数据集格式设计的总原则原文档开篇即点明 RLHF 数据集的三条核心设计原则统一合并为单个 parquet 文件把所有数据源如 openai/gsm8k、自定义 GUI 轨迹数据合并进一个或多个 parquet 文件避免多格式散落便于分布式加载与缓存。prompt 直接组织为 Chat 格式prompt字段本身就是[{role: user, content: ...}]这样的消息列表因此多轮对话可以无缝嵌入无需在加载时二次拼接。指令跟随文本instruction following引导输出格式在问题末尾追加诸如Lets think step by step and output the final answer after ####的约束文本让模型按约定格式作答从而在训练后可以用正则或规则稳定地提取答案、计算奖励。这三点在源码中得到了一一印证字段解析位于 rl_dataset.pyprompt 键默认取prompt且__getitem__中直接用apply_chat_template(messages, add_generation_promptTrue)渲染整段对话。二、RLHF 数据集字段详解原文档给出了数学题Math problems的标准样本这是所有 RLHF 数据的最小完备模板{ data_source: openai/gsm8k, prompt: [{role: user, content: Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May? Lets think step by step and output the final answer after \####\}], ability: math, reward_model: { style: rule, ground_truth: [72] }, }各字段的语义与训练链路中的作用如下字段类型说明消费位置data_sourcestring数据来源标识如openai/gsm8k可作为reward_fn_key路由不同的奖励函数rl_dataset.py、训练配置reward_fn_key: data_sourcepromptlist[dict]Chat 消息列表至少一条user消息可扩展到多轮prompt_key默认prompt解析abilitystring能力标签如math用于按能力分流或过滤透传字段训练时可读取reward_modeldict奖励模型描述style表示奖励风格rule为规则奖励ground_truth为参考答案universal_multiround.pyextra_infodict附加元信息split、index、原始答案等训练中作为透传信息保留gsm8k.py关于reward_model有两种常见风格{style: rule, ground_truth: 72}规则式奖励直接把模型输出与ground_truth比对适合可判定答案的任务{style: rule, ground_truth: {check_options: ...}}GUI 场景中ground_truth可携带check_options、num_steps、thought等结构化判定信息见 universal_multiround.py。在 GUI 强化学习配置 static_grpo.yaml 中reward_fn_key显式设置为data_source说明奖励函数会按data_source字段动态分发data.return_raw_chat: False则对应 rl_dataset.py 中的return_raw_chat默认值。三、从 Parquet 到 Token 的加载链路RLHF 数据的加载由RLHFDataset完成rl_dataset.py其核心流程为本地缓存下载_download调用copy_to_local将远程/本地 parquet 缓存到cache_dir默认~/.cache/verl/rlhf支持use_shm共享内存加速。读取并合并_read_files_and_tokenize用datasets.load_dataset(parquet, ...)读入全部 parquet 并用concatenate_datasets合并。超长 prompt 过滤若filter_overlong_promptsTrue会用apply_chat_template(prompt, add_generation_promptTrue)后的 token 长度与max_prompt_length默认 1024比较超出则过滤。逐样本 tokenize__getitem__中将 messages 渲染成raw_prompt再经 tokenizer/processor 产出input_ids、attention_mask、position_ids并通过verl_F.postprocess_data做左填充与截断。截断策略truncation支持left/right/middle/error四种取值error默认在超长时直接抛异常适合训练前严格清洗数据rl_dataset.py。断点续训resume_dataset_state从原始 parquet 重新下载重建 dataframe保证 ckpt 恢复时可复现同一份数据。extra_info中的index、tools_kwargs、need_tools_kwargs会被提取为样本级字段rl_dataset.py当开启工具调用训练时若need_tools_kwargs为真但tools_kwargs为空会打印警告日志提示数据质量问题。四、多轮对话的天然支持原文档强调多轮 chats 可以轻松并入multi-turn chats can be easily incorporated这体现在三个层面1. RLHF prompt 直接携带多轮消息prompt是消息列表RLHFDataset直接对它整体做 chat template 渲染无需额外结构。2. 多轮 SFT 数据集multiturn_sft_dataset.py 的MultiTurnSFTDataset按messages列默认键messages读取整段对话支持system/user/assistant/tool四种角色为 assistant 消息生成loss_mask1需参与损失计算为 user/system/tool 消息生成loss_mask0还支持通过enable_thinking列控制思考模式、tools列注入工具定义。它采用逐消息增量编码 全量编码交叉校验的方式_validate_and_convert_tokens确保 token 一致性若出现不一致则回退到增量拼接结果。3. 单轮 SFT 的模板化普通 sft_dataset.py 则假设数据为单轮读取prompt与response两列response尾部追加 eos并通过loss_mask屏蔽 prompt 部分loss_mask[:prompt_length-1] 0与回复末位 token实现只学习回复、不学习问题的标准 SFT 目标。五、Reward Model 数据集chosen / rejected 偏好对偏好对齐训练使用 rm_dataset.py 的RMDataset其数据格式为三个文本列列名默认键含义promptprompt用户输入chosenchosen被偏好好的回复rejectedrejected被拒绝差的回复实现细节若add_eosTrue默认chosen/rejected 回复尾部都会拼接 eos token随后把 prompt 分别与两段回复拼接产出形状为(2, max_length)的input_ids与attention_mask第一维对应 chosen/rejected。RMDataset支持通过 copy 与 barrier 实现多卡分布式下载仅 rank 0 负责下载随后 barrier 同步避免多进程重复拉取。六、多模态数据图像 / 视频支持若数据列中包含images/videos默认键见 rl_dataset.py则prompt 文本中的image、video占位符会被拆分为多模态 content 块{type: image}等见_build_messagesrl_dataset.py传入ProcessorMixin后走多模态分支产出multi_modal_data与multi_modal_inputs后者必须是 dict 而非 BatchFeature源码注释明确提示这是陷阱对 Qwen2-VL 系列额外调用get_rope_index计算 mrope 位置编码second_per_grid_ts仅用于 mrope不参与训练会被 pop 掉。图像与视频的底层解码在 vision_utils.pyprocess_image支持 PIL Image 或 dict含bytes/image键process_video支持单视频文件或帧序列并约定默认fps2, min_frames4, max_frames768可通过fps/nframes/min_frames/max_frames显式覆盖采样规则。七、GUI 场景的数据格式落地UI-S1 核心用法原文档的数据格式规范在 UI-S1 的 GUI Agent 强化学习中被直接套用并扩展1. GUI 轨迹的奖励构造GUI 多轮生成器 universal_multiround.py 中每条 GUI 轨迹line内含steps每步由action_content与bbox组装出check_options再包装成row_dict[reward_model] { style: rule, ground_truth: { check_options: state[check_options], num_steps: ..., thought: ..., } }即复用本文第二节的reward_model.style rule约定将动作正确性判定下沉到规则奖励。2. GUI 单步数据集Qwen25VLDatasetrl_dataset.py按messages列逐条读取通过slim_messages限制图片数量默认num_image_limit2并把check_options自动转成reward_model.ground_truth直接支撑 static_grpo.yaml 与 multi_singleturn.yaml 所配置的 GUI GRPO 训练。3. 轨迹采样Qwen25VLNoRolloutDataset支持N后缀截取数据集子集如data.parquet100并通过stratified_sample按_advantage正负分层抽样保证正负样本比例均衡TrajDataset则保留完整轨迹步骤供按步展开的轨迹级训练使用。八、实战从原始数据构造 parquet以 gsm8k.py 为例构造 RLHF parquet 的完整流程是用datasets.load_dataset(openai/gsm8k, main)拉取原始数据在process_fn中将问题拼接指令跟随文本Lets think step by step and output the final answer after ####.用正则#### (\-?[0-9\.\,])从参考答案中抽出最终答案作为ground_truth组装data_source/promptChat 列表/ability/reward_model/extra_info五元组调用to_parquet输出train.parquet/test.parquet可选上传 HDFS。训练时在 Hydra 配置中声明data.custom_cls如path: verl/utils/dataset/rl_dataset.py, name: Qwen25VLDataset见 static_grpo.yaml即可把自定义数据集类注册进 trainer实现一份字段约定、多类数据通用。九、小结三种数据集格式速查训练范式数据集类必需列关键行为RLHFPPO/GRPORLHFDataset/Qwen25VLDatasetprompt(messages)、data_source、reward_modelChat 模板渲染、超长过滤、多模态处理SFTSFTDataset/MultiTurnSFTDatasetpromptresponse或messagesloss_mask 屏蔽 prompt、逐消息增量编码校验RMRMDatasetprompt、chosen、rejected偏好对拼接、eos 追加、分布式下载以上字段规范与实现全部对应仓库中的真实代码格式声明见 README.md实现见 rl_dataset.py、sft_dataset.py、rm_dataset.py、multiturn_sft_dataset.py预处理范例见 gsm8k.py。当你在 GUI 数据上做对齐训练时只需照此约定产出 parquet并在训练配置中指定对应的custom_cls与reward_fn_key即可无缝接入 UI-S1 的完整训练管线。【免费下载链接】MobileAgentMobile-Agent: The Powerful GUI Agent Family项目地址: https://gitcode.com/GitHub_Trending/mo/MobileAgent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表