首页/新闻资讯/正文详情

Model-Optimizer 数据集混合(Dataset Blend)配置指南:面向 LLM QAT/QAD 训练的数据源混合、采样与缓存方案

发布时间:2026/9/26 22:23:42 来源:云帆数科 栏目:资讯中心
Model-Optimizer 数据集混合(Dataset Blend)配置指南:面向 LLM QAT/QAD 训练的数据源混合、采样与缓存方案
人工智能大模型模型优化模型量化模型压缩【免费下载链接】Model-OptimizerA unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc. It compresses deep learning models for downstream deployment frameworks like TensorRT-LLM, TensorRT, vLLM, etc. to optimize inference speed.项目地址https://gitcode.com/GitHub_Trending/te/Model-Optimizer点击查看免费下载导读本指南聚焦 Model-Optimizer 仓库中examples/llm_qatLLM 量化感知训练 QAT 与量化感知蒸馏 QAD示例所采用的数据集混合配置方案。它通过 YAML 文件声明式地定义从哪些 HuggingFace 数据集取数、如何按权重采样、如何切分 train/eval/test、如何分词与打标签从而在有限样本预算下构造高质量的指令微调数据。读完本文你将掌握 blend YAML 的完整字段语义、Chat 模板标签掩码的三种策略、三种 split 模式、流式采样与磁盘缓存机制并能基于仓库源码理解底层实现从而为 QAT/QAD 训练自定义数据集混合配置。一、数据集混合在 LLM QAT/QAD 中的作用在量化感知训练QAT与量化感知蒸馏QAD流程中数据集是校准模型损失与保真度的基础。examples/llm_qat示例对应源码见 dataset_utils.py将数据准备与模型训练解耦为两个阶段混合Blend把多个领域的数据源代码、数学、科学问答、多语言对话、指令跟随等按比例拼成一个统一的训练集保证任务多样性Tokenize Cache预先完成分词并落盘缓存训练时直接复用避免重复下载与重复分词运行时子采样训练配置中的train_samples/eval_samples只是对已构建好数据集的运行时上限修改它们不会使缓存失效。数据集配置文件统一放在 examples/llm_qat/configs/dataset/ 目录下训练脚本通过--dataset_config指定默认值为configs/dataset/blend.yaml见 arguments.py。二、Blend YAML 结构总览Blend YAML 定义了三层信息数据集总规模blend_size、全局切分比例splits以及数据源列表sources。完整可运行示例见 blend_example.yaml基本结构如下blend_size: 100000 # total samples to download across all sources splits: # train/eval/test split ratios (must sum to 1.0) train: 0.80 eval: 0.10 test: 0.10 sources: - hf_path: nvidia/Nemotron-SWE-v1 split: r2e_gym ratio: 6000 category: codeblend_size表示从所有源下载的样本总数各源先按ratio归一化权重分配份额全部源的数据汇合后再由顶层splits全局切分为 train/eval/test。顶层字段FieldRequiredDefaultDescriptionblend_sizeno100000Total samples to download across all sourcessplitsno{train: 0.8, eval: 0.1, test: 0.1}Relative split weights; e.g.{train: 8, eval: 1, test: 1}gives 80/10/10blend_size与splits均非必填不填时使用上方默认值。注意splits并不强制各比例之和恰好为 1.0——BlendConfig.__post_init__会对splits值做归一化处理splits {k: v / total for k, v in splits.items()}因此{train: 8, eval: 1, test: 1}这类权重式写法同样有效见 dataset_utils.py。同样各 source 的ratio也是相对权重由_normalize_ratios归一化为总和 1.0见 dataset_utils.py。三、Per-Source 字段详解source列表中每个条目定义一个数据源字段如下FieldRequiredDefaultDescriptionhf_pathyes-HuggingFace dataset path or local pathratioyes-Relative weight (normalized across all sources)splityes-Split(s) to load (auto train/eval). See belowdataset_kwargsno{}Extra kwargs passed todatasets.load_dataset()(e.g.{name: 3.0.0})apply_chat_templatenotrueIf true, expects OpenAI messages formattrain_only_assistant_tokensnoautoLabel policy for chat datasets:auto,true, orfalse. See belowchat_keynomessagesKey containing conversationscategorynoLabel for logging其中hf_path、ratio、split为必填项若split缺失DatasetSourceConfig.__post_init__会抛出ValueError报错见 dataset_utils.py。这些字段与源码中的DatasetSourceConfigdataclass 一一对应dataset_utils.py字段名与 YAML 键完全一致。几个值得注意的细节hf_path可以是本地路径当hf_path指向本地存在的目录时代码会改用datasets.load_from_disk加载并对DatasetDict自动取对应 split见 dataset_utils.py 与 blend_example.yaml 中的注释示例category仅用于日志标注加载时会在日志中打印Source [i/n]: hf_path [category]方便观察各领域数据占比dataset_utils.py不影响采样逻辑apply_chat_template: false表示预训练风格纯文本此时使用make_pretrain_tokenize_fn从text/article/content字段取文本所有非 padding 的 token 都作为标签参与训练见 dataset_utils.py。四、Chat 标签掩码Chat Label Maskingapply_chat_template控制消息的格式化方式是否调用 tokenizer 的apply_chat_template而train_only_assistant_tokens控制哪些 chat-template token 会成为损失标签。三种取值语义如下auto当 tokenizer 原生支持{% generation %}掩码或属于已测试的 Qwen/Nemotron ChatML 启发式时仅用 assistant 输出作为标签否则训练所有非 padding 的 chat-template token并打印警告true强制要求 assistant-only 标签使用原生掩码或 ChatML 启发式若两者都不可用则直接抛出ValueError提示改为train_only_assistant_tokens: falsefalse对所有非 padding 的 chat-template token 都计算损失。在源码make_chat_tokenize_fn中dataset_utils.py掩码选择顺序为tokenizer 模板含{% generation %}→ 原生掩码return_assistant_tokens_maskTrue否则若 tokenizer 属于 Qwen/Nemotron 系列且识别出|im_start|/|im_end|等 ChatML 标记 → 使用启发式_chatml_assistant_mask手工构造掩码dataset_utils.py以上都不满足且取值为auto→ 退化到训练所有非 padding token并告警。已测试的模型家族由_TESTED_MODEL_FAMILIES (qwen, nemotron)限定dataset_utils.py若使用其他家族的模型且掩码不可用会在auto模式下告警、在true模式下直接失败。chat_key指定会话消息所在的字段名。默认messages对应 OpenAI 风格消息列表若数据集使用其他字段如 ShareGPT 格式的conversations通过chat_key覆盖。五、Split 模式的三种写法split指定从该数据源加载哪些 HuggingFace split。所有源的样本先汇合pooled再按顶层splits比例全局切分为 train/eval/test。三种写法等价于源码_parse_split_spec的解析结果dataset_utils.py# 单个 split split: train # 逗号分隔每个 split 等权重 split: code,math,stem # 字典按权重采样如 3:2:1 split: code: 3 math: 2 stem: 1单个 split 被解析为{train: 1.0}逗号分隔形式被解析为各 split 权重均为 1.0dict.fromkeys(parts, 1.0)字典形式按显式权重分配样本在_load_source_samples中每个 split 分配round(weight / total_weight * num_samples)个样本最后一个 split 取得剩余全部样本dataset_utils.py因此权重无需归一化。六、dataset_kwargs透传给 load_dataset 的额外参数dataset_kwargs中的键值对会原样合并进datasets.load_dataset()的调用load_kwargs.update(dataset_kwargs or {})见 dataset_utils.py典型用途包括指定 HF 数据集配置名如cnn_dailymail的3.0.0版本、信任远程代码、锁定 revision# HF config name (e.g. cnn_dailymail) dataset_kwargs: {name: 3.0.0} # 多个 kwargs dataset_kwargs: name: 3.0.0 trust_remote_code: true revision: main注意split与streamingTrue由框架内部注入无需也不应写在dataset_kwargs中。dataset_kwargs同时参与缓存键计算见下文缓存机制因此修改它会导致缓存重建。七、流式加载与洗牌Streaming and Shuffle所有 HuggingFace 数据集都以streamingTrue流式加载避免下载整个数据集dataset_utils.py。采样与洗牌由DataArguments中的shuffle与shuffle_buffer控制arguments.pyshuffle: true默认使用蓄水池采样Reservoir Sampling等价于dataset.shuffle(buffer_sizeN).take(n)。buffer 越大随机性越准确但更慢、内存占用更高shuffle: false直接取前 N 个样本等价于dataset.take(n)。速度快且结果确定便于复现。在分布式场景下每个 rank 只加载自己分片的数据流式数据通过skip(offset).take(per_rank)跳过而不存储本地数据集则利用select()随机访问dataset_utils.py。洗牌种子默认 42可通过--dataset_seed修改。八、预分词与磁盘缓存8.1 独立 CLI 预构建缓存为避免训练时重复下载与分词可先用dataset_utils.py独立预构建缓存对应 dataset_utils.py 的main入口python dataset_utils.py \ --dataset_config configs/dataset/blend.yaml \ --model_name_or_path Qwen/Qwen3-8B缓存默认写入dataset_cache_dir默认.dataset_cache/tokenized/之后使用相同数据集配置与 tokenizer 的任意训练运行都会复用该缓存。dataset_utils.py在构建时会打印各分区的样本数如Built dataset: train: 18000, eval: 1000, test: 1000便于核对比例。8.2 缓存键Cache Key机制缓存键的计算逻辑在_build_cache_path中dataset_utils.py由以下要素经 SHA-1 摘要取前 12 位生成顶层配置blend_size、splits按键排序拼接每个 sourcehf_path、ratio、split、dataset_kwargs、apply_chat_template、chat_key、train_only_assistant_tokens分词设置max_lengthtokenizer 指纹tokenizer 类名、vocab_size、eos/bos/pad/unk的 token id_tokenizer_fingerprintdataset_utils.py保证同类 tokenizer 不同词表得到不同缓存。关键结论训练配置中的train_samples与eval_samples不参与缓存键计算——它们只是对已构建数据集的运行时子采样上限。因此调整这两个值不会使缓存失效修改train_samples/eval_samples只需重新select(range(n))见 utils.py这也是 README 中训练配置与数据集配置解耦设计的核心原因见 llm_qat/README.md。8.3 分布式合并流程build_blend_datasetdataset_utils.py的完整流程为计算缓存路径并尝试从内存缓存_dataset_cache或磁盘加载每个 rank 按自己的分片流式加载各 source 的原始样本_load_all_source_samples每个 source 用make_chat_tokenize_fn或make_pretrain_tokenize_fn分词num_proc个 CPU worker 并行处理并过滤掉全部标签为IGNORE_INDEX的样本dataset_utils.py各 rank 将本地扁平数据存盘rank 0 合并所有分片、按dataset_seed确定性洗牌、再按splits比例切分并写回缓存_merge_distributed_shardsdataset_utils.py。并行参数由ParallelConfig管理dataset_utils.pynum_proc默认为 16在多卡节点上会根据LOCAL_WORLD_SIZE由 torchrun/SLURM 设置自动缩放为max(1, num_proc // local_world_size)避免 CPU 过度订阅。九、DataArguments 完整参数表处理参数cache_dir、shuffle、num_proc等在训练配置 YAML 或 CLI 中通过DataArguments设置定义见 arguments.pyArgumentDefaultDescription--dataset_configconfigs/dataset/blend.yamlPath to a dataset blend YAML config file--train_samples20000Number of training samples to use--eval_samples2000Number of evaluation samples to use--dataset_seed42Random seed for dataset shuffling--dataset_cache_dir.dataset_cache/tokenizedDirectory for caching tokenized datasets--shuffletrueWhether to shuffle dataset sources (reservoir sampling)--shuffle_buffer10000Buffer size for streaming shuffle--num_proc16Number of CPU workers for tokenizationdataset_config同时被quantize.py量化校准数据与train.pyQAT/QAD 训练数据使用见 arguments.py 中的参数分组因此一套数据集混合配置可同时服务于量化与训练两条流水线。十、仓库内置配置示例10.1 默认训练混合配置 blend.yamlconfigs/dataset/blend.yaml 是默认 SFT 混合配置使用 NVIDIA 后训练数据集总规模 20000、90/5/5 切分覆盖代码、数学、科学问答、指令跟随、多语言对话与竞赛编程等 7 个数据源各源按ratio相对权重分配6000/2500/1500/1500/5000/1500/1000默认启用 chat template 分词。10.2 全选项参考示例 blend_example.yamlblend_example.yaml 是展示所有混合选项的参考文件默认不被任何训练配置引用其中演示了单 split 自动 train/evalnvidia/Nemotron-SWE-v1、逗号分隔 splitcode,math,stem、字典权重 splitcode: 3, math: 2, stem: 1、预训练风格纯文本abisee/cnn_dailymailapply_chat_template: false、自定义chat_keyMagpie-Align/Magpie-Pro-MT-300K-v0.1chat_key: conversations以及本地数据集路径load_from_disk。10.3 快速测试配置 blend_test.yamlblend_test.yaml 是面向单元测试的微型快速配置仅cnn_dailymail一个源、blend_size: 200、关闭 shuffle 以加速构建可用于快速验证数据管线是否正确。十一、添加新数据集在 blend YAML 的sources下新增条目即可接入新数据集按数据形态分为三类示例见 blend_example.yamlsources: # Chat 数据集OpenAI messages 格式走 apply_chat_template - hf_path: your/dataset split: train ratio: 1000 # 会话字段不同的数据集自定义 chat_key全 token 参与训练 - hf_path: your/sharegpt-dataset split: train ratio: 500 chat_key: conversations train_only_assistant_tokens: false # 纯文本数据集预训练风格不做 chat template - hf_path: your/text-corpus split: train ratio: 500 apply_chat_template: false接入时注意三点其一ratio只决定相对权重实际样本数由ratio / Σratio × blend_size计算其二若希望单源内部再细分领域如同一数据集的不同 split 权重不同可对同一hf_path写多条 source 条目如blend.yaml中Nemotron-Science-v1的MCQ与RQA两条其三新增源后缓存键会随之变化首次运行时自动重建缓存。十二、常见问题与边界行为split 缺失或比例异常split是必填项缺失即报错splits与ratio的总和必须大于 0否则抛出ValueError见BlendConfig.__post_init__与_normalize_ratiosmask 不可用时的告警使用非 Qwen/Nemotron 家族模型且 chat template 不含{% generation %}时auto模式会告警并退化为全 token 训练true模式直接报错——若确实需要 assistant-only 标签应确认 tokenizer 是否支持原生 generation 掩码或 ChatML 格式空样本过滤分词后全部标签为IGNORE_INDEX的样本会被过滤如空消息日志中会报告丢弃数量dataset_utils.py缓存复用判定磁盘缓存需同时存在dataset_dict.json才视为有效_load_cached_datasetdataset_utils.py缓存目录为空或格式不完整时自动重建。综上Model-Optimizer 的 Dataset Blend 配置将多源数据混合、领域配比、Chat 标签策略与缓存管理统一收敛到一份 YAML 中配合dataset_utils.py的流式加载、分布式分片与确定性缓存设计为 QAT/QAD 训练提供了数据层面的一致性保障。赞分享人工智能大模型模型优化模型量化模型压缩【免费下载链接】Model-OptimizerA unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc. It compresses deep learning models for downstream deployment frameworks like TensorRT-LLM, TensorRT, vLLM, etc. to optimize inference speed.项目地址https://gitcode.com/GitHub_Trending/te/Model-Optimizer点击查看免费下载相关推荐MMPose 混合数据集训练实战CombinedDataset、KeypointConverter 与多源采样策略MMPose 混合数据集训练实战CombinedDataset、KeypointConverter 与多源采样策略 MMPose 通过 CombinedDat计算机视觉人工智能深度学习MMPose 混合数据集训练指南CombinedDataset 与多源采样策略深度解析MMPose 混合数据集训练指南CombinedDataset 与多源采样策略深度解析 MMPose 通过 CombinedDataset 封装器与 Keyp计算机视觉人工智能深度学习MMPose混合数据集训练指南高效融合COCO与AIC数据集MMPose混合数据集训练指南高效融合COCO与AIC数据集 混合数据集训练概述 在计算机视觉领域姿态估计模型的性能往往依赖于训练数据的多样性和规模。MMP计算机视觉人工智能深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

