AI Infrastructure

AI dataset integrity: Detecting missing or changed data

Training datasets drift silently as files are moved, overwritten or lost. How to detect missing or changed data before a run.

6 min read
Grid of glowing data tiles with visible gaps on a violet-lit wall

A training job that quietly reads 4,000 fewer samples than it did last month will still finish, still produce a model, and still report a plausible accuracy figure. Nothing in the pipeline necessarily objects. Datasets lose files to failed transfers, expired lifecycle rules, interrupted cleanups and well intentioned reorganizations, and the loss usually surfaces as an unexplained change in model behavior rather than as an error message.

For infrastructure teams the useful framing is that a dataset is not self describing. Unless something records what it should contain, there is no way to notice what it no longer contains. Building that record and checking against it is inexpensive, and it is the difference between finding a data problem in a verification step and finding it in a model review three months later.

The three ways a dataset stops matching its record

Integrity problems in practice fall into three categories with different causes and different detection methods.

Objects go missing. A lifecycle rule expires a prefix nobody realized was still in use, a migration copies 99.7 percent of a set, or a cleanup script removes more than intended. This is the most common category and the easiest to detect, because a count comparison finds it.

Objects change. A file is overwritten with a corrected version, labels are updated in place, or a reprocessing job writes new content under the same keys. The dataset is complete but it is no longer the dataset the previous run used. Counting does not detect this; only content comparison does.

Objects silently degrade. Bits change on disk or in flight without anything reporting an error. This is rarer than the first two and more consequential, because the data looks normal and can propagate into derived datasets, packed training files and backups before anyone notices.

Why silent corruption is the hardest of the three

The first two categories have a human cause and a timestamp, so they can usually be traced once detected. Silent corruption has neither. It can sit undiscovered across several training cycles, and by the time a model behaves oddly the corrupted source may have been copied into packed formats, embeddings and derived datasets that all inherit the fault.

Media files make this worse because they degrade gracefully. A corrupted image often still decodes, with a band of noise that a human reviewer would spot instantly and an automated pipeline will happily train on. Audio and video behave similarly. The pipeline reports success because nothing threw an exception.

The defense is not to hope the storage layer catches everything, but to hold an independent record of what each object should contain and to check against it at meaningful moments.

What the storage layer already checks, and what it does not

Modern storage systems do a considerable amount of integrity work. Drives perform error detection internally, erasure coded or replicated systems detect and repair mismatched fragments, and background scrubbing verifies stored data against its own checksums over time. That machinery is effective against media faults and it is a strong reason to prefer a system that does it.

What the storage layer cannot detect is a change that arrived through a legitimate write. If an application overwrites an object, or a user deletes one, the system records a valid operation. The contents are protected against corruption but not against being replaced. The protection scheme answers a different question from the one dataset integrity asks.

It also cannot tell you that something is missing, because it has no expectation of what should be present. Only a manifest, a database or an external record establishes that a set of 12.4 million objects is supposed to contain 12.4 million objects.

Building a verification routine

A workable routine has three components: a record of what should exist, a check that compares reality against it, and a defined response when they disagree. The table below covers the checks most teams find worth automating.

CheckDetectsCost to run
Object count against manifestMissing or unexpectedly added filesLow, a listing operation
Size and modification time comparisonObjects replaced or truncatedLow, metadata only
Content hash verificationAny change to contents, including silent corruptionHigh, requires reading the data
Sampled hash verificationWidespread corruption, at a fraction of the costModerate, tune the sample rate
Decode validationFiles that are present but unreadableModerate, processor bound
Label and split consistencyAnnotation drift and orphaned labelsLow, catalog comparison
Version identifier comparisonObjects rewritten since the run that used themLow, if versioning is enabled

Full hash verification of a multi petabyte dataset is expensive enough that most teams reserve it for specific moments rather than running it continuously. Sampled verification, run regularly, catches systemic problems early at a manageable cost, and the full check is kept for migrations and for datasets behind models that need to be defensible.

When to verify

Four moments justify a check. Before a training run, a count and metadata comparison is cheap and catches the most common problems while there is still time to fix them. After ingestion of a new source, verification confirms the transfer completed and the files are readable. After any migration or bulk copy, a full verification is warranted, because moving object data is where silent partial loss most often occurs. And before a model review or audit, verification establishes that the dataset still matches the record the run claimed to use.

Verification results are worth storing rather than discarding once they pass. A history of checks makes it possible to establish when a problem first appeared, which is what turns a discovery into a fixable incident rather than an open question.

The response to a failed check should be defined in advance. A missing object might be recoverable from a retained version, from a backup or from the original source, and the right answer differs by dataset. Deciding that in the moment, under pressure, tends to produce inconsistent outcomes.

Where Scality RING fits in dataset verification

Scality RING performs continuous background verification of stored data and repairs damage automatically, which addresses the media level category without operational effort. That handles degradation on disk, but it is deliberately separate from the question of whether the dataset still contains what the pipeline expects.

For that question, object versioning is the practical tool. With versioning enabled, an overwritten object retains its previous state, so a check that compares version identifiers against a stored manifest can tell not just that something changed but what it was before. Object lock can hold the objects behind a deployed model immutable for a defined period, which removes an entire class of accidental change from the dataset that most needs to stay stable. Those controls work best when applied selectively, to the prefixes that feed production models and to the manifests themselves, rather than across an entire environment.

Judge integrity by what you can prove, not what you assume

The test of a verification design is simple to state: pick a dataset, run the check, and see whether the result is a confident statement or a shrug. A team that can say that 12,412,883 objects were expected, all were present, and a 2 percent sample matched its recorded hashes is in a different position from a team that believes the data is probably fine.

Start with the cheap checks on every dataset and add expensive ones where the consequences justify them. Most of the value comes from the count and metadata comparison, which costs almost nothing and finds the failure that actually happens most often: data that quietly went away while everyone assumed it was still there.

See Scality in action

Exabyte-scale object storage for AI data and cyber resilience. Talk to our team about what it can do for yours.

Request a demo