部分算子依赖 GPU 与模型权重,需自行准备模型;大规模处理依赖 Ray 集群,单机跑大数据集需先配置;Juicer 自然语言精炼模型需从 HuggingFace 或 ModelScope 单独下载。
data-juicer
datajuicerApache-2.0活跃维护面向大模型训练的数据处理流水线,把原始多模态数据清洗、过滤、去重并加工成高质量指令微调语料。
Data processing for and with foundation models! 🍎 🍋 🌽 ➡️ ➡️🍸 🍹 🍷
uv pip install py-data-juicer
dj-process --config demos/process_simple/process.yamlREADME 未说明具体显存或 GPU 型号要求;提到支持 CUDA 加速,并可在 50 个 Ray 节点(6400 核)等大规模集群上运行,也能在笔记本上运行。
把原始数据清洗成 AI 可用语料的多模态数据处理工具箱,从笔记本到千节点集群都能跑
面向大模型训练的数据处理流水线,把原始多模态数据清洗、过滤、去重并加工成高质量指令微调语料。
核心能力
- 内置 200+ 算子,覆盖文本、图像、音频、视频与多模态
- 用可版本化的 YAML 配方编排可复现的数据处理流水线
- 支持算子热加载,改算子无需重启流水线
- 自动算子融合带来 2-10 倍加速,并支持 CUDA 加速与自适应并行
- 内置追踪能力,便于调试、审计与迭代改进
容易踩的坑
- v1.6.2Release v1.6.2: Selector & Filter Boundary Fixes; Broader PII Redaction; Faster Dedup, Loading & Selectors最新正式版2026-11-04 · 2026-11-04 01:57 UTC
📊 Stats: 30 PRs merged, from 9 PR authors 📈 Code diff: 64 files changed, with 3,829 insertions and 803 deletions
Enhancements
- Hash-column-only deduplication:
document_deduplicator,document_simhash_deduplicator,image_deduplicatorandvideo_deduplicatorread the hash columns once, compute the kept indices from them, and returndataset.select(keep)instead of running a statefulDataset.filterthat decoded every column.document_line_deduplicatorcounts line hashes from the hash column in 10,000-row batches. The kept-row rules are unchanged. #1123 #1127 #1128 - MinHash clustering: each band table maps a hash to the first sample that has it and unions later collisions during the scan, instead of allocating a set per sample per band and walking every table again. #1119
- Batched column reads in field selectors: new
iter_column(dataset, column, batch_size=10000)reads a column in slices instead of decoding one row at a time;topk_,frequency_,range_andtags_specified_field_selectoruse it. #1125 - Loading:
unify_formatchecks Arrownull_countand skips the None-text filter when no text column has nulls; when nulls exist, the filter reads only the text columns in batches. #1129 - Test coverage: restored discovery of
tests/utils/job/, added CPU regression coverage for GPU preflight planning, job utilities and CLI entry points, arXiv extraction, and HaWoR/DWPose helpers; unit coverage is now above 70%. No production code changed. #1102 - Source distribution: the PyPI sdist now ships
data_juicer,tools, the build hook and metadata, so it can build a working wheel; before this release it carried only root metadata files and no package sources. The wheel is unchanged. #1131
Fixed Bugs
range_specified_field_selector: an omitted lower bound now defaults to 0 and an omitted upper bound to the dataset size, so one-sidedupper_rank/lower_percentilebounds select a range instead of returning the whole dataset. No bounds still returns the dataset unchanged, in its original order; zero- and one-row datasets are returned as-is. #1100topk_specified_field_selector: top-level field values now go through the same number conversion as nested keys, so numeric strings rank numerically ("100">"10">"9"),Noneno longer raisesTypeError, and large integers are compared exactly. #1099 #1125- Zero
top_ratio:topk_specified_field_selectorandfrequency_specified_field_selectordistinguish an omitted ratio from an explicit0, sotop_ratio: 0selects zero rows instead of the full dataset. #1120 random_selector:select_ratioof0, or one that rounds down to zero rows, now returns an empty dataset with the original features instead of all rows or aTypeError. #1106specified_numeric_field_filter:0and0.0are numeric and are kept when inside the configured range;Falseis treated as0.0; list and dict values are filtered out instead of raisingTypeError. #1111suffix_filter: configured suffixes are normalized to the formatter's stored form, sotxt,.TXTand.txtall match.txtsamples. #1114clean_email_mapper: the default pattern matches uppercase domains and TLDs, e.g.[email protected]. #1112clean_ip_mapper: the default pattern matches compressed IPv6 (2001:db8::ff00:42:8329,::1) and IPv6 addresses ending in an IPv4 address, without touchingstd::cout, times, MAC addresses or longer tokens. #1115pii_redaction_mapper: CN mobile and ID numbers adjacent to CJK text are redacted, and so are JWTs, international phone numbers, MAC addresses, Feishu/DingTalk open IDs and bracketed IPv6 addresses ([2001:db8::1]) next to text, while[123],[cafe]and[12:01:33]are left alone. Secret values are redacted whole, including quoted values, placeholders, and the credential afterAuthorization: Bearer/Basic/Digest/Token; ID key-values su
- Hash-column-only deduplication:
- v1.6.1Release v1.6.1: Throughput-Aware GPU Planning; Adaptive Microbatching; Ray BTS Memory Optimizations2026-10-19 · 2026-10-19 06:03 UTC
查看更新说明
Major Updates
📊 Stats: 20 PRs merged, from 11 contributors 📈 Code diff: 79 files changed, with 10,485 insertions and 332 deletions
🚀 Throughput-aware GPU Actor planning —
ray_partitionedprofiles GPU operators before execution and plans Actor counts from measured memory, throughput, output ratios, and cluster resources instead of the partition count. Eligible pipelines reuse one Actor Pool across several logical partitions while keeping per-partition checkpoints. Enabled by default; setpartition.gpu_preflight_enabled: falseto keep explicit GPU settings. #1054 #1082 🛡️ Opt-in adaptive GPU microbatching — Eligible CUDA Mappers on Ray Actors retry OOMs with smaller same-position microbatches, grow back once input pressure eases, and can seed later execution groups within the same run. Disabled by default. #1070 #1088 ⚡ Lower-memory Ray BTS deduplication — Compact NumPy storage for routed edges and exact MinHash keys, with unchanged configuration and results. #1078 #1079 🔧 Correctness fixes — Operators, dataset loading, local embeddings, analysis, and GPT evaluation; see Fixed Bugs and Compatibility Notes.Enhancements
- GPU preflight and Actor planning: measure initialization, steady-state throughput, output ratios, and memory per GPU stage (results in
gpu_probe_results.json), then plan Actors and Execution Groups within CPU, GPU-fraction, memory, and replica limits. Resume paths and dataset-level operators fall back to per-partition execution. #1054 - Adaptive microbatch retries and recovery: opted-in batched CUDA Mappers retry recognized allocation OOMs on the same rows and probe larger batches again after sustained success, capped by the configured batch size. Requires
op_fusiondisabled. #1070 #1088 - Job-scoped stage-profile reuse:
elastic_juicer_profile_seedseeds later execution groups and replacement Actors from compatible evidence in the current driver run; it is not restored across runs. #1070 - Compact Ray BTS storage: grouped NumPy edge arrays and bounded blocks of full MinHash keys replace Python lists and dicts. Component microbenchmarks reduced peak RSS by 20.9% (1M routed relations) and 33.2% (1M unique keys); not end-to-end Ray results. Extreme single-hot-key inputs run slower. #1078 #1079
- Release pipeline: PyPI publishing supports metadata 2.5; documentation deployments are serialized. #1069
Fixed Bugs
- GPU probe lineage: downstream probes receive the full distinct representative rows after upstream truncation or padding; stale profiles are invalidated. #1082
- Ray BTS deep chains: iterative path compression avoids
RecursionError. #1079 - Local embedding inputs:
text_embd_similarity_filterno longer feeds the model object's repr into the tokenizer. #1090 clean_html_mapper: supports selectolax 1.0 viaLexborHTMLParser. #1085remove_specific_chars_mapper: escapes configured characters; no longer removes|. #1083remove_header_mapper:drop_no_headtakes effect, and standaloneparagraph/subparagraphheadings are recognized. #1084- Extractor
drop_text: honoured by the entity-relation and support-text extractors. #1086 general_field_filter: supports unary-,+, andnot. #1076- Dataset loading: lenient JSONL cache refreshes when source files change; zero-share datasets under
max_sample_numare skipped; Hugging Facelimitis applied after loading. #1094 #1095 #1096 - Analysis and tools: overall analysis types columns by the first non-null value; the visualization app no longer raises
KeyError: True; GPT evaluation excludes failed judge calls and reports the count. #1074 #1073 #1080 - Docs: fixed broken LCS-558K and Agent demo links. #1087
Compatibility Notes
remove_header_mappernow clears texts without a LaTeX header by default; setdrop_no_head: falseto keep them. #1084remove_specific_chars_mapperkeeps|and mat
- GPU preflight and Actor planning: measure initialization, steady-state throughput, output ratios, and memory per GPU stage (results in
- v1.6.0Release v1.6.0: Juicer Model Release; Cluster-Aware Partitioning; Config Validation; LiteLLM Backend2026-09-09 · 2026-09-09 02:13 UTC
查看更新说明
Major Updates
📊 Stats: 23 PRs merged, from 9 contributors
📈 Code diff: 197 files changed, with 9,415 insertions and 1,741 deletions
🧃 Juicer model release — Released Juicer-35B-A3B (ModelScope), a locally deployable data-refinement model that follows natural-language instructions for text cleaning, filtering, and semantic labeling. English and Chinese guides and the Juicer Playground provide deployment instructions and example recipes. #1060
🧮 Cluster-aware partitioning — Automatic partition counts now use live Ray cluster resources. Manual
partition.sizetargets split data at row boundaries, including inputs with fewer blocks than partitions. #1044 #1045 #1063✅ Config validation — Pipeline preflight catches invalid operator settings and executor/schema mismatches before processing. Reader defaults now apply consistently across execution and analysis. #1049 #1061
🔌 LiteLLM backend — New
api_backend="litellm"support inprepare_api_modelroutes chat, embedding, and Responses requests through LiteLLM providers while retaining the existing OpenAI-compatible backend as the default. #1062📚 Documentation refresh — Rewritten English and Chinese guides cover installation, processing, analysis, configuration, export, and the playground. Added documentation for 28 existing operators, corrected examples, and separated guide/API navigation with incremental versioned builds. #1048
🗄️ Unified remote export — Local, S3, and HDFS export share filesystem dispatch, and JSONL output now serializes Python dates and datetimes in ISO format. #1021 #1065
🖼️ Image OHEM selector — New
image_ohem_selectorselects high-loss image samples using a user-supplied scoring function and a top-k or ratio budget. #1038⚡ Bounded tokenizer batches — Token-count filters limit tokenizer batch sizes to reduce peak memory on long inputs. #1040
🔧 Robustness fixes — Fixed fused-filter cache isolation, MinHash state reuse and empty inputs, deduplicator execution-mode declarations, text chunking, compressed HPO sampling, and pandas extension-dtype handling. #1059 #1043 #1051 #1057 #1046 #1055 #1047
Enhancements
- Cluster-aware auto partition counts:
partition.num_of_partitions: autoderives partition counts from live Ray cluster resources. #1045 - Single Ray topology source: consolidated resource detection and removed guessed node counts and driver-local clamping in partitioned execution. #1044
- Manual partition sample targets:
partition.sizespecifies an approximate number of rows per partition; explicit count and sample-target settings are validated as alternatives. #1063 - Pipeline preflight validation: validate operator parameters, executor compatibility, and required dataset fields before processing across default, Ray, and partitioned Ray execution. #1049
- Consistent reader defaults: dataset loading and analysis share reader configuration, with explicit load arguments taking precedence over recipe defaults and
np. Exposed the existingload_jsonl_lenientanduse_dagcontrols in YAML/CLI. #1061 - LiteLLM provider integration: chat, embedding, and Responses wrappers support provider-specific routing and credentials through the opt-in LiteLLM backend. #1062
- Unified remote filesystem dispatch:
ExporterandRayExportershare path resolution for local files, S3, and HDFS. #1021 - Bounded tokenizer batches: cap token-count tokenizer batch sizes while preserving filtering behavior. #1040
- Bilingual guides and operator reference: rewrite task guides, document 28 existing operators, fix examples and links, and update guide/API navigation and versioned documentation builds. #1048
- Juicer model documentation: added English an
- Cluster-aware auto partition counts:
- v1.5.5Release v1.5.5: External OP Plugins; HDFS I/O & Ray Data Optimizations; Elastic Multi-node Sharding2026-08-07 · 2026-08-07 08:09 UTC
查看更新说明
Major Updates
📊 Stats: 18 PRs merged, from 5 contributors
📈 Code diff: 84 files changed, with 11,991 insertions and 389 deletions
🧩 External operator plugins — Support loading external operators via Python entry points, allowing third-party OPs to be shipped as independent pip packages and used with zero extra config. #1026
🗄️ HDFS protocol support — Data-Juicer can now read datasets from and export processed results to HDFS (
hdfs://), consistent with the existing S3 remote-storage workflow. #1014⚡ Leaner & faster Ray Data — Removed eager
count()/columns()/schema()actions that triggered premature Ray Dataset execution, replaced the privateget_compute_strategyhelper with the publicTaskPoolStrategy/ActorPoolStrategyAPIs, and madePartitionedRayExecutorrun partitions concurrently. #1022 #1024 #1025 #1032 #1036🌐 Elastic multi-node sharding — Available as a runnable reference workflow (scripts + sample configs under
demos/elastic_sharding/) that pre-splits a large JSONL dataset into shards and processes them elastically across multiple nodes with a node-local Data-Juicer Ray executor, including retries, stale-claim recovery, status inspection, and ordered merge. #1015📊 RayAnalyzer for distributed analysis — New
RayAnalyzercomputes filter stats via Raymap_batchesand aggregates overall statistics (count/mean/std/min/max) using Ray native aggregation operators, without pandas materialization. It is the distributed counterpart to the localAnalyzer. #1016Enhancements
- External operator plugins via entry points: third-party OPs can be shipped as independent pip packages and are loaded into the global
OPERATORSregistry atimport data_juicer.opstime. #1026 - HDFS protocol support for dataset loading and exporting. #1014
- Public Ray compute strategies: replaced the private
get_compute_strategyhelper with the publicTaskPoolStrategy/ActorPoolStrategyAPIs. #1024 - Reduced eager Ray dataset actions: removed premature
count(), switched totake(k)/take_all(), and avoided repeatedcolumns()/schema()calls. #1025 - Elastic multi-node sharding: available as a runnable reference workflow (scripts + sample configs under
demos/elastic_sharding/) that pre-splits a large JSONL dataset into shards and processes them elastically across multiple nodes with a node-local Data-Juicer Ray executor (retries, stale-claim recovery, status inspection, and ordered merge). #1015 - RayAnalyzer for distributed data analysis: computes filter stats via Ray
map_batchesand aggregates overall statistics without pandas materialization. #1016 - Membership operators (
in/not in) ingeneral_field_filterfor expressions likelang in ['en', 'zh']. #1000 - Streamed n-gram frequency counting: count character and word n-grams as they are generated instead of retaining an occurrence-sized intermediate list, cutting peak memory in
character_repetition_filterandword_repetition_filterwhile preserving ratios, caching, and filtering decisions. #1029 - Bounded MinHash permutation workspace: reduce token-by-permutation matrices in 8 MiB blocks and fold exact minima in
document_minhash_deduplicator, cutting RSS from 768.0 to 271.9 MiB at 4x while preserving byte signatures. #1035 - Test refactor & coverage: enhanced tests for
base_op, job utils, and config. #1018
Fixed Bugs
- Concurrent partitioned Ray execution:
PartitionedRayExecutornow drives partitions concurrently via a driver-sideThreadPoolExecutorinstead of serially, preserving partition order. #1022 - Elastic actor pool concurrency:
ActorPoolStrategynow honors(min, max)num_procranges instead of collapsing them to a fixed size. #1032 - Partition checkpoint preservation: partition checkpoints now survive Ray block-layout changes, so resumed runs no longer reprocess completed partitions. #1036
- **`text_chu
- External operator plugins via entry points: third-party OPs can be shipped as independent pip packages and are loaded into the global
- v1.5.4Release v1.5.4: HumanVBench Video OPs; Batch-local Stage Fusion; Robustness Fixes2026-07-23 · 2026-07-23 02:29 UTC
查看更新说明
Major Updates
📊 Stats: 10 PRs merged, from 6 contributors
📈 Code diff: 125 files changed, with 11,287 insertions and 766 deletions
🧑🤝🧑 New OPs — Added 9 human-centric video understanding operators (human track extraction, active-speaker detection, audio ASR, speech emotion & age/gender detection, face demographic & attribute/emotion captioning, face-ratio filtering) for building HumanVBench-style pipelines. (These OPs need third-party patches/models under
thirdparty/humanvbench_models/and require a source install for now.) #938 #1013⚡ Batch-local stage fusion — New
FusedSequentialBatchOpruns a list of batch-local sub-operators sequentially inside a single dataset map stage, reducing scheduler/stage overhead for mapper/filter chains. Wired throughDefaultExecutor,RayExecutor, andPartitionedRayExecutor. #1004New OPs
- 9 HumanVBench human-centric video OPs — 8 mappers (
video_human_tracks_extraction_mapper,video_active_speaker_detect_mapper,video_audio_ASR_mapper,video_audio_speech_emotion_mapper,video_audio_detect_age_gender_mapper,video_human_tracks_face_demographic_mapper,video_captioning_face_attribute_emotion_mapper,video_captioning_from_human_tracks_mapper) + 1 filter (video_face_ratio_filter). #938 #1013 fused_sequential_batch_op(FusedSequentialBatchOp). #1004
Fixed Bugs
- HumanVBench ops runtime compatibility: scenedetect
open_videoAPI migration, SenseVoiceSmall model resolution via ModelScope, output-directory creation on init, and declared runtime deps. #1013 - Ray deduplicator shared state: share dedup backend state across
map_batchestasks, reuse actor handles, materialize stats for stateful backends. #978 - Ray checkpoint relative path: resolve
work_dir/checkpoint_dirto absolute paths inPartitionedRayExecutor. #979 clean_html_mapperon null text: no longer errors onnull/Nonetext. #1001- Boolean stat columns in
ColumnWiseAnalysis:dj-analyzeno longer crashes on boolean stat columns. #1003 - ARM64 (aarch64) install unblocked: precise
decord/torchcodecplatform markers restrict them to platforms with pre-built wheels (Linux x86_64, Windows x86_64, macOS arm64). #998
Enhancements
- Test coverage & cleanup: expanded utility/model-handling tests, plus assorted cleanup. #1002 #1007
Acknowledgements
- @macroguo-ghy fixed Ray deduplicator shared-state handling. #978
- @wenhaozhao011-cmd fixed boolean stat column handling in
ColumnWiseAnalysis. #1003 - @bglglzd contributed code/documentation cleanup. #1007
New Contributors
- @bglglzd made their first contribution in #1007
Full Changelog: https://github.com/datajuicer/data-juicer/compare/v1.5.3...v1.5.4
- 9 HumanVBench human-centric video OPs — 8 mappers (
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Data-Juicer: The Data Operating System for the Foundation Model Era
Data-Juicer (DJ) transforms raw data chaos into AI-ready intelligence. It treats data processing as composable infrastructure—providing modular building blocks to clean, synthesize, and analyze data across the entire AI lifecycle, unlocking latent value in every byte.
Whether you're deduplicating web-scale pre-training corpora, curating agent interaction traces, or preparing domain-specific RAG indices, DJ scales seamlessly from your laptop to thousand-node clusters—no glue code required.
Alibaba Cloud PAI has deeply integrated Data-Juicer into its data processing products. See Quickly submit a DataJuicer job.
🧃 Juicer, our natural-language data-refinement model, turns cleaning instructions, filtering rules, and semantic-tagging requirements into structured outputs. Try it on HuggingFace or ModelScope, or see the Juicer docs.
🚀 Quick Start
Zero-install exploration:
Install & run:
uv pip install py-data-juicer
dj-process --config demos/process_simple/process.yaml
Or compose in Python:
from data_juicer.core.data import NestedDataset
from data_juicer.ops.filter import TextLengthFilter
from data_juicer.ops.mapper import WhitespaceNormalizationMapper
ds = NestedDataset.from_dict({
"text": ["Short", "This passes the filter.", "Text with spaces"]
})
res_ds = ds.process([
TextLengthFilter(min_len=10),
WhitespaceNormalizationMapper()
])
for s in res_ds:
print(s)
✨ Why Data-Juicer?
1. Modular & Extensible Architecture
- 200+ operators spanning text, image, audio, video, and multimodal data
- Recipe-first: Reproducible YAML pipelines you can version, share, and fork like code
- Composable: Drop in a single operator, chain complex workflows, or orchestrate full pipelines
- Hot-reload: Iterate on operators without pipeline restarts
2. Full-Spectrum Data Intelligence
- Foundation Models: Pre-training, fine-tuning, RL, and evaluation-grade curation
- Agent Systems: Clean tool traces, structure context, de-identification, and quality gating
- RAG & Analytics: Extraction, normalization, semantic chunking, deduplication, and data profiling
3. Production-Ready Performance
- Scale: Process 70B samples in 2h on 50 Ray nodes (6400 cores)
- Efficiency: Deduplicate 5TB in 2.8h using 1280 cores
- Optimization: Automatic OP fusion (2-10x speedup), adaptive parallelism, CUDA acceleration, robustness
- Observability: Built-in tracing for debugging, auditing, and iterative improvement
⭐ If Data-Juicer saved you time or improved your data work, please consider starring the repo. It helps more people discover the project and keeps you notified of new releases and features.
📰 News
- 🎯 Boundary-Correct Selectors & Filters — explicit
top_ratio: 0and zero-row random selections now keep zero rows; single-sidedrange_specified_field_selectorbounds apply instead of returning the whole dataset;topk_specified_field_selectorranks top-level numeric strings numerically and toleratesNone;specified_numeric_field_filterkeeps0and0.0;suffix_filternormalizestxt,.TXTand.txtalike. - 🛡️ Broader PII Redaction —
pii_redaction_mapperalso redacts JWTs, international phone numbers, MAC addresses, Feishu/DingTalk open IDs and bracketed IPv6 addresses; CN phone and ID numbers and these tokens are caught when they sit directly next to CJK text; secret and ID values (user_id: 42,{"user_id": "u-123"},Authorization: Bearer ...) are redacted whole while keeping the key, separator and quotes, full-width:is accepted, and values no longer run onto the next line unless it is indented.clean_email_mappermatches uppercase domains;clean_ip_mappermatches compressed IPv6 and IPv6-embedded IPv4 addresses. - ⚡ Faster Dedup, Loading & Field Selectors — exact, simhash, image and video deduplication compute kept rows from the hash columns instead of decoding every column; line dedup counts line hashes from the hash column; MinHash band collisions are unioned during the scan;
unify_formatskips the None-text filter when no text column has nulls; four field selectors read their column in 10,000-row batches. - 🔧 Media, Loading & Job Fixes — image OPs write results back as PNG bytes so chained image OPs can read them; video frame processing keeps the audio track; lenient JSONL keeps the BOM-prefixed first record and loads
.jsonl.gz/.jsonl.zstshards whose suffixes are uppercase or mixed-case; inline LaTeX comments no longer consume the preceding character;expand_macro_mapperexpands macros at the end of the text or directly followed by another macro; job progress reads metrics from completion-event metadata;nltkupgraded to 3.10.4 and GitPython to 3.2.1.
- 🎛️ Throughput-Aware GPU Actor Planning —
ray_partitionedruns a GPU preflight that measures each GPU operator's memory, steady-state throughput, and output ratio, then plans actor counts independently of the partition count. Partitions in one execution group share an actor pool to avoid repeated model loading. Enabled by default; setpartition.gpu_preflight_enabled: falseto keep explicitly configured GPU resources. - 🪄 Adaptive GPU Microbatching (opt-in) — With
elastic_juicer_adaptive_batching: true, eligible CUDA mappers retry the same rows in smaller microbatches after an OOM and cautiously grow back once input pressure eases.elastic_juicer_profile_seed: truereuses compatible batch bounds across execution groups and replacement actors within oneray_partitionedrun. Both are off by default. - 🧮 Leaner Ray MinHash Dedup —
ray_bts_minhash_deduplicatorkeeps edge buffers and hash keys in packed NumPy arrays instead of Python objects, reducing memory overhead with unchanged configuration and results. - 🔧 Operator Fixes —
clean_html_mapperworks with selectolax 1.0;remove_specific_chars_mapperescapes regex characters and no longer strips|;remove_header_mappernow applies its defaultdrop_no_head=Trueand clears texts without a LaTeX header; the entity-relation and support-text extractors honourdrop_text;general_field_filteraccepts negative numbers in conditions; local Hugging Face embeddings intext_embd_similarity_filterno longer mix the model's repr into the input text. - 🗂️ Loading, Analysis & Tool Fixes — The HuggingFace load strategy applies
limitafter loading; datasets allotted zero samples undermax_sample_numare skipped; the lenient JSONL cache refreshes when source files change; overall analysis keeps stats columns whose first value is null; the visualization app no longer raisesKeyErrorwhen no filter has tunable stats; the GPT evaluator excludes failed judge calls from averages and reports their count.
- 🧮 Cluster-Aware Partitioning — Automatic partition counts use live Ray cluster resources. Manual
partition.sizetargets split data at row boundaries, including inputs with fewer blocks than partitions. - ✅ Config Validation — Pipeline preflight catches invalid operator settings and executor/schema mismatches before processing. Reader defaults now apply consistently across execution and analysis.
- 🔌 LiteLLM Backend — Select
api_backend="litellm"inprepare_api_modelfor chat, embedding, and Responses requests through provider-specific model routing; the existing OpenAI-compatible backend remains the default. - 📚 Documentation Refresh — Rewritten English and Chinese guides cover installation, processing, analysis, configuration, export, and the playground. Added documentation for 28 existing operators, corrected examples, and separated guide and API navigation with incremental versioned documentation builds.
- 🗄️ Unified Remote Export — Local, S3, and HDFS export share filesystem dispatch; JSONL export now serializes Python dates and datetimes in ISO format.
- 🖼️ Image OHEM Selector — New
image_ohem_selectorselects high-loss image samples using a user-supplied scoring function and a top-k or ratio budget. - ⚡ Bounded Tokenizer Batches — Token-count filters limit tokenizer batch sizes to reduce peak memory on long inputs.
- 🔧 Robustness Fixes — Fixed fused-filter cache isolation, MinHash state reuse and empty inputs, deduplicator execution-mode declarations, empty text chunks, gzip JSONL HPO sampling, and pandas extension-dtype handling. HPO modules can now be imported without starting a sweep.
- 🧃 Natural-Language Data Refinement — Juicer follows natural-language instructions for text cleaning, filtering, and semantic labeling.
- 🏠 Local Deployment — Download the model for local deployment.
- 🧪 Playground — Try data-refinement recipes in the Juicer Playground.
- 🧩 External OP Plugins — Third-party operators can now be shipped as standalone pip packages and auto-registered via Python entry points.
- 🗄️ HDFS I/O — Added
hdfs://support for dataset loading and exporting, aligned with the existing S3 path. - ⚡ Ray Data Optimizations — Removed eager actions that forced premature execution, migrated to the public
TaskPoolStrategy/ActorPoolStrategyAPIs, parallelized partitioned execution, preserved elastic actor pool concurrency, and kept partition checkpoints valid across block-layout changes. - 🌐 Elastic Multi-node Sharding — New runnable reference workflow under
demos/elastic_sharding/that shards large JSONL datasets across nodes via node-local Ray executors, with retries and ordered merge. - 📊 Distributed RayAnalyzer — New
RayAnalyzercomputes and aggregates dataset stats with Ray native operators, avoiding pandas materialization. - 🧮 Memory Optimizations — Streamed n-gram counting in repetition filters and block-wise MinHash permutations cut peak memory (768 → 272 MiB RSS) without changing results.
- 🔧 Robustness & Dependency Fixes — Fixed
text_chunk_mapperdelimiter leakage,calibrate_response_mapperoutput_patternhandling, and null captions inimage_diffusion_mapper; added membership operators togeneral_field_filter; relaxednumpy/fsspec/pandasbounds for Python 3.13+ and pyarrow>=17.
- 🧑🤝🧑 New OPs — Added 9 human-centric video understanding operators (human track extraction, active-speaker detection, audio ASR, speech emotion & age/gender detection, face demographic & attribute/emotion captioning, face-ratio filtering) for building HumanVBench (CVPR'26)-style pipelines.
- ⚡ Batch-local Stage Fusion — New
FusedSequentialBatchOpfuses consecutive OPs within a batch to cut inter-op overhead and speed up sequential processing. - 🔧 Robustness & Install Fixes — Fixed Ray deduplicator shared-state handling, resolved a relative-path issue in the Ray checkpoint writer, made
clean_html_mapperrobust to null text values, handled boolean stat columns inColumnWiseAnalysis, and unblocked ARM64 (aarch64) installation via precisedecord/torchcodecplatform markers. - 🧪 Test Coverage & Cleanup — Expanded tests for utility functions and model handling, plus assorted code cleanup.
- 🤖 VLA Ops Enhancements — Expanded embodied-AI processing with 10+ new/renamed VLA operators (camera calibration via DeepCalib/DroidCalib/MoGe, atomic action segmentation, hand action computation & motion smoothing, clip reassembly, trajectory overlay, LeRobot export) and a complete VLA pipeline demo.
- 🔄 Ray Repartition Pipeline — New
ray_repartition_pipelinefor dataset-level block repartitioning in Ray mode. - ⚡ Scalable Ray Data Reads — Wired
override_num_blocksthrough the full call chain for controlling block parallelism on PB-scale datasets. - 🧪 Test Coverage Expansion — Added 409 new test cases across 18 test files.
- 🐳 Stability & Robustness Fixes — JSONStreamDatasource schema unification, OP env version resolution, FUSE-safe rmtree for PartitionedRayExecutor, deprecated model name updates, and num_proc handling fixes.
- 🧹 New Deduplicator — Added
DocumentLineDeduplicatorfor cross-document line-level dedup, removing boilerplate lines (templates, copyright notices, navigation bars) by global document frequency. - 🤖 Agent Data Quality Toolkit — Shipped interaction-quality OPs & recipe, a bad-case HTML report, and more robust JSONL / HuggingFace meta loading.
- 📦 Leaner & Faster Install — Slimmed the default dependency set (Ray, audio, spaCy, av, etc. moved to on-demand extras) to speed up installation.
- 🐳 Stability & Robustness Fixes — Library-safe error handling (raise over
exit(1)), Ray init/temp-dir fixes, valid API params (drop invalidmax_new_tokens), PyArrow 20+ batch JSON reading, local-path aesthetics model support, and more performance/bug fixes. - 🧠 Semantic LLM Operators — Introduced
llm_extract_mapper,llm_condition_filter, andllm_structured_opswith unifiedllm_*naming and configurable inference strategies (join/agg/top-k planned).
- 📄 Two new LaTeX-focused mapper OPs shipped, extending data-juicer's document processing capabilities to handle
.texarchives and figure contexts. - 🗜️ Compressed dataset format support:
json[l].gzfiles can now be loaded directly, and Ray datasets gain proper support for reading compressed JSON files. - 📚 New documentation added covering cache, export, and tracing workflows to help users better understand and debug data processing pipelines.
- 🤖 Major refactor and upgrade of data-juicer-agents completed: The project architecture and CLI/session capabilities were comprehensively redesigned for better maintainability and extensibility. See date-juicer-agents for more details.
- 🚀 Enhanced Distributed Execution Framework -- Introduced partitioned Ray executor and OP-level isolated environments to improve fault tolerance, scalability, and dependency conflict resolution.
- 🤖 Expanded Embodied AI Video Processing -- Added specialized operators for camera calibration, video undistortion, hand reconstruction, and pose estimation to strengthen multi-view video handling.
- 💪🏻 System Performance & Developer Experience Optimizations -- Enabled batch inference, memory/log reduction, core logic refactoring, and updated documentation/templates.
- 🐳 Critical Bug Fixes & Stability Improvements -- Resolved duplicate tracking, parameter conflicts, homepage rendering issues, and outdated docs for higher reliability.
- 🤖 Q&A Copilot — Now live on our Doc Site | DingTalk | Discord. Feel free to ask anything related to Data-Juicer ecosystem!
- Check 🤖 Data-Juicer Agents | 📃 Deploy-ready codes | 🎬 More demos for more details.
- 🎬 Video Bytes I/O — Direct bytes processing for video pipelines
- Ray Mode Tracer — Track changed samples in distributed processing
- 🐳 Enhancements & fixes — refreshed Docker image, small perf boosts, GitHub Insights traffic workflow, Ray compatibility updates, and bug/doc fixes.
View All Release and News Archive
🔌 Users & Ecosystems
The below list focuses on developer-facing integration and usages in alphabetical order. Missing your project / name? Feel free to open a PR or reach out.
Data-Juicer plugs into your existing stack and evolves with community contributions:
Extensions
- data-juicer-agents — DJ Copilot and agentic workflows
- data-juicer-hub — Community recipes and best practices
- data-juicer-sandbox — Data-model co-development with feedback loops
Frameworks & Platforms
AgentScope · Apache Arrow · Apache HDFS · Apache Hudi · Apache Iceberg · Apache Paimon · Alibaba PAI · Delta Lake · DiffSynth-Studio · EasyAnimate · Eval-Scope · Huawei Ascend · Hugging Face · LanceDB · LLaMA-Factory · ModelScope · ModelScope Swift · NVIDIA NeMo · Ray · RM-Gallery · Trinity-RFT · Volcano Engine
Industry
Alibaba Group, Ant Group, BYD Auto, ByteDance, DTSTACK, JD.com, NVIDIA, OPPO, Xiaohongshu, Xiaomi, Ximalaya, and more.
Academia
CAS, Nanjing University, Peking University, RUC, Tsinghua University, UCAS, Zhejiang University, and more.
Contributing & Community
We believe in building together. Whether you're fixing a typo, crafting a new operator, or sharing a breakthrough recipe, every contribution shapes the future of data processing.
We welcome contributions at all levels:
- Good First Issues — Add operators, improve docs, report issues, or fix bugs
- Developer Guide — Optimize engines, add features, or enhance core infrastructure
- DJ-Hub — Share knowledge: recipes, papers, and best practices
- Connect: Slack · DingTalk · Discord
| Discord | DingTalk |
|---|---|
Data-Juicer is made possible by the users and community:
- Initiated by: Alibaba Tongyi Lab
- Co-developed with: Alibaba Cloud PAI, Anyscale (Ray team), Sun Yat-sen University, NVIDIA (NeMo team), and contributors worldwide
- Inspired by: Apache Arrow, Ray, Hugging Face Datasets, BLOOM, RedPajama-Data, ...
Documentation
For detailed documentation, please see here.
Quick Links:
- operator zoo — Browse 200+ operators with examples
- Agent interaction quality & bad-case — In-repo recipe, JSONL pipeline, HTML report (
demos/agent/; operators such asagent_bad_case_signal_mapperare also listed in docs/Operators.md) - data-juicer-hub — Community-driven recipes and best practices
- developer guide — Build your own code and contribute to DJ
- data-juicer-cookbook — resource archive
- awesome_llm_data — “Awesome List” for data-model co-development
📄 License & Attribution
Data-Juicer is released under the Apache License 2.0. Attribution is appreciated: please use our badge, or text as "This project uses Data-Juicer: https://github.com/datajuicer".
📖 Citation
If you find Data-Juicer useful in your work, please cite:
@inproceedings{djv1,
title={Data-Juicer: A One-Stop Data Processing System for Large Language Models},
author={Chen, Daoyuan and Huang, Yilun and Ma, Zhijian and Chen, Hesen and Pan, Xuchen and Ge, Ce and Gao, Dawei and Xie, Yuexiang and Liu, Zhaoyang and Gao, Jinyang and Li, Yaliang and Ding, Bolin and Zhou, Jingren},
booktitle={SIGMOD},
year={2024}
}
@article{djv2,
title={Data-Juicer 2.0: Cloud-Scale Adaptive Data Processing for and with Foundation Models},
author={Chen, Daoyuan and Huang, Yilun and Pan, Xuchen and Jiang, Nana and Wang, Haibin and Zhang, Yilei and Ge, Ce and Chen, Yushuo and Zhang, Wenhao and Ma, Zhijian and Huang, Jun and Lin, Wei and Li, Yaliang and Ding, Bolin and Zhou, Jingren},
journal={NeurIPS},
year={2025}
}
-
(ICML'25 Spotlight) Data-Juicer Sandbox: A Feedback-Driven Suite for Multimodal Data-Model Co-development
-
(CVPR'25) ImgDiff: Contrastive Data Synthesis for Vision Large Language Models
-
(NeurIPS'25) Diversity as a Reward: Fine-Tuning LLMs on a Mixture of Domain-Undetermined Data
-
(NeurIPS'25) MindGYM: What Matters in Question Synthesis for Thinking-Centric Fine-Tuning?
-
(ICML'26) DetailMaster: Can Your Text-to-Image Model Handle Long Prompts?
-
(Data Scaling) BiMix: A Bivariate Data Mixing Law for Language Model Pretraining