资讯动态

InternVL推理数据管道源码解析:MMPR数据构建全流程

发布时间:2026/9/17 19:02:54 来源:尧图企业网站定制
InternVL推理数据管道源码解析MMPR数据构建全流程【免费下载链接】InternVL[CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o. 接近GPT-4o表现的开源多模态对话模型项目地址: https://gitcode.com/GitHub_Trending/in/InternVL 本文带你完整读懂InternVL开源多模态大模型家族中一条容易被忽略却至关重要的工具链位于 internvl_chat/tools/reasoning_data_pipeline/ 的推理数据管道。它基于 LMDeploy 大规模采样 InternVL3-8B 的推理输出自动完成答案解析、正确性校验最终构建出MMPR 数据集偏好对 过程奖励模型 PRM 数据是 InternVL 系列模型 MPO多模态偏好优化与 VisualPRM 训练的数据来源。即使你不打算复现整个训练理解这条管道也能帮你快速掌握从模型采样到 RLHF 数据的工程范式。为什么多模态推理模型需要推理数据管道InternVL 想让自己的模型学会先一步步思考再给出正确答案靠单纯监督微调是不够的还需要两类高质量数据偏好对chosen / rejected同一个问题模型给出正确回答与错误回答的配对用于 MPO 偏好优化训练入口脚本见 internvl_chat_mpo.py过程奖励PRM数据把一条推理链拆成多个步骤逐步打上 / - 标签训练一个步骤级裁判VisualPRM。这两类数据如果人工标注成本极高。InternVL 的解决方案是让模型自己批量采样再用程序自动判对错——这就是推理数据管道要解决的问题。一屏看懂管道架构6 个脚本对应 4 条流水线整个管道只有 5 个核心脚本 1 个工具包职责非常清晰脚本角色产出mmpr_data_pipeline_correctness.py多卡采样推理输出每条样本的模型回答每题默认 32 条mmpr_data_pipeline_correctness_postprocess.py正确性后处理chosen/rejected 偏好对mmpr_data_pipeline_dropout_ntp.py前缀截断重采样另一种构造 rejected 的手段visualprm_data_pieline.py逐步骤蒙特卡洛打分步骤级分数 steps_with_scorevisualprm_data_pipeline_postprocess.pyPRM 数据转换多轮 PRM 对话 单轮 ORM 数据utils/共享工具提示词模板、答案解析、正确性判分配套的运行脚本也一并给出MPO 侧是 correctness_mmpr_8b.sh 与 correctness_build_data.shVisualPRM 侧是 visualprm_mmpr_8b.sh 与 visualprm_build_data.sh。第一步256 张 GPU 的分布式采样怎么分片打开采样脚本的第一段代码你会发现它并不复杂却非常生产级TP int(os.environ.get(TP, 1)) if RANK in os.environ: DEVICE_START_IDX int(os.environ[RANK]) % 8 os.environ[CUDA_VISIBLE_DEVICES] ,.join(...)每个进程根据自己在 SLURM 集群中的RANK编号绑定 8 卡机中属于自己的那几张 GPURANK % 8再用 LMDeploy 的 Turbomind 引擎做张量并行。运行脚本 correctness_mmpr_8b.sh 默认申请256 卡遍历 40 个 MMPR 提示文件CLEVR-Math、Geometry3K、ChartQA、DocVQA、GeoQA 等逐个数据集提交srun任务。几个值得新手注意的设计不同数据集用不同分辨率切片每个数据集名后带一个max_num1/6/12/18/24控制动态分辨率下最多切多少块图表类数据集用更大的切片换取细节断点续跑item2num字典会读取已存在的输出文件跳过已经采够num_return_sequences条的样本任务挂了可以直接重跑多模态 纯文本兼容VQADataset里multi_modal_get_item和pure_text_get_item双分支图片还支持s3://路径经对象存储客户端直接读取。提示词工程6 种 Instruction 版本决定数据形态采样前问题会被包装成统一的指令模板。所有模板集中在 utils/constants.py按--prompt-version参数切换为 6 种之一en / zh要求逐步推理 Final answer: ...结尾适合 MPO 主数据en_v2 / zh_v2要求最后一行写成Answer: \boxed{...}方便用正则精准抽答案en_r1 / zh_r1DeepSeek-R1 风格思考标签 \boxed{}收尾。脚本还会智能识别如果数据文件路径里含_zh_自动把英文版提示切换成中文版。对新手来说这一层是数据格式即接口的典型例子——提示词模板定义了后面所有解析、判分逻辑能成立的前提。正确性后处理从 32 条回答到一组偏好对采样得到一题多答之后mmpr_data_pipeline_correctness_postprocess.py 开始做三件事解析答案核心函数在 utils/accuracy_reward.py。Final answer:版直接按分隔符切分\boxed{}版用花括号配对算法提取内容还能处理嵌套括号R1 版先校验思考标签格式合法才解析。智能判分check_answer会根据数据集名自动选择判分组合——ChartQA 用 5% 容差的松弛匹配DocVQA 用 ANLS基于 Levenshtein 距离几何/数学题叠加math_verify符号等价校验选择题支持A./(A)等格式归一。同一对答案还会进缓存百万级样本判分不会重复计算。组装偏好对按图片, 问题, 标准答案分组把答对的放 chosen、答错的放 rejected随机抽样最多 15 对/题num_pairs_per_key同时另存一份格式不合格负样本对让模型连格式不对也要学会避开。最终输出三类文件*_pairs_vqa_correctness_rules.jsonl正确性偏好对、*_pairs_vqa_format_rules.jsonl格式偏好对、pos_items / neg_items正负样本明细。VisualPRM 分支蒙特卡洛法给每个推理步骤打分过程奖励模型的思路更巧妙判断第 k 步之前是否全对等价于从这个前缀继续作答看最终答案能不能做对。visualprm_data_pieline.py 实现了这一思想split_response把回答按空行切成步骤对第 k 步取前 k 步作为前缀让模型续写 16 次num_mc_sequences每次算一次正确性取平均值作为该步骤分数步骤分数归零即触发early_stop提前剪枝节省推理开销。后处理脚本 visualprm_data_pipeline_postprocess.py 再把分数转成两种监督格式item2conv_prm生成多轮对话每一步一轮回答只有或-系统提示词PRM_SYSTEM_PROMPT明确要求裁判只输出一个符号item2conv_orm生成单轮整条判断的 ORM 数据作为对照组。彩蛋dropout NTP——低成本造 rejected 样本mmpr_data_pipeline_dropout_ntp.py 展示了第三种思路不需要模型答错而是截断一条正确答案的开头start_ratio默认取前 50%把它作为前缀喂给模型让它续写——续出来的版本往往在细节上跑偏与原始完整回答拼成一对自然的 chosen/rejected。这招避免了等模型答错的低效率是构造偏好数据里非常实用的一手。全流程速览与关键参数清单把四条流水线串起来MMPR 数据构建的完整链路是提示词文件40 个 JSONL→ 256 卡 LMDeploy 采样每题 32 条→ 答案解析 智能判分 → 偏好对 / PRM 步骤数据 → MPO 与 VisualPRM 训练新手如果只想在小集群跑通最小闭环建议记住这几个关键参数--prompt-version en_v2保证答案可解析、--num-return-sequences 32采样条数、--num-pairs-per-key 15每题偏好对上限、--max-num动态分辨率切片数按数据集 1~24 不等。这条管道虽然服务于最前沿的 InternVL 推理模型训练但代码结构朴素、职责单一非常适合作为学习大规模推理采样 自动数据构建的开源范本去阅读。【免费下载链接】InternVL[CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o. 接近GPT-4o表现的开源多模态对话模型项目地址: https://gitcode.com/GitHub_Trending/in/InternVL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价