戴尔R7515实战:Debian 12.5下Mellanox网卡RoCE配置指南
戴尔R7515实战:Debian 12.5下Mellanox网卡RoCE配置指南

这台戴尔PowerEdge R7515在我机柜里待了快半年,最近终于腾出时间认真折腾——装Debian 12.5,再把Mellanox ConnectX-5网卡的驱动、固件和RoCE功能全部调通。我写这篇东西的初衷很简单:R7515是单路EPYC平台里性价比很能打的一台2U服务器&#… · 2026/9/26 22:23:35

金翔云ASP进销存本地部署实战指南
金翔云ASP进销存本地部署实战指南

简介:金翔云WEB进销存系统是一套面向中小企业管理者的轻量级云端进销存解决方案,聚焦库存、销售、采购、账务及基础权限管控等核心业务场景,帮助非IT背景用户快速实现业务数字化,降低本地部署与运维门槛。资源包共1841个文件&… · 2026/9/26 22:23:35

Kudu完全指南:免费开源系统清理器如何一次搞定Windows、macOS、Linux三大平台
Kudu完全指南:免费开源系统清理器如何一次搞定Windows、macOS、Linux三大平台

Kudu完全指南:免费开源系统清理器如何一次搞定Windows、macOS、Linux三大平台 【免费下载链接】kudu Free Windows, Mac and Linux cleaner, scanner, and more. 项目地址: https://gitcode.com/gh_mirrors/kudu1/kudu Kudu 是一款免费开源的系统清理器与安全… · 2026/9/26 22:23:28

