Skip to content

Experiment Tracking and Reproducibility by Scale

Last updated: 2026-05-24

Experiment tracking is the control plane for deciding whether an ML result is disposable, comparable, promotable, auditable, or reusable. A run is useful only when the next engineer, pipeline, reviewer, or incident-response process can answer: what code, data, split, labels, config, environment, hardware, seeds, preprocessing, map/calibration/runtime inputs, metrics, costs, and downstream artifacts produced this result?

This page deepens the experiment-tracking plane in mlops-scale-research-scope.md. Use it with dataset-split-leakage-controls-by-scale.md for split independence, mlops-reference-architectures-by-scale.md for component placement, mlops-migration-checklist-by-scale.md for adoption gates, model-governance-release-evidence.md for promoted artifact evidence, and gpu-queueing-finops-by-scale.md for run cost and capacity metadata.

The goal is not to log everything. The goal is to make the run authority explicit: which runs are notes, which are baselines, which are candidate artifacts, which are release evidence, and which can be ignored.


Core Principle

Experiment tracking should preserve three kinds of truth:

TruthQuestion it answersMinimum evidence
Rebuild truthCan the run be recreated or explained?Code commit, dependency lock, config, seed policy, container or environment, command
Comparison truthCan this result be compared fairly with another run?Dataset snapshot, split ID, metric spec, evaluator version, label schema, excluded data
Release truthCan the output affect production, maps, labels, or safety evidence?Registry link, output digest, approval state, compatibility manifest, audit retention, rollback impact

For autonomy, comparison truth is usually the hard part. Two runs with the same architecture are not comparable if one uses a different map revision, calibration package, semantic taxonomy, pseudo-label batch, camera projection, local holdout, or replay suite.


Run Authority States

Every tracked run should carry an authority state. The state prevents exploratory results from becoming hidden baselines and prevents training jobs from silently becoming release approvals.

StateMeaningAllowed downstream useRequired controls
scratch_runQuick local experiment or notebook probePersonal learning onlyOwner, date, rough data pointer
exploratory_runResult may inform design directionResearch discussionCode commit, config, data pointer, metric note, limitations
baseline_runComparable reference used in reports or roadmapsFuture run comparisonFrozen split, environment lock, metric spec, failure examples
candidate_runProduces an artifact for product reviewRegistry candidate, shadow review, labeler reviewDataset snapshot, split/leakage report, output digests, eval report, runtime/export evidence
release_runProduces or verifies a deployable artifactShadow, canary, champion, rollbackRelease packet, compatibility manifest, attestation, rollback target, approver handoff
evidence_runProduces safety, audit, replay, or incident evidenceSafety case, audit, corrective actionImmutable logs, retention hold, safety-case IDs, waiver/expiry state
platform_benchmarkMeasures shared platform, model family, or hardware laneCapacity planning, architecture choice, platform SLOStandard workload, hardware/software bill, cost, queue wait, reproducibility level

Authority is not the same as model quality. A weak baseline can still be authority-bearing if it anchors comparison. A high-scoring notebook result remains non-authoritative if nobody can reconstruct its data and evaluation path.


Reproducibility Levels

Use these levels to avoid vague claims such as "reproducible" or "tracked."

LevelDefinitionTypical scale
R0: note-onlyHuman-readable note exists but the run cannot be rerun reliablyS0 throwaway work
R1: command-replayableCommand, config, data pointer, and metric output are savedS0-S1
R2: data/config-replayableImmutable data snapshot, split ID, config hash, metric spec, and evaluator are recordedS1-S2
R3: environment-replayableContainer/image digest, dependency lock, hardware class, seed policy, and framework versions are recordedS2-S3
R4: tolerance-boundRebuild can reproduce metrics within an agreed tolerance on an equivalent hardware/software laneS2-S4
R5: evidence-lockedRun record, logs, artifacts, policy checks, and output digests are immutable for the audit or safety-case windowS4-S5

Bitwise determinism is often unnecessary and sometimes unrealistic for GPU training. PyTorch explicitly warns that exact reproducibility is not guaranteed across releases, commits, platforms, or CPU/GPU paths. The practical target for most S2-S4 autonomy work is R4: metrics and outputs are reproducible within declared tolerance on the supported lane, with nondeterministic sources named.


