doremi

doremi

创新算法提升语言模型训练效率

DoReMi是一种优化语言模型数据集混合的算法。它通过分布鲁棒优化调整数据混合,适应不同目标分布。算法训练小型代理模型动态调整各领域数据权重,并利用预训练参考模型避免对高熵领域过于悲观。DoReMi显著提高大型模型训练效率,如280M代理模型可使8B参数模型达到基线性能的速度提高2.6倍。项目提供PyTorch实现,包含快速可恢复的数据加载器和下游评估工具。

DoReMi语言模型数据混合优化分布鲁棒优化代理模型Github开源项目

DoReMi🎶:基于极小极大优化的领域重新加权

许可证:MIT arXiv

DoReMi的PyTorch实现,这是一种用于优化语言建模数据集数据混合的算法。现代大型语言模型在多个领域(网络、书籍、arXiv等)上进行训练,但每个领域应该训练多少并不清楚,特别是考虑到这些模型将用于各种下游任务(没有特定的目标分布可供优化)。DoReMi使用分布鲁棒优化(DRO)调整数据混合,以对目标分布保持鲁棒性。DoReMi使用DRO训练一个小型代理模型,根据代理模型相对于预训练参考模型的超额损失动态上调或下调领域权重。参考模型提供了可达到的最佳损失估计,以避免对高熵/困难领域过于悲观。调整后的数据混合可以更高效地用于训练更大的模型。在论文中,280M代理模型可以改善8B参数模型(大30倍)的训练,使其能够以2.6倍的速度达到基线8B性能。下图概述了DoReMi。更多详情请查看论文

作为一个黑盒,这个代码库输出给定文本数据集的优化领域权重。其他一些有用的组件包括:快速、可恢复的数据加载器,支持领域级加权采样,简单的下游评估工具,以及HuggingFace Trainer + FlashAttention2集成。

DoReMi高层概述

入门

要开始使用,请克隆仓库并安装:

git clone git@github.com:/sangmichaelxie/doremi.git
pip install -e doremi
cd doremi && bash scripts/setup_flash.sh

scripts/setup_flash.sh中的编译可能需要相当长的时间(数小时)。所有代码应在最外层的doremi目录中运行。 开始之前,请在本仓库的外层目录中的constants.sh文件中写入缓存目录、数据目录等的路径。你也可以在这里放置任何conda或virtualenv激活命令。以下是constants.sh文件内容的示例(提供了一个名为sample_constants.sh的文件):

#!/bin/bash
CACHE=/path/to/cache
DOREMI_DIR=/path/to/this/repo
PILE_DIR=/path/to/pile
PREPROCESSED_PILE_DIR=/path/to/preprocessed  # 将由scripts/run_preprocess_pile.sh创建
MODEL_OUTPUT_DIR=/path/to/model_output_dir
WANDB_API_KEY=key  # Weights and Biases日志记录的密钥
PARTITION=partition # 用于slurm
mkdir -p ${CACHE}
mkdir -p ${MODEL_OUTPUT_DIR}
source ${DOREMI_DIR}/venv/bin/activate  # 如果你在venv中安装了doremi

以下是如何运行The Pile数据预处理的示例脚本,该脚本将Pile数据分离成不同领域并进行标记化:

bash scripts/run_preprocess_pile.sh

这是一个运行120M基线、代理和主模型(DoReMi管道中的所有3个步骤)的示例脚本,在一个具有8个A100 GPU的节点上测试。这是论文中Pile实验的小型版本。该脚本将自动运行困惑度和少样本评估:

bash scripts/run_pile.sh

这些脚本运行200k步,遵循论文。DoReMi运行在configs目录中输出域权重,文件名为<RUN_NAME>.json

在自己的数据集上运行DoReMi

要在自己的数据集上运行DoReMi,请提供以下格式的预处理(标记化)数据:

top_level/
    domain_name_1/
        files...
    domain_name_2/
        files...
    ...