通达信强龙战法:三重过滤识别主升浪买点
通达信强龙战法:三重过滤识别主升浪买点

1. 这套指标到底在解决什么问题?——从实盘痛点出发的真实需求“通达信强龙战法抄底先锋捕捉主升浪买点全套指标公式”,光看标题,很多人第一反应是“又一个万能战法”“是不是割韭菜的?”——我完全理解这种警惕。但作为连续十年盯… · 2026/9/26 22:51:06

50+营销Skill装进AI Agent:从Prompt到可调度技能单元
50+营销Skill装进AI Agent:从Prompt到可调度技能单元

1. 这个项目到底解决了什么问题第一次看到“把 50 多种营销 Skill 装进 AI Agent”这个说法,我脑子里冒出来的第一个念头是:又是一个把提示词打包成“技能库”的仓库吧。但真正把项目拉下来跑了一遍之后,我发现它想做的事情比“提示词合集”要… · 2026/9/26 22:51:05

Windows iTunes备份迁移:用mklink重定向C盘路径
Windows iTunes备份迁移:用mklink重定向C盘路径

1. 为什么 iTunes 备份会死死咬住 C 盘?——从 Apple 设计逻辑看路径锁定的底层原因你刚给 iPhone 做完一次完整备份,打开资源管理器一看:C:\Users\你的用户名\AppData\Roaming\Apple Computer\MobileSync\Backup 下,多出了一个 3… · 2026/9/26 22:50:57