Scale Ladder

ScaleTracking postureReproducibility targetUpgrade trigger
S0 notebook researchRun note, git commit, config, data pointer, metric, failure sampleR1 for any result that leaves the notebookAnother person must understand or reuse the result
S1 repeatable prototypeExperiment tracker or committed run table, frozen split, Docker/env lock, baseline scriptR2-R3 for baseline runsTwo candidates need fair comparison
S2 single-product productionTracker run linked to dataset manifest, split/leakage report, registry candidate, export/eval artifactsR3-R4 for candidate and release runsArtifact reaches shadow, canary, customer demo, production labels, or map export
S3 fleet and multi-siteSite/ODD run lineage, active-learning batch IDs, replay package IDs, map/calibration/runtime scopeR4 for site-scoped candidatesLocal ODD cells can pass/fail independently
S4 regulated safety-criticalEvidence-locked run records, immutable logs, approver handoff, retention, rollback drillR5 for release and incident evidenceRun supports a safety claim, waiver, incident, or reportability decision
S5 platform scaleOrganization experiment/eval warehouse, lineage graph, policy templates, multi-tenant namespaces, cost/SLO metadataR4-R5 by artifact authorityMany teams share data, evals, registries, GPUs, and release policies

The practical transition is from "log a run" at S1 to "govern run authority" at S2+. A tracker full of runs is not a release system unless the authoritative runs point to immutable data, split manifests, output artifacts, and review states.


Run Manifest Contract

A training, evaluation, labeling, replay, or benchmark run should emit a manifest. The manifest may start as JSON, YAML, or Markdown, then move into MLflow, W&B, TFX ML Metadata, OpenLineage, or an internal warehouse.

Field groupRequired fieldsNotes
Identityrun_id, run_authority, owner, project, task, hypothesis, created_at, parent_run_idParent/child runs are useful for sweeps, folds, multi-site runs, and export/eval substeps
Coderepo, code_commit, repo_dirty_state, branch, config_uri, config_hash, train_command, eval_commandDirty state should block baseline/candidate authority unless patched artifacts are archived
Environmentcontainer_digest, dependency_lock, framework_versions, python_version, cuda_driver, os_image, hardware_classHardware class is enough at R3; exact worker identity is needed at R5
Randomnessseed_policy, global_seed, dataloader_seed, augmentation_seed, determinism_flags, known_nondeterministic_opsCapture tolerance when deterministic mode is too slow or unsupported
Datadataset_snapshot_ids, split_id, split_policy_version, leakage_report_id, excluded_data, data_quality_report_idUse immutable IDs, not bucket prefixes
Labelslabel_schema_id, taxonomy_version, label_batch_ids, qa_report_id, allowed_use_state, pseudo_label_batch_idsMap-derived and foundation-model labels need separate allowed-use states
Autonomy contextsite_ids, odd_cells, vehicle_kits, map_ids, calibration_ids, runtime_ids, telemetry_schema_idRequired when model behavior depends on maps, calibration, runtime, or site semantics
Modalitylidar_sensor_set, camera_sensor_set, projection_calibration_hash, image_distillation_teacher, fusion_modeLiDAR-only, image-conditioned, image-distilled, and LiDAR-image fusion runs are not interchangeable
Features and indicesfeature_snapshot_ids, embedding_index_ids, corpus_snapshot_ids, point_in_time_join_reportRequired if features or retrieval can influence training/eval/evidence
Modelarchitecture, pretrained_checkpoint, init_policy, hyperparameters, augmentation_policy, loss_spec, class_weightsFor segmentation, include class order and ignored/release-state masks
Evaluationmetric_spec_id, evaluator_version, eval_dataset_ids, replay_pack_ids, slice_set_id, threshold_policy, comparison_baselineMetric spec must be versioned before S2 promotion
Outputscheckpoint_uri, model_digest, export_artifacts, plots, failure_examples, registry_version, release_packet_idOutput digests are required before registry alias movement
Compute and costgpu_type, gpu_count, wall_time, queue_wait, utilization, storage_cost, egress_cost, cost_centerRequired at S3+, useful earlier for expensive experiments
Governancereviewer, policy_result, retention_class, allowed_downstream_use, waiver_id, expiry, incident_or_safety_case_idsSeparates artifact production from approval

