ARTICLE DETAIL

资讯详情

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

DataFlex开发者指南:四步添加你自己的Selector、Mixer与Weighter教程

DataFlex开发者指南:四步添加你自己的Selector、Mixer与Weighter教程 DataFlex开发者指南四步添加你自己的Selector、Mixer与Weighter教程【免费下载链接】DataFlex可用于大模型训练时动态进行训练动态训练数据选择、领域比例调整及动态加权提升训练速度和性能与 LLaMA-Factory 无缝集成提供灵活强大的训练控制能力。项目地址: https://gitcode.com/OpenDCAI/DataFlexDataFlex 是一款面向大模型训练的开源框架让你在训练过程中动态进行训练数据选择、领域比例调整与样本动态加权与 LLaMA-Factory 无缝集成帮助提升训练速度和性能。本教程带你用四步完成自定义组件扩展继承基类 → 注册导入 → 配置参数 → 一键训练从零写出属于自己的数据调度策略。1️⃣ 为什么需要自定义组件大模型训练中喂什么数据、按什么比例喂、每条数据权重多大往往比换模型更影响效果。DataFlex 把数据调度拆成三大可插拔组件 组件解决的问题一句话定义Selector选择器训练数据选择每轮训练前从数据集里挑出最值得训练的样本Mixer混合器领域比例调整动态调整多个数据源/领域的采样比例Weighter加权器样本动态加权给每个样本分配不同损失权重难样本/高质量样本学得更狠DataFlex 内置了 Loss、LESS、DoReMi、ODM、TSDS 等业界主流策略但当你有自己独特的想法比如按领域难度自适应选样、用自定义打分函数调比例时只需实现一个基类 注册就能被训练器直接调用。2️⃣ 动手前5 分钟看懂架构运行dataflex-cli train config.yaml时DataFlex 会先通过运行时补丁接管 LLaMA-Factory 的参数、训练器与数据集加载器见 src/dataflex/cli.py再按你配置的train_type启动对应的 SelectTrainer / MixTrainer / WeightTrainer。所有组件都挂在一个中央注册表上src/dataflex/core/registry.pyREGISTRY.build(selector, name, runtimeruntime, cfgsel_params)build会自动做两件事这就是扩展机制的核心参数自动合并把你写在 YAML 里的cfg与运行时的runtime合并运行时参数优先签名自动过滤只把你类__init__声明过的参数传进去多余参数自动丢弃你完全不用手写参数解析。 结论你的组件类__init__里写了什么参数就能从配置里读到什么参数非常省心。3️⃣ 四步扩展以 Selector 为例以下四步对 Selector / Mixer / Weighter 完全通用只是基类和注册名不同。我们以最典型的选择器为主线配套参考官方示例 skills/how_to_add_algorithm.md。第 1 步创建实现文件在src/dataflex/train/selector/下新建my_selector.py继承抽象基类 base_selector.py 并用装饰器注册from dataflex.core.registry import register_selector from .base_selector import Selector register_selector(my_method) # ← 组件唯一名字 class MySelector(Selector): def __init__(self, dataset, accelerator, data_collator, cache_dir, my_param: float 0.5): super().__init__(dataset, accelerator, data_collator, cache_dir) self.my_param my_param # 自定义超参来自 components.yaml def select(self, model, step_id, num_samples, **kwargs): # 1. 只在主进程做选择逻辑避免多卡重复计算 if self.accelerator.is_main_process: selected list(range(min(num_samples, len(self.dataset)))) else: selected None # 2. 广播到所有进程保证分布式训练各卡样本一致 obj [selected] if dist.is_available() and dist.is_initialized(): dist.broadcast_object_list(obj, src0) selected obj[0] return selected 两个关键约定对比内置实现 random_selector.py 即可照抄模式选择类逻辑只跑在主进程随后用broadcast_object_list广播结果select()返回的是样本索引列表训练器会自动重建 dataloader。第 2 步注册导入在 src/dataflex/train/selector/init.py 末尾加一行让注册器加载你的模块from .my_selector import *第 3 步在 components.yaml 添加参数配置打开 src/dataflex/configs/components.yaml在selectors:下追加一个块。这就是第 1 步中my_param的供数口selectors: my_method: name: my_method params: cache_dir: ../dataflex_saves/my_method_output my_param: 0.8第 4 步写训练配置并运行新建一个训练 YAML参考 examples/train_lora/selectors/loss.yaml核心是 DataFlex 专属字段### DataFlex train_type: dynamic_select # 选择器用 dynamic_select component_name: my_method # 与注册名一致 warmup_step: 10 # 预热步数先随机训练再启动你的策略 update_step: 10 # 每多少步重新选择一次 update_times: 2 # 共更新几轮然后一条命令启动与原生 LLaMA-Factory 用法几乎一致dataflex-cli train examples/train_lora/selectors/my_method.yaml4️⃣ Mixer 与 Weighter 速查表同样是四步只换基类、方法名、train_type三个词 SelectorMixerWeighter基类文件base_selector.pybase_mixer.pybase_weighter.py注册装饰器register_selector(name)register_mixer(name)register_weighter(name)必须实现的方法select() → List[int]mix() → np.ndarray归一化比例向量get_weighted_loss() → 标量loss训练配置train_typedynamic_selectdynamic_mixdynamic_weight参考实现loss_selector.pyrandom_mixer.py、doremi_mixer.pyloss_weighter.py配置挂载点selectors:mixers:weighters:两个实用提示Mixer只需返回一个长度等于数据源数量、和为 1 的 numpy 数组mix()的kwargs里可拿到当前batch与domain_ids方便你按损失信号调比例多源数据加载由 mixed_proportion_manager.py 自动重建Weighter只需实现get_weighted_loss()前向、逐样本损失计算、分布式聚合、反向传播等整条training_step循环基类已代劳你拿到的是(B,)的逐样本损失向量。5️⃣ 常见坑与验证清单 ✅名字冲突注册表中同名组件会直接报错already registered起个独一无二的component_name参数传不进来检查 YAML 键名是否与__init__参数名完全一致含默认值多余键会被静默过滤多卡不一致Selector 忘记广播会导致各卡样本不一致务必保留主进程计算 broadcast骨架跑不起来先看日志[Dataflex]前缀的日志会打印每轮选择/比例/加权的关键值是调试第一现场。✅ 验证清单python -c import dataflex.train.selector无报错说明装饰器已执行启动训练后看到[YourComponent]的 step 日志warmup_step之后触发第一次select/mixloss 曲线正常下降。 参考资料官方扩展文档英文完整版skills/how_to_add_algorithm.md快速上手指南skills/how_to_use.md注册表核心实现src/dataflex/core/registry.py全部组件参数预设src/dataflex/configs/components.yaml示例配置选择器 examples/train_lora/selectors/、混合器 examples/train_lora/mixers/、加权器 examples/train_lora/weighters/训练器实现select_trainer.py、mix_trainer.py、weight_trainer.py四步走完你的自定义数据调度策略就能和内置组件一样用一行dataflex-cli train跑起来。把选数据这件事交给你的算法把训练交给 DataFlex 【免费下载链接】DataFlex可用于大模型训练时动态进行训练动态训练数据选择、领域比例调整及动态加权提升训练速度和性能与 LLaMA-Factory 无缝集成提供灵活强大的训练控制能力。项目地址: https://gitcode.com/OpenDCAI/DataFlex创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表