dclm

dclm

大型语言模型训练与评估的开源综合框架

DataComp-LM是一个开源的大型语言模型训练和评估框架。它提供了超过300T的CommonCrawl标准语料库、基于open_lm的预训练方案和50多项评估指标。研究人员可利用该框架在411M至7B参数规模下进行数据集构建实验。通过数据集优化,DataComp-LM已显著提升了模型性能,创建了多个跨规模表现优异的高质量数据集。

DataComp-LM大语言模型数据处理模型训练评估Github开源项目

DataComp-LM (DCLM)

目录

简介

DataComp-LM (DCLM)是一个用于构建和训练具有多样化数据集的大型语言模型(LLMs)的综合框架。它提供了来自CommonCrawl的超过300T未经过滤的标记的标准语料库,基于open_lm框架的有效预训练方法,以及超过50项评估的广泛套件。该存储库提供了处理原始数据、分词、打乱、训练模型和评估其性能的工具和指南。

DCLM使研究人员能够在不同的计算规模上进行各种数据集构建策略的实验,从411M到7B参数模型。我们的基线实验表明,通过优化数据集设计,模型性能得到了显著提升。

DCLM已经促成了几个高质量数据集的创建,这些数据集在不同规模上表现良好,并且优于所有开放数据集。 准确率与计算资源权衡

<p align="center"> <em><b>开发更好的数据集以训练更经济的模型。</b> 使用DataComp-LM,我们开发了一个高质量的数据集DCLM-BASELINE,用于训练具有强大计算性能权衡的模型。我们在核心任务集(左)和MMLU 5-shot(右)上进行比较。DCLM-BASELINE(橙色)相对于闭源模型(十字)和其他开源数据集和模型(圆圈)显示出有利的性能。</em> </p>

提交流程

  • (A) 参与者选择一个规模,较大的规模反映了更多的目标训练标记和/或模型参数。 最小规模是400m-1x,即400m参数模型进行计算最优训练(1x),最大规模是7B-2x,即7B参数模型使用计算最优所需标记量的两倍进行训练。

  • (B) 参与者过滤数据池(过滤赛道)或混合自己的数据(自带数据赛道)以创建数据集。

  • (C) 使用精选的数据集,参与者使用标准化的训练代码和特定规模的超参数训练语言模型,然后

  • (D) 在53个下游任务上进行评估,以判断数据集质量。 工作流程

更多详细信息,请参阅我们的论文

排行榜

DCLM排行榜展示了在各种规模和数据集上训练的模型的性能。排行榜定期更新,包含来自社区的最新提交。

以下是我们的模型与7B规模下其他模型的比较。

模型参数标记开放数据集?COREMMLUEXTENDED
开放权重,闭源数据集
Llama27B2T49.245.834.1
DeepSeek7B2T50.748.535.3
Mistral-0.37B?57.062.745.1
QWEN-27B?57.571.950.5
Llama38B15T57.666.246.3
Gemma8B6T57.864.344.6
Phi-37B?61.069.957.9
开放权重,开放数据集
Falcon7B1T44.127.425.1
OLMo-1.77B2.1T47.054.034.2
MAP-Neo7B4.5T50.257.140.4
我们训练的模型
FineWeb edu7B0.14T38.726.322.1
FineWeb edu7B0.28T41.937.324.5
DCLM-BASELINE7B0.14T44.138.325.0
DCLM-BASELINE7B0.28T48.950.831.8
DCLM-BASELINE7B2.6T57.163.745.4

入门指南

要开始使用DCLM,请按照以下步骤操作:

  1. 克隆存储库
    git clone https://github.com/mlfoundations/DCLM.git cd DCLM
  2. 安装依赖项
pip install -r requirements.txt

安装依赖项之前,请确保已安装cmake、build-essential和g++,例如通过以下命令安装:

apt install cmake build-essential apt install g++-9 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90
  1. 设置环境: DCLM使用AWS进行存储和可能的计算后端,以及使用ray进行分布式处理。 确保您已设置好AWS和Ray集群所需的环境变量和配置。

我们建议在DCLM中使用Python 3.10。

选择原始数据源

如果您要创建新的数据源:

如果您要选择原始数据源进行后续处理:

  • 确定您打算使用的原始数据源,它对应于一个数据集参考(即raw_sources中的JSON文件)。
  • 参考JSON包含实际数据的URL和其他元数据,用作后续处理的输入。

处理数据

