-
Notifications
You must be signed in to change notification settings - Fork 174
FAQ‐zh
Data-Juicer是一套针对LLM的开源的、一站式的、灵活可扩展的数据处理系统,旨在为LLM提供更高质量的数据,从data的视角提高LLM的最终性能。它最基本的功能为编辑、清洗过滤数据以及数据去重,并为此提供了丰富的数据处理算子。在此基础上,Data-Juicer还提供了大量的数据处理和优化的菜谱,方便大家直接复用。
可参考安装文档进行安装。
可参考快速开始文档进行初步使用。
数据处理菜谱即数据处理配置文件,可以在configs
目录下找到Data-Juicer复现和优化的各种数据处理菜谱。
一方面,您可以在configs/config_all.yaml
文件中找到所有配置参数的列表以及其对应的含义。另一方面,对于某个算子(Operator, OP)来说,您可以在API Reference文档中或者对应OP的源码中找到详细的注释文档。
1. 按默认安装方式pip install -v -e .
或者最小依赖方式pip install -v -e .[mini]
安装完成后,在处理过程中出现WARNING信息:“This OP [xxx] is unavailable due to importing third-party requirements of this OP failure: [yyy]. You can either run 'pip install -v -e .[sci]' to install all requirements for all OPs, or run 'pip install yyy' with library version specified by 'environments/science_requires.txt' to install libraries required by this OP. Data processing will skip this OP later.”,处理过程自动跳过了某个算子,我该怎么做才能使用这个OP呢?
在这一个commit之后,Data-Juicer将部分OP依赖的过大(如torch)、平台兼容性较差(如kenlm、simhash-py)以及某些OP特有的第三方依赖库放到了sci依赖选项中。在安装时,如果您使用pip install -v -e .
或者pip install -v -e .[mini]
安装,则不会安装sci依赖选项中的依赖,因此部分OP的依赖不会预先安装,可能会不可用,但不会影响正常的Data-Juicer功能以及其他简单OP的使用。
如您需要恢复上述WARNING中跳过的OP的使用,一方面,您可以按照WARNING信息中提供的pip install yyy
语句专门为该算子安装其所需的依赖,这样你可以最小化、细粒度管理你所需的第三方依赖;另一方面,您也可以运行pip install -v -e .[sci]
为所有OP安装它们所需的第三方依赖,但可能一次性安装很多很大的第三方依赖。安装成功后,再次运行即可使用该算子。
原始simhash-py依赖库对Python版本有较强依赖,目前它只能支持Python 3.8及以下版本。因此您可以:
- 创建一个新的conda环境,指定Python版本为3.8或以下,然后在次环境中尝试安装simhash-py库
- 或者您也可以从我们修改的simhash-py版本进行安装,经简单验证它可以支持Python 3.9及以上版本
- 或者如果您不需要用到document_simhash_deduplicator算子,那可以跳过此依赖的安装,在最新版本Data-Juicer中不会影响其他功能的正常使用
我们之后会尝试逐渐通过替换或者额外开发的方式逐渐取代这些平台兼容性较差的依赖库,但这会是一个长期且复杂的过程。
Data-Juicer支持多进程并行处理,进程数目可以由参数np
控制。
结果数据集的导出位置由参数export_path
控制。同时,该文件路径所在的目录会被当做数据处理过程中的工作目录。
目前支持三种格式:[jsonl, json, parquet]
。导出格式可以通过在配置文件中修改export_path
的后缀名修改。
可以通过指定export_shard_size
参数来实现,该参数表示导出为若干个子文件时,每个子文件的最大大小限制,以字节byte为单位。该参数默认为0,表示只导出为单个文件。如果将其设置大于0的数值,则会导出 export_shard_size
个字节。
其中,
此外,如果将参数export_in_parallel
设置为true可在导出为多个子文件的时候开启并行导出,该参数默认为false。
Data-Juicer的cache系统基于datasets
库的cache系统建立,并优化了cache指纹的计算。当cache开启后,读取数据集、改变数据集内容、过滤数据集中的样本等步骤发生后,中间数据集都会在硬盘空间中存放一份cache。当我们仅改变某个算子的参数,需要重复处理某个数据集时,不会有变化的操作步骤就不会再进行处理,而是会直接载入之前存放好的cache,从而达到避免重复计算的速度优化效果。
默认情况下,Data-Juicer的cache系统是开启的。用户也可以通过use_cache
参数来控制cache的开启与关闭。由于cache系统会向硬盘写入大量cache文件,所以当该参数为true、待处理的数据集非常大且要处理的OP数目特别多时,可能会快速消耗硬盘空间。因此这里用户需要做一个可用硬盘空间与重复处理数据集花费时间之间的一个平衡与抉择,以此选择是否开启cache系统。
可以修改ds_cache_dir
参数来指定数据集cache文件的存放地址,这个参数默认为None,此时会使用datasets
库的默认cache地址~/.cache/huggingface/datasets
�。
您也可以通过环境变量HF_DATASETS_CACHE
来修改cache存放地址,但是在Data-Juicer中,ds_cache_dir
参数的优先级要高于这个环境变量,因此如果您手动指定了该参数,则会优先使用该参数的目录来存放cache文件,否则使用环境变量的目录来存放。
Data-Juicer的checkpoint系统为本框架特有系统,目的为一定程度上补足cache系统硬盘空间消耗过快的缺点。数据集的checkpoint本质上也是处理过程中某个时刻数据集的cache文件,但与cache不同,当开启checkpoint系统时,只有在处理过程中某个OP失败时才会主动将上一个OP产出的数据集的checkpoint文件写到硬盘。而在需要重复处理同一个数据集时,如果checkpoint前的OP配置都未发生改变,就会直接载入checkpoint,并从失败位置处的OP继续进行处理;如果之前的OP配置发生了改变,则会尝试从头重新进行处理。
默认情况下,Data-Juicer的checkpoint系统是关闭的。用户可以通过use_checkpoint
参数来控制checkpoint系统的开启与关闭。当checkpoint开启后,每个OP计算时的临时cache文件将会写到一个temp目录下,默认写到tempfile.tempdir
下,可通过temp_dir
参数进行修改。checkpoint文件默认会存放到工作目录下。
如果您的硬盘空间预估后已不足以存放所有的cache文件,可以考虑开启checkpoint系统。此外需要注意的是,checkpoint系统与cache系统是互斥的,如果checkpoint系统开启,则会强制关闭cache系统。
Data-Juicer的cache压缩系统为本框架特有系统,目的为一定程度上补足cache系统硬盘空间消耗过快的缺点。它可以利用目前在速度和压缩率上都比较优秀的几种压缩算法及时对产生的cache进行压缩,以此达到节省硬盘空间占用的目的。而在重复处理需要再次使用到某一份cache的时候,又会及时地进行解压。
默认情况下,Data-Juicer的cache压缩系统是关闭的。用户可以通过cache_compress
参数来控制cache压缩系统的需要使用的压缩算法,目前支持[gzip, zstd, lz4]
三种算法,默认为null表示系统关闭。当cache压缩系统开启后,每个OP后会将后续无用的cache压缩,并删除掉原cache文件。需要再次使用时,再进行解压。由于解压缩过程需要消耗额外的时间,所以用户需要根据硬盘空间使用和处理时间这两个方面的情况进行权衡与抉择。
Data-Juicer的tracer系统为本框架特有系统,其主要功能为追踪每个OP对数据集做出的改变。对于Mapper算子,它可以追踪Mapper对其做出编辑的样本示例;对于Filter算子,它可以追踪到那些被过滤掉的样本示例;对于Deduplicator算子,它可以追踪到那些被认为是重复的样本对示例。
默认情况下,Data-Juicer的tracer系统是关闭的。用户可以通过open_tracer
参数来控制tracer系统的开启与关闭。当tracer系统开启时,tracer记录会被存放在工作目录下的trace
目录中。tracer系统追踪的过程可能会消耗额外的处理时间,因此用户可以通过两个参数来适当调节其耗时多少:一方面,用户可以使用op_list_to_trace
参数来控制tracer只对特定的几个OP追踪,该参数默认为空列表,表示对所有处理OP进行追踪;另一方面,用户可以使用trace_num
参数控制对于单个OP,tracer最多追踪的样本示例数目,当已经收集到足够的样本时,tracer系统可以提前停止该OP的追踪过程。
Data-Juicer的OP融合系统为本框架特有系统,其主要功能为将若干计算过程中有相同中间变量的OP合并为一个OP,这些中间变量只需要计算一次即可,可以一定程度上加快处理速度并节省内存占用。具体的OP融合过程可参考我们的论文。
默认情况下,Data-Juicer的OP融合系统是关闭的。用户可以通过op_fusion
参数来控制OP融合系统的开启与关闭。需要注意的是,OP融合系统目前尚处于实验性阶段,其暂时无法与checkpoint系统同时工作。
Data-Juicer目前支持单机处理和分布式处理,可以由executor_type
参数控制,设置为“default”时为单机处理模式,设置为“ray”则可以支持基于Ray的分布式处理。
由于目前Data-Juicer的分布式处理能力尚处于实验阶段,因此它暂时只能支持Mapper和Filter类算子。
1. 在处理过程当中,某些算子提示警告信息:/home/lielin.hyl/miniforge3/envs/dj/lib/python3.8/site-packages/datasets/table.py:1381: FutureWarning: promote has been superseded by mode='default'.
,如何停止这些警告信息的弹出?
这个警告信息可能是由于安装的pyarrow
库版本信息过高以及datasets
库未及时调整其相关代码导致的。一个可能的解决方法为将pyarrow
库版本降低到13.0.0及以下。可参考这个issue和这个issue。
2. 在导出处理结果数据集时,报错:ValueError: 'index=True' is only valid when 'orient' is 'split', 'table', "index', or "columns'.
,我该怎么办?
将pandas
库版本将至2.0.0及以下可解决。