At S2+, the manifest should be emitted by the pipeline, not typed by hand after the result is known.


Architecture Options

OptionBest fitAdvantagesDisadvantagesAutonomy caveat
Git plus Markdown/CSV run tableS0, very small S1Simple, reviewable, no service dependencyHard to query, weak artifact handling, manual discipline requiredGood only while runs do not affect release artifacts
MLflow Tracking plus Model RegistryS1-S3, self-hosted or managed model teamsTracks params/metrics/artifacts, groups runs into experiments, can link models and datasets, registry path is clearMetadata model needs conventions; registry alone does not enforce safety evidenceAdd custom tags for map, calibration, ODD, split, labeler, and compatibility IDs
W&B Experiments and ArtifactsS1-S3 research-heavy teamsStrong UI, sweeps, media logging, system metrics, artifact workflows, collaborationSaaS/data-boundary review may be needed; governance still needs local policyGood for segmentation visualizations, failure panels, and site-sliced dashboards if data policy allows
DVC experiments and pipelinesS1-S2 reproducible data/model workflowsGit-native data/pipeline versioning, metrics diffs, experiment comparison, cache reuseUI/governance less complete than dedicated trackers; large teams need conventionsStrong fit for immutable LiDAR/map snapshots and pipeline stages
TensorBoardS0-S2 deep learning diagnosticsLightweight metrics, graphs, histograms, embeddings, common framework supportNot a run-governance system by itselfUseful for debugging training dynamics, not enough for release evidence
TFX ML MetadataS3-S5 pipeline platformsModels artifacts, executions, contexts, lineage queries, and reuse of previous executionsHeavier integration; strongest inside pipeline platformsUseful when train/eval/export/replay are typed components with lineage
OpenLineage-compatible lineage backendS3-S5 data and pipeline observabilityStandard run/job/dataset event model, cross-platform lineage graph, extensible facetsDoes not replace experiment UI or model registryGood for joining data pipelines, feature builds, training, replay, and map exports
Custom experiment/eval warehouseS4-S5 autonomy platformCan model map/calibration/runtime/site/safety concepts exactlyExpensive to build and maintain; risk of bespoke lock-inJustified when release evidence, fleet telemetry, and scenario replay need one query surface

Industry-proven systems usually combine tools. A pragmatic S2 lane can use DVC for dataset snapshots, MLflow or W&B for run tracking, a registry for model aliases, and a release packet in the governance system. S5 platforms often separate raw lineage, experiment UI, registry state, policy decisions, and eval warehouse while keeping stable artifact IDs across all of them.


Run Comparison Rules

Do not compare runs unless these contracts are compatible:

ContractCompatibility requirement
Task and taxonomySame task definition, class order, ignored labels, release-state masks, and allowed-use states
Dataset and splitSame dataset snapshot family, split policy, leakage report, local holdout policy, and excluded data
Metric and evaluatorSame metric spec, threshold policy, evaluator version, slice set, and confidence interval method
ModalitySame input contract or explicitly declared comparison lane: LiDAR-only, LiDAR-image fusion, image-distilled LiDAR, image-conditioned map labeler
Map and calibrationSame source-map acceptance policy, map revision family, calibration set, projection QA, and pose/registration quality threshold
RuntimeSame export path, precision, hardware target, preprocessing, post-processing, and latency/memory budget if production relevance is claimed
Evidence authoritySame or higher run authority state; a scratch run cannot replace a baseline or release run

If a contract changes intentionally, create a new comparison family. This is common when a team changes semantic taxonomy, adopts map-derived labels, introduces camera distillation, switches from sparse convolution to point transformer, or starts site-specific adaptation.


Autonomy-Specific Controls

Aggregated LiDAR Maps and Semantic Segmentation