按照以下步骤处理原始数据:

  1. 定义一组处理步骤: 创建一个pipeline配置YAML文件,指定操作步骤。 参考我们的C4复现示例。 有关定义pipeline的更多详细信息,请参见此处

  2. 设置Ray集群: 数据处理脚本依赖Ray进行分布式数据处理。此集群可以在单个节点上启动(用于小规模数据处理),也可以使用AWS EC2实例。

    要启动本地集群,使用以下命令:

    ray start --head --port 6379

    要使用AWS EC2实例启动集群,使用以下命令:

    ray up <your_cluster_config>

    其中<your_cluster_config>是根据您的具体用例而定的集群配置脚本。我们建议您查阅Ray文档,了解如何创建此配置文件的说明。

    重要提示:使用EC2实例时,请确保在作业完成后关闭集群,以避免不必要的费用!

  3. 运行处理脚本: 对于本地集群,只需运行以下命令:

    python3 ray_processing/process.py --source_ref_paths <source_json> --readable_name <name> --output_dir <s3_output_dir> --config_path <config_yaml> --source_name <source_name>

    使用EC2实例时,需要连接到集群,然后运行命令:

    # 在本地终端中 ray attach <your_cluster_config> # 在集群EC2实例内 cd dcnlp export PYTHONPATH=$(pwd) python3 ray_processing/process.py --source_ref_paths <source_json> --readable_name <name> --output_dir <s3_output_dir> --config_path <config_yaml> --source_name <source_name>
  4. 监控和关闭: 您可以通过输出目录中的global_stats.jsonl文件跟踪数据处理进度。作业完成后,可以通过ray stop(本地集群情况)或ray down <your_cluster_config>(AWS EC2情况)关闭集群。使用EC2时,这一步非常重要,以避免产生额外费用!

去重

要像我们在DCLM-Baseline中那样对原始文本进行去重,请使用dedup子目录中提供的工具。这里我们包含了几个用于去重的rust工具,但我们推荐使用位于dedup/bff的BFF。每个包含rust工具的目录中的readme文件中都有运行去重的具体说明。

请注意,dedup中的代码特指跨文档模糊去重,即识别语料库中文档之间的近似重复。用于识别精确内容和URL重复的Ray工具包含在ray_processing/dedup_jsonl.py中(但我们在DCLM-Baseline中不使用这种形式的去重)。

分词和打乱

处理完原始文本后,您应该将其转换为分词后的数据集并进行打乱以便训练:

  1. 设置Ray集群: 按照处理步骤中的相同方式设置Ray集群。

  2. 运行分词和打乱脚本

    python ray_processing/tokenize_shuffle.py --source_ref_paths <source_jsons> --readable_name <name> --output <s3_output_dir> --content_key text --do_sample --default_dataset_yaml <mixing_yaml>
  3. 关闭: 按照处理步骤中的方式关闭Ray集群。

tokenize_shuffle.py脚本会创建一个webdataset格式的数据集,以及一个manifest.jsonl文件。训练脚本需要这个文件,它包含了数据集每个分片中序列数量的信息。如果需要,也可以通过以下命令手动创建这个manifest文件:

python -m open_lm.utils.make_wds_manifest --data-dir <tokenized_data_dir>

模型训练

使用分词后的数据集训练模型:

  1. 运行训练脚本
    torchrun --nproc-per-node 8 -m training.train --scale <scale> <tokenized_json> --logs <log_dir> [--remote-sync <s3_bucket>] [--chinchilla-multiplier <multiplier>] [--clean-exp] [--report-to-wandb]

您可以预期每个轨道的训练时间如下:

规模模型参数训练token数训练FLOPs训练H100小时池大小
400M-1x412M8.2B2.0e1926137B
1B-1x1.4B28B2.4e202401.64T
1B-5x1.4B138B1.2e2112008.20T
7B-1x6.9B138B5.7e2137007.85T
7B-2x6.9B276B1.1e22730015.7T
  1. 监控和管理训练任务: 使用slurm sbatch脚本或Sagemaker在各种计算基础设施上运行实验。

评估

使用以下方法评估训练好的模型:

  1. 首选方法:
python tools/eval_expdb.py --start_idx 0 --end_idx 3 --filters name=<过滤器> --prefix_replacement <前缀替换> --num_gpus 8 --output_dir <s3输出目录> --eval_yaml <评估yaml文件>
  1. 直接评估:
torchrun --nproc_per_node <GPU数量> eval/eval_openlm_ckpt.py --checkpoint <检查点> --eval-yaml <评估yaml文件> --config <模型参数文件> --model <open_lm配置> --output-file <输出文件路径>

提交

