DataFlex注册表系统详解:三步注册加载你的新数据调度算法

发布时间:2026/10/2 5:11:22
DataFlex注册表系统详解:三步注册加载你的新数据调度算法
DataFlex注册表系统详解三步注册加载你的新数据调度算法【免费下载链接】DataFlex可用于大模型训练时动态进行训练动态训练数据选择、领域比例调整及动态加权提升训练速度和性能与 LLaMA-Factory 无缝集成提供灵活强大的训练控制能力。项目地址: https://gitcode.com/OpenDCAI/DataFlexDataFlex 是一个用于大模型训练的动态数据调度工具支持训练数据选择、领域比例调整与动态加权并与 LLaMA-Factory 无缝集成。它的核心是一个轻量注册表系统所有算法组件Selector / Mixer / Weighter / Reorder都通过装饰器注册、按名称从 YAML 配置加载。本文带你 3 步注册并加载你自己的数据调度算法。DataFlex 注册表是什么注册表位于 registry.py本质上是一个「类型 → 名称 → 类」的两层字典REGISTRY Registry() def register_selector(name): return REGISTRY.register(selector, name) def register_mixer(name): return REGISTRY.register(mixer, name) def register_weighter(name): return REGISTRY.register(weighter, name) def register_reorder(name): return REGISTRY.register(reorder, name)它只做三件事方法作用register(kind, name)装饰器把类登记到指定类别重名会直接报错get(kind, name)按名称取回类build(kind, name, runtime, cfg)按名称实例化并自动裁剪参数build是新手最该关注的一点它会检查组件__init__的函数签名只传入类真正声明的参数多余的配置会被自动过滤——你不需要手写任何参数解析代码。三步注册你的新算法以 Selector 为例完整的官方扩展指南见 how_to_add_algorithm.md核心流程如下。第一步继承基类并加装饰器新建一个文件如src/dataflex/train/selector/my_selector.py继承 base_selector.py 中的Selector基类并用装饰器注册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_param0.5): super().__init__(dataset, accelerator, data_collator, cache_dir) self.my_param my_param def select(self, model, step_id: int, num_samples: int, **kwargs): # 在此实现你的选样逻辑返回样本索引列表 return list(range(num_samples)) 基类已提供warmup随机预热采样、候选池管理等能力子类只需实现select一个抽象方法。第二步注册导入在 selector/init.py 中加一行导入让注册表能看到你的类from .my_selector import *Mixer、Weighter、Reorder 同理分别在对应的train/mixer/、train/weighter/、train/reorder/包中导入即可。第三步在 components.yaml 中加一段配置打开 components.yaml在selectors:分组下添加你的组件与默认参数selectors: my_method: name: my_method params: my_param: 0.8 cache_dir: ../dataflex_saves/my_method_output训练时如何按名称加载组件训练配置中只需写三个字段train_type: dynamic_select components_cfg_file: src/dataflex/configs/components.yaml component_name: my_method对应的 Trainer如 select_trainer.py会按流程完成加载load_component读取 components.yaml 中my_method的参数load_component.py调用REGISTRY.build(selector, my_method, runtime..., cfg...)拿到组件实例运行时参数dataset、accelerator 等优先于 YAML 参数缺失项自动补齐。之后 Trainer 会在 warmup 之后、每隔update_step步自动调用你的select()/mix()/get_weighted_loss()无需额外代码。相关文件速查表用途路径注册表核心实现registry.pySelector 基类base_selector.pyMixer / Weighter 基类base_mixer.py / base_weighter.py组件默认参数components.yaml训练配置示例coincide.yaml、random.yaml完整扩展教程how_to_add_algorithm.md常见问题Q为什么注册后component_name找不到组件A多半是第二步漏了导入——装饰器只在模块被导入时才执行务必确认对应包的__init__.py已引用你的文件。Q我的组件参数和 Trainer 传入的参数冲突了Abuild中运行时参数runtime优先于 YAML 参数cfg这是刻意设计保证训练状态实时生效。Q注册表会重复注册报错吗A会。同名重复注册会抛出ValueError方便你在开发阶段尽早发现命名冲突。掌握这套「装饰器注册 → 包内导入 → YAML 配置」三步流程后你就可以像插件一样持续向 DataFlex 扩展自己的数据调度策略了。✅【免费下载链接】DataFlex可用于大模型训练时动态进行训练动态训练数据选择、领域比例调整及动态加权提升训练速度和性能与 LLaMA-Factory 无缝集成提供灵活强大的训练控制能力。项目地址: https://gitcode.com/OpenDCAI/DataFlex创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考