深度学习人脸识别系统实战:检测、特征提取与比对的完整解析
深度学习人脸识别系统实战:检测、特征提取与比对的完整解析

简介:面向毕业设计与课程设计的深度学习人脸识别项目,融合卷积神经网络与YOLO检测思路,覆盖人脸检测、特征提取到身份识别的完整流程。资源共5个文件,包含主程序main.py、训练脚本train.py、人脸数据集dataset.zip、OpenCV的Haar级… · 2026/9/26 22:50:57

Atlas 300V 24G部署YOLO实战:从NPU选型到ONNX转OM全流程
Atlas 300V 24G部署YOLO实战:从NPU选型到ONNX转OM全流程

你可能已经注意到,“atlas”最近在AI推理圈的热度不低。尤其是“atlas部署yolo”和“atlas 300v 24g 是运算加速卡吗”这两个搜索词,背后是一群准备在服务器上搞目标检测部署的工程师。如果你也在纠结要不要选Atlas 300V 24G这张卡,或者已经插… · 2026/9/26 22:50:57

Linux用户删不掉组?groupdel报错与主组机制排查指南
Linux用户删不掉组?groupdel报错与主组机制排查指南

接手一台跑了两年多的服务器,最让人心里不舒服的状态不是服务挂掉,而是"删不干净":面板里点一下删除用户,转了两秒,弹出一行红字。user: failure on close: groupdel: cannot remove the primary group of u… · 2026/9/26 22:50:57

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

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

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码