DataComp-LM (DCLM)是一个用于构建和训练具有多样化数据集的大型语言模型(LLMs)的综合框架。它提供了来自CommonCrawl的超过300T未经过滤的标记的标准语料库,基于open_lm框架的有效预训练方法,以及超过50项评估的广泛套件。该存储库提供了处理原始数据、分词、打乱、训练模型和评估其性能的工具和指南。
DCLM使研究人员能够在不同的计算规模上进行各种数据集构建策略的实验,从411M到7B参数模型。我们的基线实验表明,通过优化数据集设计,模型性能得到了显著提升。
DCLM已经促成了几个高质量数据集的创建,这些数据集在不同规模上表现良好,并且优于所有开放数据集。
提交流程:
(A) 参与者选择一个规模,较大的规模反映了更多的目标训练标记和/或模型参数。 最小规模是400m-1x,即400m参数模型进行计算最优训练(1x),最大规模是7B-2x,即7B参数模型使用计算最优所需标记量的两倍进行训练。
(B) 参与者过滤数据池(过滤赛道)或混合自己的数据(自带数据赛道)以创建数据集。
(C) 使用精选的数据集,参与者使用标准化的训练代码和特定规模的超参数训练语言模型,然后
(D) 在53个下游任务上进行评估,以判断数据集质量。
更多详细信息,请参阅我们的论文。
DCLM排行榜展示了在各种规模和数据集上训练的模型的性能。排行榜定期更新,包含来自社区的最新提交。
以下是我们的模型与7B规模下其他模型的比较。
模型 | 参数 | 标记 | 开放数据集? | CORE | MMLU | EXTENDED |
---|---|---|---|---|---|---|
开放权重,闭 源数据集 | ||||||
Llama2 | 7B | 2T | ✗ | 49.2 | 45.8 | 34.1 |
DeepSeek | 7B | 2T | ✗ | 50.7 | 48.5 | 35.3 |
Mistral-0.3 | 7B | ? | ✗ | 57.0 | 62.7 | 45.1 |
QWEN-2 | 7B | ? | ✗ | 57.5 | 71.9 | 50.5 |
Llama3 | 8B | 15T | ✗ | 57.6 | 66.2 | 46.3 |
Gemma | 8B | 6T | ✗ | 57.8 | 64.3 | 44.6 |
Phi-3 | 7B | ? | ✗ | 61.0 | 69.9 | 57.9 |
开放权重,开放数据集 | ||||||
Falcon | 7B | 1T | ✓ | 44.1 | 27.4 | 25.1 |
OLMo-1.7 | 7B | 2.1T | ✓ | 47.0 | 54.0 | 34.2 |
MAP-Neo | 7B | 4.5T | ✓ | 50.2 | 57.1 | 40.4 |
我们训练的模型 | ||||||
FineWeb edu | 7B | 0.14T | ✓ | 38.7 | 26.3 | 22.1 |
FineWeb edu | 7B | 0.28T | ✓ | 41.9 | 37.3 | 24.5 |
DCLM-BASELINE | 7B | 0.14T | ✓ | 44.1 | 38.3 | 25.0 |
DCLM-BASELINE | 7B | 0.28T | ✓ | 48.9 | 50.8 | 31.8 |
DCLM-BASELINE | 7B | 2.6T | ✓ | 57.1 | 63.7 | 45.4 |
要开始使用DCLM,请按照以下步骤操作:
git clone https://github.com/mlfoundations/DCLM.git cd DCLM
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
我们建议在DCLM中使用Python 3.10。
如果您要创建新的数据源:
如果您要选择原始数据源进行后续处理:
按照以下步骤处理原始数据:
定义一组处理步骤: 创建一个pipeline配置YAML文件,指定操作步骤。 参考我们的C4复现示例。 有关定义pipeline的更多详细信息,请参见此处。
设置Ray集群: 数据处理脚本依赖Ray进行分布式数据处理。此集群可以在单个节点上启动(用于小规模数据处理),也可以使用AWS EC2实例。
要启动本地集群,使用以下命令:
ray start --head --port 6379
要使用AWS EC2实例启动集群,使用以下命令:
ray up <your_cluster_config>
其中<your_cluster_config>
是根据您的具体用例而定的集群配置脚本。我们建议您查阅Ray文档,了解如何创建此配置文件的说明。
重要提示:使用EC2实例时,请确保在作业完成后关闭集群,以避免不必要的费用!
运行处理脚本: 对于本地集群,只需运行以下命令:
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>
监控和关闭:
您可以通过输出目录中的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中不使用这种形式的去重)。
处理完原始文本后,您应该将其转换为分词后的数据集并进行打乱以便训练:
设置Ray集群: 按照处理步骤中的相同方式设置Ray集群。
运行分词和打乱脚本:
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>
关闭: 按照处理步骤中的方式关闭Ray集群。
tokenize_shuffle.py
脚本会创建一个webdataset
格式的数据集,以及一个manifest.jsonl
文件。训练脚本需要这个文件,它包含了数据集每个分片中序列数量的信息。如果需要,也可以通过以下命令手动创建这个manifest文件:
python -m open_lm.utils.make_wds_manifest --data-dir <tokenized_data_dir>
使用分词后的数据集训练模型:
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-1x | 412M | 8.2B | 2.0e19 | 26 | 137B |
1B-1x | 1.4B | 28B | 2.4e20 | 240 | 1.64T |
1B-5x | 1.4B | 138B | 1.2e21 | 1200 | 8.20T |
7B-1x | 6.9B | 138B | 5.7e21 | 3700 | 7.85T |
7B-2x | 6.9B | 276B | 1.1e22 | 7300 | 15.7T |
使用以下方法评估训练好的模型:
python tools/eval_expdb.py --start_idx 0 --end_idx 3 --filters name=<过滤器> --prefix_replacement <前缀替换> --num_gpus 8 --output_dir <s3输出目录> --eval_yaml <评估yaml文件>
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
... --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 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号