Reproducible checkpoints

The default checkpoint_format="full" keeps DeepMTP’s historical model, optimizer, and configuration entries and may include a versioned metadata manifest:

model_state_dict
optimizer_state_dict
config
metadata                  # optional in legacy checkpoints
  format_version
  created_at
  preprocessing
  training
  environment
  tracking

The manifest records the model seed, validation setting, selected epoch, validation and test results, parameter counts, effective device, default floating-point dtype, Python and relevant package versions, and the current Git commit and dirty-state when the source checkout is available. Tracking identifiers such as the W&B run ID are included when a capable reporter is active.

Foundation adapter format

LoRA foundation-model runs can instead set checkpoint_format="foundation_adapter". DeepMTP then writes one foundation_adapter.zip containing PEFT-native safe adapter weights, task-owned DeepMTP weights, normalized configuration, exact base-model and tokenizer identities, provenance metadata, and per-file SHA-256 hashes. It omits foundation backbone tensors and optimizer state, so it is suitable for inference and warm starts rather than exact training resume. Fully fine-tuned foundation branches require the default full format.

Both formats restore through checkpoint_dir and can be published and restored as W&B model Artifacts. See Foundation-model sequence encoders for the archive layout, revision requirements, and examples.

Dense preprocessing replay

When data_process performs legacy Standard or MinMax dense-feature scaling, it fits only on training entities. The fitted offsets and scales are serialized explicitly rather than pickling a scikit-learn object:

from DeepMTP import data_process

train, validation, test, data_info = data_process(
    raw_data,
    validation_setting="B",
    scale_instance_features="Standard",
    shuffle=False,
)

preparation_state = data_info["data_preparation_state"]

The same state is attached to all three processed splits. Passing those splits to DeepMTP.train captures it in the runtime configuration and checkpoint. DeepMTP rejects a mixture of splits carrying different states.

A restored model exposes a copy through preprocessing_state and can apply one saved branch scaler directly:

from DeepMTP import DeepMTP

restored = DeepMTP(
    {
        "results_path": "./results",
        "experiment_name": "restored",
    },
    checkpoint_dir="./results/original/model.pt",
)

scaled_instances = restored.transform_dense_features(
    raw_instance_features,
    branch="instance",
)

To prepare another compatible dataset with exactly the saved statistics, pass the full state back to data_process. Saved scaler methods take effect even when the corresponding scale_*_features argument is omitted:

train, validation, test, data_info = data_process(
    new_raw_data,
    validation_setting="B",
    dense_preprocessing_state=restored.preprocessing_state,
)

The state validates its format version, feature width, finite numeric values, split ratios, seed, and scaling method before transforming data.

Tabular preprocessing

Explicit TABULAR branches continue to store their schemas, category vocabularies, imputation values, and numeric statistics in instance_tabular_preprocessing_state and target_tabular_preprocessing_state. The checkpoint manifest references those normalized configuration values alongside the legacy dense state, so the two preprocessing paths remain distinct.

Loading and compatibility

Full checkpoints written before the manifest was introduced remain loadable. Their three required keys are unchanged, checkpoint_metadata is None, and configuration overrides supplied to the constructor retain their historical precedence. A direct call to ExperimentStore.save_checkpoint without metadata also writes the exact legacy three-key payload.

New metadata formats are rejected when their version is unknown instead of being interpreted incorrectly. The manifest improves provenance and inference replay; it is not an exact interrupted-training resume mechanism. It does not capture epoch-local random-number-generator states or dataloader cursor state.

PyTorch checkpoint files can contain Python objects. Load only checkpoints and W&B Artifacts from sources you trust.