当你完成模型训练和评估后,一个模型评估json文件会被生成并保存在exp_data/evals目录下。 现在你可以向主仓库提交一个拉取请求,与团队分享你的结果并将其提交到排行榜。

贡献

我们欢迎对DCLM框架的改进贡献。请遵循我们的贡献指南来提交拉取请求和报告问题。

模型微调

使用OpenLM库,也可以对用DCLM训练的模型进行微调。具体步骤如下:

  • 首先,创建输入数据为jsonl文件,每行是一个包含两个字段的样本:"instruction"和"response"(所以jsonl文件的每一行至少包含一个形如{"instruction": "示例指令", "response": "示例回答"}的json对象)。对于OpenMathInstruct数据集的示例可以通过以下命令运行:
cd finetuning/ python download_data.py
  • 之后,假设你的数据在finetuning/sft_data/目录下,运行以下命令将数据处理成OpenLM期望的格式:
python preprocess_data.py --input-files "./sft_data/**/*" --output-dir ./sft_data_tokenized/ --num-workers 1 --num-consumers 1 python -m open_lm.utils.make_wds_manifest --data-dir ./sft_data_tokenized/2048-v1/0 --tmp-dir tmp --num-workers 16
  • 最后,你可以通过使用OpenLM来微调模型,在OpenLM训练命令中包含以下参数:
... --squash-mask-left \ --target-mask-individual 50400 \ --target-mask-left 50300 \ ...

完整命令示例如下:

git clone https://github.com/mlfoundations/open_lm.git cd open_lm torchrun <其他torchrun选项> open_lm/main.py \ --dataset-manifest ../sft_data_tokenized/manifest.jsonl \ --epochs 20 \ --fsdp \ --fsdp-amp \ --fsdp-limit-all-gathers \ --global-batch-size 1024 \ --grad-checkpointing \ --grad-clip-norm 1 \ --log-every-n-steps 100 \ --logs <日志路径> \ --lr 2e-05 \ --lr-cooldown-end 5e-06 \ --model training/open_lm_configs/open_lm_1b_swiglutorch.json \ --model-norm gain_only_lp_layer_norm \ --multiple-data-passes \ --name <实验名称> \ --precision amp_bfloat16 \ --pretrained <预训练检查点路径> \ --qk-norm \ --report-to wandb \ --seed 124 \ --squash-mask-left \ --target-mask-individual 50400 \ --target-mask-left 50300 \ --train-num-samples <每个epoch的训练token数> \ --warmup 1738 \ --wd 0.1 \ --workers 1

如何引用我们

如果你在研究中使用了我们的数据集或模型,请按以下方式引用我们:

@article{li2024datacomplm, title={DataComp-LM: In search of the next generation of training sets for language models}, author={Jeffrey Li and Alex Fang and Georgios Smyrnis and Maor Ivgi and Matt Jordan and Samir Gadre and Hritik Bansal and Etash Guha and Sedrick Keh and Kushal Arora and Saurabh Garg and Rui Xin and Niklas Muennighoff and Reinhard Heckel and Jean Mercat and Mayee Chen and Suchin Gururangan and Mitchell Wortsman and Alon Albalak and Yonatan Bitton and Marianna Nezhurina and Amro Abbas and Cheng-Yu Hsieh and Dhruba Ghosh and Josh Gardner and Maciej Kilian and Hanlin Zhang and Rulin Shao and Sarah Pratt and Sunny Sanyal and Gabriel Ilharco and Giannis Daras and Kalyani Marathe and Aaron Gokaslan and Jieyu Zhang and Khyathi Chandu and Thao Nguyen and Igor Vasiljevic and Sham Kakade and Shuran Song and Sujay Sanghavi and Fartash Faghri and Sewoong Oh and Luke Zettlemoyer and Kyle Lo and Alaaeldin El-Nouby and Hadi Pouransari and Alexander Toshev and Stephanie Wang and Dirk Groeneveld and Luca Soldaini and Pang Wei Koh and Jenia Jitsev and Thomas Kollar and Alexandros G. Dimakis and Yair Carmon and Achal Dave and Ludwig Schmidt and Vaishaal Shankar}, year={2024}, journal={arXiv preprint arXiv:2406.11794} }

在使用DCLM评估套件时,请确保引用所有原始评估论文。evaluation_bibtex

在使用DCLM进行训练时,请确保也引用主要的训练框架依赖。training_bibtex

许可证

本项目采用MIT许可证。详细信息请参阅许可证文件。

编辑推荐精选

讯飞智文

讯飞智文

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

下拉加载更多