Project Icon

dclm

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

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

DataComp-LM (DCLM)

目录

简介

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

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

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

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

提交流程

  • (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许可证。详细信息请参阅许可证文件。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号