[English Page] | [文档] | [API] | [DJ-SORA]
Data-Juicer 是一个一站式多模态数据处理系统,旨在为大语言模型 (LLM) 提供更高质量、更丰富、更易“消化”的数据。
Data-Juicer(包含DJ-SORA)正在积极更新和维护中,我们将定期强化和新增更多的功能和数据菜谱。热烈欢迎您加入我们,一起推进LLM数据的开发和研究!
如果Data-Juicer对您的研发有帮助,请引用我们的工作 。
欢迎加入我们的Slack频道 ,钉钉群 ,或微信群(扫描下方二维码加入)进行讨论。
- [2024-03-07] 我们现在发布了 Data-Juicer v0.2.0! 在这个新版本中,我们支持了更多的 多模态数据(包括视频) 相关特性。我们还启动了 DJ-SORA ,为SORA-like大模型构建开放的大规模高质量数据集!
- [2024-02-20] 我们在积极维护一份关于LLM-Data的精选列表,欢迎访问并参与贡献!
- [2024-02-05] 我们的论文被SIGMOD'24 industrial track接收!
- [2024-01-10] 开启“数据混合”新视界——第二届Data-Juicer大模型数据挑战赛已经正式启动!立即访问竞赛官网,了解赛事详情。
-[2024-01-05] 现在,我们发布了 Data-Juicer v0.1.3 版本! 在这个新版本中,我们支持了更多Python版本(3.8-3.10),同时支持了多模态数据集的转换和处理(包括文本、图像和音频。更多模态也将会在之后支持)。 此外,我们的论文也更新到了第三版 。
-
[2023-10-13] 我们的第一届以数据为中心的 LLM 竞赛开始了! 请访问大赛官网,FT-Data Ranker(1B赛道 、7B赛道 ) ,了解更多信息。
-
[2023-10-8] 我们的论文更新至第二版,并发布了对应的Data-Juicer v0.1.2版本!
-
系统化 & 可复用:为用户提供系统化且可复用的80+核心算子,20+配置菜谱和20+专用工具池,旨在让数据处理独立于特定的大语言模型数据集和处理流水线。
-
数据反馈回路:支持详细的数据分析,并提供自动报告生成功能,使您深入了解您的数据集。结合多维度自动评估功能,支持在 LLM 开发过程的多个阶段进行及时反馈循环。
-
全面的数据处理菜谱:为pre-training、fine-tuning、中英文等场景提供数十种预构建的数据处理菜谱。 在LLaMA、LLaVA等模型上有效验证。
-
灵活 & 易扩展:支持大多数数据格式(如jsonl、parquet、csv等),并允许灵活组合算子。支持自定义算子,以执行定制化的数据处理。
- Data-Juicer 介绍 [ModelScope] [HuggingFace]
- 数据可视化:
- 基础指标统计 [ModelScope] [HuggingFace]
- 词汇多样性 [ModelScope] [HuggingFace]
- 算子洞察(单OP) [ModelScope] [HuggingFace]
- 算子效果(多OP) [ModelScope] [HuggingFace]
- 数据处理:
- 科学文献 (例如 arXiv) [ModelScope] [HuggingFace]
- 编程代码 (例如 TheStack) [ModelScope] [HuggingFace]
- 中文指令数据 (例如 Alpaca-CoT) [ModelScope] [HuggingFace]
- 工具池:
- 按语言分割数据集 [ModelScope] [HuggingFace]
- CommonCrawl 质量分类器 [ModelScope] [HuggingFace]
- 基于 HELM 的自动评测 [ModelScope] [HuggingFace]
- 数据采样及混合 [ModelScope] [HuggingFace]
- 数据处理回路 [ModelScope] [HuggingFace]
- 推荐 Python>=3.8,<=3.10
- gcc >= 5 (at least C++14 support)
- 运行以下命令以安装
data_juicer
可编辑模式的最新基础版本
cd <path_to_data_juicer>
pip install -v -e .
- 部分算子功能依赖于较大的或者平台兼容性不是很好的第三方库,因此用户可按需额外安装可选的依赖项:
cd <path_to_data_juicer>
pip install -v -e . # 安装最小依赖,支持基础功能
pip install -v -e .[tools] # 安装部分工具库的依赖
依赖选项如下表所示:
标签 | 描述 |
---|---|
. 或者 .[mini] |
安装支持 Data-Juicer 基础功能的最小依赖项 |
.[all] |
安装所有可选依赖项(包括最小依赖项以及下面所有依赖项) |
.[sci] |
安装所有算子的全量依赖 |
.[dist] |
安装以分布式方式进行数据处理的依赖(实验性功能) |
.[dev] |
安装作为贡献者开发 Data-Juicer 所需的依赖项 |
.[tools] |
安装专用工具库(如质量分类器)所需的依赖项 |
- 运行以下命令用
pip
安装data_juicer
的最新发布版本:
pip install py-data-juicer
- 注意:
- 您可以选择
-
从DockerHub直接拉取我们的预置镜像:
docker pull datajuicer/data-juicer:<version_tag>
-
或者运行如下命令用我们提供的 Dockerfile 来构建包括最新版本的
data-juicer
的 docker 镜像:docker build -t datajuicer/data-juicer:<version_tag> .
-
import data_juicer as dj
print(dj.__version__)
- 以配置文件路径作为参数来运行
process_data.py
或者dj-process
命令行工具来处理数据集。
# 适用于从源码安装
python tools/process_data.py --config configs/demo/process.yaml
# 使用命令行工具
dj-process --config configs/demo/process.yaml
- 注意:使用未保存在本地的第三方模型或资源的算子第一次运行可能会很慢,因为这些算子需要将相应的资源下载到缓存目录中。默认的下载缓存目录为
~/.cache/data_juicer
。您可通过设置 shell 环境变量DATA_JUICER_CACHE_HOME
更改缓存目录位置,您也可以通过同样的方式更改DATA_JUICER_MODELS_CACHE
或DATA_JUICER_ASSETS_CACHE
来分别修改模型缓存或资源缓存目录:
# 缓存主目录
export DATA_JUICER_CACHE_HOME="/path/to/another/directory"
# 模型缓存目录
export DATA_JUICER_MODELS_CACHE="/path/to/another/directory/models"
# 资源缓存目录
export DATA_JUICER_ASSETS_CACHE="/path/to/another/directory/assets"
现在基于RAY对多机分布式的数据处理进行了实现。 对应Demo可以通过如下命令运行:
# 运行文字数据处理
python tools/process_data.py --config ./demos/process_on_ray/configs/demo.yaml
# 运行视频数据处理
python tools/process_data.py --config ./demos/process_video_on_ray/configs/demo.yaml
-
如果需要在多机上使用RAY运行多模态数据处理,需要确保各分布式节点可以访问对应的数据路径,将对应的数据路径挂载在文件共享系统(如NAS)中
-
用户也可以不使用RAY,拆分数据集后使用Slurm/DLC在集群上运行
- 以配置文件路径为参数运行
analyze_data.py
或者dj-analyze
命令行工具来分析数据集。
# 适用于从源码安装
python tools/analyze_data.py --config configs/demo/analyser.yaml
# 使用命令行工具
dj-analyze --config configs/demo/analyser.yaml
- 注意:Analyser 只计算 Filter 算子的状态,其他的算子(例如 Mapper 和 Deduplicator)会在分析过程中被忽略。
- 运行
app.py
来在浏览器中可视化您的数据集。 - 注意:只可用于从源码安装的方法。
streamlit run app.py
- 配置文件包含一系列全局参数和用于数据处理的算子列表。您需要设置:
- 全局参数:输入/输出 数据集路径,worker 进程数量等。
- 算子列表:列出用于处理数据集的算子及其参数。
- 您可以通过如下方式构建自己的配置文件:
- ➖:修改我们的样例配置文件
config_all.yaml
。该文件包含了所有算子以及算子对应的默认参数。您只需要移除不需要的算子并重新设置部分算子的参数即可。 - ➕:从头开始构建自己的配置文件。您可以参考我们提供的样例配置文件
config_all.yaml
,算子文档,以及 开发者指南. - 除了使用 yaml 文件外,您还可以在命令行上指定一个或多个参数,这些参数将覆盖 yaml 文件中的值。
- ➖:修改我们的样例配置文件
python xxx.py --config configs/demo/process.yaml --language_id_score_filter.lang=en
- 我们的 Formatter 目前支持一些常见的输入数据集格式:
- 单个文件中包含多个样本:jsonl/json、parquet、csv/tsv 等。
- 单个文件中包含单个样本:txt、code、docx、pdf 等。
- 但来自不同源的数据是复杂和多样化的,例如:
- 从 S3 下载的 arXiv 原始数据 包括数千个 tar 文件以及更多的 gzip 文件,并且所需的 tex 文件在 gzip 文件中,很难直接获取。
- 一些爬取的数据包含不同类型的文件(pdf、html、docx 等),并且很难提取额外的信息,例如表格、图表等。
- Data-Juicer 不可能处理所有类型的数据,欢迎提 Issues/PRs,贡献对新数据类型的处理能力!
- 因此我们在
tools/preprocess
中提供了一些常见的预处理工具,用于预处理这些类型各异的数据。- 欢迎您为社区贡献新的预处理工具。
- 我们强烈建议将复杂的数据预处理为 jsonl 或 parquet 文件。
- 如果您构建或者拉取了
data-juicer
的 docker 镜像,您可以使用这个 docker 镜像来运行上面提到的这些命令或者工具。 - 直接运行:
# 直接运行数据处理
docker run --rm \ # 在处理结束后将容器移除
--name dj \ # 容器名称
-v <host_data_path>:<image_data_path> \ # 将本地的数据或者配置目录挂载到容器中
-v ~/.cache/:/root/.cache/ \ # 将 cache 目录挂载到容器以复用 cache 和模型资源(推荐)
datajuicer/data-juicer:<version_tag> \ # 运行的镜像
dj-process --config /path/to/config.yaml # 类似的数据处理命令
- 或者您可以进入正在运行的容器,然后在可编辑模式下运行命令:
# 启动容器
docker run -dit \ # 在后台启动容器
--rm \
--name dj \
-v <host_data_path>:<image_data_path> \
-v ~/.cache/:/root/.cache/ \
datajuicer/data-juicer:latest /bin/bash
# 进入这个容器,然后您可以在编辑模式下使用 data-juicer
docker exec -it <container_id> bash
Data-Juicer 在 Apache License 2.0 协议下发布。
大模型是一个高速发展的领域,我们非常欢迎贡献新功能、修复漏洞以及文档改善。请参考开发者指南。
如果您有任何问题,欢迎加入我们的讨论群 。
Data-Juicer 被各种 LLM产品和研究工作使用,包括来自阿里云-通义的行业大模型,例如点金 (金融分析),智文(阅读助手),还有阿里云人工智能平台 (PAI)。 我们期待更多您的体验反馈、建议和合作共建!
Data-Juicer 感谢并参考了社区开源项目: Huggingface-Datasets, Bloom, RedPajama, Pile, Alpaca-Cot, Megatron-LM, DeepSpeed, Arrow, Ray, Beam, LM-Harness, HELM, ....
如果您发现我们的工作对您的研发有帮助,请引用以下论文 。
@inproceedings{chen2024datajuicer,
title={Data-Juicer: A One-Stop Data Processing System for Large Language Models},
author={Daoyuan Chen and Yilun Huang and Zhijian Ma and Hesen Chen and Xuchen Pan and Ce Ge and Dawei Gao and Yuexiang Xie and Zhaoyang Liu and Jinyang Gao and Yaliang Li and Bolin Ding and Jingren Zhou},
booktitle={International Conference on Management of Data},
year={2024}
}