NeMo Curator Release Notes: 26.07 (v1.3.0)
NeMo Curator Release Notes: 26.07 (v1.3.0)
NeMo Curator 26.07 expands text, audio, video, and synthetic-data curation, and makes pipeline resource configuration more consistent across execution backends.
Python 3.11 or later is required. NeMo Curator 26.07 supports Python 3.11 through 3.13. Before upgrading, review the 26.07 migration checklist, especially framework-owned task IDs, sentinel task construction, pipeline resumability, video caption variant names, typed inference-server configuration, the removed video preprocessing option, the audio ASR worker rename, and architecture-specific dependency changes. The Python range changed in #1855.
What’s New
Nemotron-CLIMB Data Curation
The new Nemotron-CLIMB tutorial implements the data-mixture optimization workflow introduced in #1727 and completed in #2072. The workflow:
- Embeds and clusters candidate documents.
- Prunes and merges clusters with FastText classifiers.
- Produces Megatron-compatible
.binand.idxtoken files. - Samples Dirichlet data mixtures, trains and evaluates proxy models, and fits a LightGBM predictor.
- Narrows the mixture search from 64 candidates to 32, 16, and a final selected mixture.
The output workflow also includes the #1427 utility for merging multiple file prefixes produced by MegatronTokenizerWriter into one Megatron dataset.
See Nemotron-CLIMB stages for the stage-by-stage API.
Audio Tagging, Quality, and Punctuation-and-Capitalization Preparation
The generic ASR and TTS preparation pipeline from #1679 and the audio tagging tutorial added in #1863 compose resampling, diarization, long-segment splitting, ASR alignment, bandwidth estimation, SQUIM quality metrics, and TTS or ASR manifest preparation. Optional second-pass ASR enables pairwise WER scoring. The pipeline can also apply inverse text normalization and Chinese text conversion when their optional dependencies are available.
New public stages include BandwidthEstimationStage, TorchSquimQualityMetricsStage, ComputeWERStage, GetPairwiseWerStage, and PrepareModuleSegmentsStage.
Interactive DNS Challenge Read Speech Tutorial
The Read Speech tutorial now includes an interactive notebook for exploring the DNS Challenge workflow before running the complete Hydra pipeline (#1870).
Long-Form Audio Pretraining Pipeline
The audio pretraining tutorial from #1898 turns diarized and transcribed long-form recordings into bounded, mono training snippets. It includes overlap filtering, snippet cut planning, repeated-content filtering, extraction, tar and JSONL writers, metrics, and a dry-run mode through build_audio_pretrain_pipeline().
Nemotron OCR Synthetic Data Generation
The Nemotron OCR pipeline added in #1899 generates OCR training records from Hugging Face datasets with OCRNemotronV2Stage. An optional OCRScoringQAStage uses Nemotron Nano Omni to score generated records and create question-answer data. See the OCR tutorial for an end-to-end example.
Interleaved Image-Text Getting Started Workflow
The interleaved data quickstart moved into a dedicated getting-started workflow in #1774. It demonstrates reading, transforming, filtering, and writing MINT-1T-style image-text records. Start with Interleaved Data, then use the linked I/O and filter guides for production configuration.
Pipeline Resumability
Pipelines can now pass a local checkpoint_path to Pipeline.run() to track completed source partitions in LMDB and skip them when a run is restarted (#2063). Resumability requires a pre-existing Ray cluster and every stage in the pipeline to be marked resumability-safe. NoneTask records intentionally filtered branches, while FailedTask keeps a source pending for retry. See Resumable Processing.
SLURM Job Arrays
NeMo Curator can shard deterministic source tasks across independent SLURM array jobs, record one durable completion manifest per successful shard, and discover only the shards that require retry (#2059). The reference workflow supports JSONL and Parquet, single-node or multi-node Ray within each array task, logical shard counts larger than the scheduler array limit, and downstream FailedTask recovery. See SLURM Job Arrays.
Video Caption Quality Evaluation
The caption evaluation workflow from #1980 builds a diverse benchmark from sampled OpenVid clips, summarizes captions to the model’s token budget, and uses Cosmos-Embed1 cosine similarity to evaluate video-text alignment. Summaries are cached so repeated evaluations do not regenerate them.
The removed --captioning-model-does-preprocess option appears in an older benchmark README. Do not use it with 26.07; follow the video preprocessing migration.
Expanded Video Caption Models
Video captioning now supports Qwen2.5-VL, Qwen3-VL, NVIDIA Nemotron Nano 12B V2 VL in BF16, FP8, and NVFP4 variants, and Nemotron 3 Nano Omni (#1827, #1883). The captions and preview guide provides the model matrix, precision behavior, preparation and generation controls, and second-pass refinement options.
The unversioned qwen variant was removed. Existing pipelines must select qwen2.5 to preserve the former behavior or choose qwen3 explicitly; see the caption variant migration.
Typed Inference Server Backends
InferenceServer now uses typed backend configuration for Ray Serve and NVIDIA Dynamo. Use RayServeModelConfig for Ray Serve, or combine DynamoVLLMModelConfig and DynamoServerConfig for aggregated or disaggregated Dynamo serving. The expanded Inference Server guide covers model replicas, routing, runtime environments, resource placement, HAProxy ingress, pipeline coexistence, and troubleshooting (#1813, #1820, #1833, #1834, #1861, #1895, #1957).
InferenceModelConfig was removed. Migrate existing Ray Serve configuration to RayServeModelConfig, or select a Dynamo model and server configuration explicitly; see the inference-server migration.
Expanded Translation Controls
The translation workflow introduced in #1844 gained production-oriented TranslationStage controls in #2038, including segmentation mode and minimum segment length, prompt and generation configuration, concurrency and health checks, FAITH quality scoring and filtering, output modes, message reconstruction, and already-translated record handling. See Translation for the complete configuration surface.
Nemotron-Parse Throughput Tuning and Metrics
Nemotron-Parse now forwards engine_kwargs such as max_num_seqs and enforce_eager to vLLM and reports per-task inference time, pages, prompt and output tokens and characters, truncation, empty results, and retry counts. PDF partitioning also fans work out across workers. These changes landed in #2054; see Parse PDFs with Nemotron-Parse.
Consistent Stage Scheduling and with_() Overrides
Stage scheduling was standardized in #2077 and #2086:
- Use fixed
ActorPoolStrategyorTaskPoolStrategyworker counts for Ray Data. - Use minimum, maximum, and initial worker bounds for autoscaling actor pools.
- Describe Xenna resources per worker or per node.
- Apply per-instance scheduling overrides with
stage.with_(...).
See Stage worker sizing before carrying custom worker settings forward.
Improvements
Memory-Efficient Semantic Deduplication Fitting
K-means can fit centroids from a file-level sample and then assign the full dataset in a memory-bounded second pass (#1927). Configure KMeansStage.fit_data_fraction, SemanticDeduplicationWorkflow.fit_data_fraction, or TextSemanticDeduplicationWorkflow.kmeans_fit_data_fraction. A directly constructed KMeansStage can also save kmeans_centroids.npy through cache_path. See Semantic Deduplication for sampling, memory, and I/O tradeoffs.
Faster Optional-Dependency Imports
- Text classifier modules now load their implementations lazily, reducing cold-import cost and avoiding eager loading of unused optional dependencies (#1888).
AsyncOpenAIClientnow creates its OpenAI client lazily, so constructing stages does not initialize a network client until it is needed (#1890).
Repository Getting Started Agent Skill
The repository includes a Getting Started agent skill with modality-specific environment and pipeline verification scripts (#1746). It helps coding agents select installation extras and validate text, image, video, audio, Ray, and CPU pipeline setup directly from a source checkout.
Deduplication Input Extension Discovery
Deduplication workflows now infer input extensions from input_filetype in #2045: Parquet scans .parquet, while JSONL scans both .jsonl and .json. Explicit input_file_extensions still takes precedence, and unsupported file types fail early. See Deduplication.
Reliable FLEURS Downloads
The FLEURS tutorial now uses the Hugging Face content cache and retry behavior through hf_hub_download, supports cache_dir, and lets benchmarks set auto_download=False. This reduces rate-limit failures and repeated downloads (#2057).
Safer ArXiv Extraction
ArxivIterator(extract_tmp_dir=None) now extracts into the system temporary directory by default instead of the download directory. Set extract_tmp_dir to retain explicit placement (#2055).
Dynamo Server Configuration
Dynamo fixes in #2053 propagate DynamoServerConfig.subprocess_env to the frontend and workers, support explicit dyn_chat_processor="vllm" routing for pass-through multimodal requests, validate hybrid KV-cache settings, and render false-valued CLI options as --no-* flags.
NeMo Data Designer Tutorial Guidance
The NDD tutorial now configures stage workers with .with_(num_workers=2) rather than a Xenna-only stage spec (#2104). It also documents a workaround for local multi-GPU InferenceServer startup hangs on PCIe systems: restart Ray or the kernel and either set NCCL_P2P_DISABLE=1 or use tensor_parallel_size=1 (#2114). See NeMo Data Designer.
Video CPU Stage Scheduling
VideoFrameExtractionStage and ClipTranscodingStage now request one Ray Data CPU so adjacent CPU stages can be fused more effectively (#2110). Their Xenna resource declarations remain larger because they describe worker capacity for FFmpeg work; the Ray reservation does not reduce the computation performed by the stage.
Fixes
- Full TCP port range: Automatic port selection now includes port 65535 (#2024).
- UTF-8 JSONL output:
JsonlWriterpreserves non-ASCII characters by default instead of escaping them as Unicode sequences (#1762). - Distinct Nemotron-CC stage metrics: The five Nemotron-CC task stages now use distinct stage names in metrics and diagnostics (#1763).
- URL filter matching: URL-ratio and repetition filters correctly treat
-as a literal character in their URL-matching character class (#1880).
Breaking Changes
The 26.07 migration checklist provides before-and-after examples for every item below.
- Framework-owned task IDs:
Task.task_idis no longer accepted by task constructors. Executors assign deterministic IDs at stage boundaries (#2036, #2058). - Sentinel task classes: Construct empty sentinels with
EmptyTask()and check them withisinstance.SentinelTaskis the payloadless base class (#2062, #2070). - Video preprocessing option removed: Remove
model_does_preprocessand--captioning-model-does-preprocess; video models now use vLLM or Hugging Face preprocessing (#2109). - Video caption variant renamed: Replace the removed
qwenvariant withqwen2.5for equivalent behavior, or selectqwen3explicitly (#1827, #1883). - Inference server configuration is typed: Replace the removed
InferenceModelConfigwithRayServeModelConfigor Dynamo’sDynamoVLLMModelConfigandDynamoServerConfig. - Audio ASR worker rename: Replace stage argument
num_workerswithdataloader_num_workers.num_workersis now reserved for execution-worker configuration throughwith_()(#2086).
Dependency Changes
- Final CUDA and serving stack: The release container uses CUDA 12.9.1. Core Ray dependencies require
ray[default,data]>=2.55.1; the inference-server extra addsray[serve,llm]>=2.55.1,vllm>=0.14.1,<0.19, andai-dynamo==1.1.0on supported x86_64 non-macOS systems. The 26.07 lock resolves Ray 2.55.1, vLLM 0.18.1, and AI-Dynamo 1.1.0. The container builds HAProxy 2.8.20 for Ray Serve HAProxy ingress (#1895, #1957). - PyTorch and CUDA wheels: Dependency resolution pins PyTorch and torchaudio 2.10.0 and torchvision 0.25.0. Linux x86_64 and aarch64 installations resolve the CUDA 12.9 builds (
torch==2.10.0+cu129,torchaudio==2.10.0+cu129, andtorchvision==0.25.0+cu129). nemo_text_processingon Arm: The audio extra installsnemo_text_processingon x86_64 Linux, but no longer installs it on aarch64 or macOS because itspyninidependency is not supported there. Audio stages that import it, including inverse text normalization and WER processing, must be omitted or supplied through a separately supported environment on those platforms (#2049).flash-attnis no longer a direct video dependency: Thevideo_cuda12extra no longer pins or installsflash-attn. Built-in video pipelines use their declared dependencies; custom code that imports FlashAttention must install a compatible build explicitly (#2107). This applies to both x86_64 and aarch64.
See the architecture dependency matrix for upgrade actions.
Upgrade Checklist
- Create a Python 3.11, 3.12, or 3.13 environment.
- Apply every relevant code change in the 26.07 migration checklist.
- Reinstall the modality extras used by your pipeline and verify the architecture-specific dependency matrix.
- Run a representative pipeline with a small input set and inspect generated task IDs, worker counts, and output manifests.
- For resumable runs, start Ray before calling
Pipeline.run(checkpoint_path=...), use a local checkpoint directory, and verify that every stage is resumability-safe.