Reproducibility and Archiving#

Practices for traceable MLFF projects.

Seeds#

Trainer.seed controls Python, NumPy, and PyTorch RNGs for splitting and initialization.

Trainer.Splitter.seed controls partition indices separately.

Caution

CUDA kernels may still introduce nondeterminism even with fixed seeds.

Archive with each model#

Minimum artifact set:

  • config.yaml from training output

  • best/ and optionally last/ checkpoints

  • Training train.yaml (or Enerzymette-generated train.yaml per iteration)

  • processed_dataset_<hash>/ or instructions to rebuild from raw pickle

  • Split index files if Splitter.save: true

Document environment#

Record:

  • Python, PyTorch, torch-scatter, Enerzyme commit hash

  • Optional: NequIP, PLUMED, TeraChem versions

  • Conda export or requirements.yaml used

Enerzymette task archives#

For external AL, archive the entire task root:

  • config/ templates

  • al.sh launcher

  • cluster.xyz, cluster.mol

  • Each FFxx_* iteration directory or symlink policy

  • Reference PDB/SDF paths cited in configs

Pretrain chains#

pretrain_path links iterations. When publishing results, note the full chain FF00 FF01 ... FFxx and which checkpoint (best vs last) was used for production simulations.

Config drift#

Enerzymette rewrites paths each round. The resolved config.yaml in FFxx_training/ is the authoritative record for that iteration, not the top-level template alone.

QM data provenance#

Store:

  • Annotate annotate.yaml per round

  • Fragment SDF inputs

  • TeraChem template/settings reference

  • terachem_timing reports for failed-run triage