其中每个内部目录(例如,domain_name_1)可以通过HuggingFace的load_from_disk方法加载。如果你的数据采用不同格式,可以在doremi/dataloader.py中添加自定义数据加载函数。 你还需要编写一个配置文件并将其保存到configs/,并编写类似于scripts/runs/run_pile_baseline120M.shscripts/runs/run_pile_doremi120M.sh的运行脚本,这些脚本引用配置文件。配置文件指定了从域名到混合权重的映射。名称不必按顺序(DoReMi总是首先对域名进行排序以确定固定顺序),权重也不必归一化。

提示和细节

  • 参考领域权重的选择:一般来说,参考领域权重是表达对领域重要性先验的一种方式。一个合理的默认设置是根据每个领域的大小来设置参考模型的领域权重,这确保了小领域不会被过度表示(并被过拟合)。如果某些领域特别重要,你当然可以增加其相应的参考领域权重。均匀领域权重可以用作参考领域权重,以避免对领域权重施加任何先验,但可能需要迭代DoReMi(见下文)。

  • 迭代DoReMi:在某些情况下,你可能需要运行多轮DoReMi。要运行迭代DoReMi,我们使用上一轮优化后的领域权重来训练新的参考模型。这在你从次优参考领域权重(如均匀权重)开始时特别有帮助,因为使用这些权重训练的参考模型也会是次优的。

  • 领域权重的更新率(--reweight_eps:论文中使用的默认设置是1,尽管这可能需要针对不同的数据集进行调整。通常,我们预期训练过程中的领域权重会有些噪声,而平均领域权重则大多平滑。

  • 分词器的选择:我们发现较新的分词器(如NeoX)在较小规模上往往能提供更好的模型性能,因此我们建议使用这些而不是像GPT2这样的旧分词器。

  • 在领域子集上运行:默认的数据集加载代码只会加载配置文件中列出的领域。通过从配置文件中删除领域,可以实现在领域子集上运行。

  • 梯度累积:梯度累积应该可以工作,初步测试中,其行为与无累积场景类似。然而,目前在这个实现中使用累积与无累积并不完全等价。如果我们累积k步的梯度,将有k-1个梯度是根据上一迭代的旧领域权重计算的(这个问题在k=1时不存在)。

  • 多节点训练:我们目前不支持多节点训练,主要关注单节点、多GPU设置。

请注意,此仓库与在谷歌开发的论文之间存在一些差异,即:

  • PyTorch vs JAX
  • 模型架构的细微差异
  • 使用的分词器(论文中使用256k词汇量,而标准开源分词器约为50k词汇量)。这可能会显著影响按令牌数计算的数据混合。 为获得最佳结果,你应该在自己的特定训练设置中运行DoReMi。

样本运行结果

以下是在The Pile上使用120M代理和参考模型进行一轮DoReMi的结果(使用scripts/run_pile.sh)。我们使用优化后的权重(configs/pile_doremi_r1_120M_ref:pile_baseline_50kvocab_nopack_120M.json)训练一个120M模型,并将其与基线(灰色)进行比较。两个基线代表在Pile中计算基线领域权重的两种略有不同的方法(nopack在将每个文档填充到上下文窗口长度后计算每个领域的示例数,而pack首先在一个领域内连接文档),这两种方法产生的模型性能相似。使用DoReMi领域权重训练的模型在训练早期,在所有任务中都很快超过了基线的一次性性能,仅在70k步内(快3倍)。DoReMi模型在20k步内就超过了平均基线一次性性能,在22个领域中有15个领域的困惑度得到改善或相当,并改善了跨领域的均匀平均和最差情况困惑度。

<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/342edcd2-f9b7-425b-ac15-4b8b1976e006.png" width="60%">

引用

如果这对你有用,请引用论文

@article{xie2023doremi,
  author = {Sang Michael Xie and Hieu Pham and Xuanyi Dong and Nan Du and Hanxiao Liu and Yifeng Lu and Percy Liang and Quoc V. Le and Tengyu Ma and Adams Wei Yu},
  journal = {arXiv preprint arXiv:2305.10429},
  title = {DoReMi: Optimizing Data Mixtures Speeds Up Language Model Pretraining},
  year = {2023},
}

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多