For aggregated-map semantic segmentation, a run is not defined only by point clouds and labels. It also depends on the map-building substrate.

Required run dependencies include:

  • registered source-map IDs, multi-session merge method, and pose graph quality summary;
  • map-hygiene layer digests for dynamic residual removal, static-but-transient quarantine, and false deletion masks;
  • semantic taxonomy and release-state taxonomy;
  • tile ledger, tile overlap/stitching policy, ignored border state, and seam-confusion checks;
  • LiDAR intensity/range normalization, voxelization or superpoint partitioning, and any camera projection/colorization inputs;
  • source-map acceptance package and MapEval-style geometry QA before semantic labeling;
  • pseudo-label invalidation policy for downstream training exports.

LiDAR and Image Inputs

LiDAR-only and image-supported runs need different release contracts:

Input laneWhat must be trackedRelease implication
LiDAR-onlySensor model, range/intensity normalization, sweep aggregation, registration quality, map-hygiene masksBest release portability when runtime map has no image dependency
LiDAR plus image fusionCamera calibration, synchronization, projection QA, image coverage, exposure/weather qualityStronger semantics but release depends on camera provenance and projection validity
Image-distilled LiDARTeacher model, image corpus, teacher checkpoint, distillation labels, projection QARuntime may remain LiDAR-only, but training evidence depends on image teacher lineage
Open-vocabulary or VLM-assisted labelingPrompt/model/retrieval IDs, reviewer disposition, candidate/accepted state, eval packCandidate labels cannot become release labels without labeler governance

ML-SLAM, dynamic-object removal, learned registration, neural implicit maps, and Gaussian maps can feed tracking runs in two ways:

RoleTracking rule
Upstream map producerTreat SLAM/map-cleaning run as a data-product run with source logs, registration method, dynamic removal method, map acceptance metrics, and map digest
Training/eval dependencyReference the exact map product, removal sidecar, static/transient labels, and acceptance package in the downstream model run manifest

Stationary people, parked service equipment, movable barriers, and temporary construction assets are not simply dynamic-object removal errors. They are release-state decisions. Runs must distinguish semantic class, observed motion, persistence evidence, operations context, and map eligibility.

Non-Road Managed Sites

Airport aprons, terminal frontages, service yards, warehouses, ports, campuses, mines, and construction districts create local ODD semantics that generic road datasets do not capture. Track:

  • site/zone/task IDs, not only dataset name;
  • route family, operational shift, weather/lighting, work-zone state, and map revision;
  • local holdout and local replay packs;
  • site-specific terminology in prompts or annotation instructions;
  • whether a run supports a global model, site adapter, local LoRA, map update, or operations-only dashboard.

Pipeline Design Pattern

S1-S2 Candidate Pipeline

  1. Create immutable dataset and split manifests.
  2. Launch training through a script, DVC stage, CI job, or orchestrator.
  3. Emit a run manifest before training starts.
  4. Log metrics, parameters, artifacts, system metrics, and failure samples during training.
  5. Run evaluator with a versioned metric spec and slice set.
  6. Export model/package artifacts and compute digests.
  7. Register candidate artifact without moving production aliases.
  8. Attach release packet only if output authority moves beyond baseline/candidate.

S3-S4 Fleet Evidence Pipeline

  1. Partition by site/ODD cell and local holdout.
  2. Run train/eval/replay/export as separate child runs under one candidate authority record.
  3. Join run records with active-learning batch IDs, map/calibration/runtime IDs, and replay package IDs.
  4. Create evidence run records for safety slices, incident replay, and rollback drills.
  5. Block alias movement when any required child run lacks R4/R5 evidence.
  6. Preserve logs, artifacts, and policy results for the retention window.

The important design choice is that training, evaluation, export, replay, and release review are separate state transitions. A green training job can produce a candidate. It cannot approve a release by itself.


Scorecards

KPIS0-S1 thresholdS2-S3 thresholdS4-S5 threshold
Run manifest coveragePreserved baselines have manifestCandidate/release runs have machine-generated manifestEvidence runs have immutable manifest and audit export
Rebuild successAnother engineer can rerun baselineCI/pipeline rebuilds within metric toleranceRebuild drill passes for evidence-retention sample
Comparable baseline coverageBaselines name data/split/metricCandidate report compares against compatible baselinePolicy blocks unsupported comparisons
Dirty-state rateManual reviewDirty candidate runs are blocked unless patch is archivedDirty evidence runs are disallowed
Dataset/split linkageFrozen split for baselineDataset, split, leakage report linked to tracker and registryHoldout access and evidence retention are audited
Artifact linkageCheckpoint path savedOutput digest, registry version, export package, eval report linkedAttestation and policy result linked to release packet
Run cost coverageManual note for expensive runsGPU/cost center/queue wait recordedUnit cost and reserved-assurance capacity reported
Run-to-incident traceabilityNot requiredActive artifact IDs join to telemetry and incidentsIncident evidence freezes run/map/runtime state

Release blockers should include missing run manifest, missing dataset/split linkage, unsupported run comparison, dirty candidate state, missing output digest, missing evaluator version, and missing reproducibility level for the requested authority.


Failure Modes

Failure modeConsequenceControl
Tracker used as a scrapbookMany runs exist but nobody knows which is authoritativeRequire run authority state and lifecycle transitions
Baseline not frozenNew candidates compare against a moving targetPromote baseline only with dataset/split/config/evaluator manifest
Dirty code promotedResult cannot be rebuilt from source controlBlock candidate/release authority unless patch bundle is archived and digested
Mutable data path loggedRebuild silently uses different samplesRequire immutable dataset snapshot and split ID
Metric spec driftApparent improvement is evaluator changeVersion metric spec, evaluator code, threshold policy, and slice set
Modality mismatchLiDAR-only and image-assisted results are compared as if identicalTrack modality lane and release contract
Map/calibration mismatchModel passes offline but fails on active map or vehicle kitInclude map, calibration, runtime, and telemetry IDs in the run manifest
Sweep best run cherry-pickedBest seed or config becomes claim without multiple-run evidenceRequire seed policy, variance reporting, and baseline comparison set
Tracker does not link to registryCandidate cannot be connected to deployed artifactStore registry version, output digest, and export package in the run record
Evidence garbage-collectedAudit or incident review cannot reproduce approvalApply retention class and immutable evidence store at S4-S5

  • mlops-scale-research-scope.md - maturity ladder and lifecycle controls.
  • mlops-reference-architectures-by-scale.md - architecture patterns and durable interfaces.
  • mlops-migration-checklist-by-scale.md - transition gates for adding trackers, registries, orchestration, and policy.
  • mlops-scorecards-and-kpis-by-scale.md - KPIs and release blockers for reproducibility and governance.
  • dataset-split-leakage-controls-by-scale.md - split manifests, leakage reports, and holdout independence.
  • model-monitoring-drift-response-by-scale.md - drift events, retraining triggers, and incident follow-up.
  • model-governance-release-evidence.md - registry aliases, release packets, and approval evidence.
  • secure-artifact-attestation-profile.md - artifact signing, SBOM/provenance, and policy verification.
  • gpu-queueing-finops-by-scale.md - GPU job metadata, queueing, unit economics, and assurance capacity.
  • feature-embedding-store-ops-by-scale.md - feature, embedding, vector index, and snapshot reproducibility.
  • offboard-labeler-registry-by-scale.md - labeler, prompt, evaluator, threshold, and reviewer workflow governance.
  • map-derived-pseudo-label-invalidation-protocol.md - invalidation state machine for map-derived training exports.
  • ../data-platform/data-catalog-lineage-quality-ops.md - data product lineage and promotion states.
  • ../../20-av-platform/compute/training-infrastructure.md - GPU infrastructure, orchestration, DVC, and tracker examples.
  • ../../30-autonomy-stack/perception/overview/aggregated-map-semantic-segmentation.md - aggregated-map segmentation pipeline and release contracts.
  • ../../30-autonomy-stack/localization-mapping/overview/ml-related-slam-research-scope.md - ML-SLAM substrate and map-cleaning handoff.

Sources

Public research notes collected from public sources.