maltefranke commited on
Commit
1117e49
·
verified ·
1 Parent(s): cd01066

Discover QM9 and GEOM epoch 100; order model tables QM9, GEOM-Drugs, ChEMBL

Browse files
README.md CHANGED
@@ -4,16 +4,17 @@ tags:
4
  - chemistry
5
  - molecular-generation
6
  - flow-matching
7
- - chembl3d
8
  - geom-drugs
 
9
  - 3d
10
  - arxiv:2606.07239
11
  ---
12
 
13
  # Morph: 3D molecular generation
14
 
15
- Unconditional molecular generation checkpoints trained on **ChEMBL3D** and
16
- **GEOM-Drugs**, with the configurations, vocabularies and training distributions
17
  needed for inference. No training dataset is required to load a model or generate
18
  molecules.
19
 
@@ -23,9 +24,10 @@ See our [paper](https://arxiv.org/abs/2606.07239), *Generative Molecular Morphin
23
 
24
  | Dataset | Model name | Hydrogen representation | Completed epochs | Files |
25
  | --- | --- | --- | --- | --- |
 
 
26
  | ChEMBL3D | `chembl3d-explicit-h` | Explicit H atoms | 200, 300, 400 | [Bundle](https://huggingface.co/maltefranke/morph/tree/main/chembl3d/explicit_h) |
27
  | ChEMBL3D | `chembl3d-implicit-h` | Heavy atoms; implicit H | 100, 200, 300 | [Bundle](https://huggingface.co/maltefranke/morph/tree/main/chembl3d/implicit_h) |
28
- | GEOM-Drugs | `geom-explicit-h` | Explicit H atoms | 50 | [Bundle](https://huggingface.co/maltefranke/morph/tree/main/geom/explicit_h) |
29
 
30
  Epoch numbers count **completed training epochs**: `epoch_050.ckpt` means 50
31
  completed epochs and stores the zero-based Lightning counter `epoch=49`.
@@ -64,7 +66,7 @@ generation inside a compute allocation.
64
  ```python
65
  from morph.inference import load_pretrained
66
 
67
- model = load_pretrained("geom-explicit-h", epoch=50, device="cuda")
68
 
69
  trajectories, validity, vocab, coordinate_std = model.generate(
70
  n_mols=64,
@@ -74,9 +76,11 @@ trajectories, validity, vocab, coordinate_std = model.generate(
74
  )
75
  ```
76
 
77
- Use `device="cpu"` for CPU inference. The same interface loads ChEMBL3D:
78
 
79
  ```python
 
 
80
  model = load_pretrained("chembl3d-explicit-h", epoch=400, device="cuda")
81
  # Or choose the heavy-atom model:
82
  model = load_pretrained("chembl3d-implicit-h", epoch=300, device="cuda")
@@ -102,8 +106,8 @@ multiply them by `coordinate_std` again.
102
  Generate GEOM-Drugs molecules and save valid structures to SDF:
103
 
104
  ```bash
105
- morph generate --model geom-explicit-h --epoch 50 \
106
- --device cuda --batch 64 --batch-size 16 --output geom-e50.sdf
107
  ```
108
 
109
  `--batch` is the total number of generation attempts. Add `--save-trajs` to save
@@ -113,7 +117,7 @@ weights, and `--steps` and `--seed` control sampling.
113
  Download a portable bundle without loading the model:
114
 
115
  ```bash
116
- morph models download geom-explicit-h --epoch 50 --local-dir morph-models
117
  ```
118
 
119
  Load that local bundle without network access or catalog lookup:
@@ -121,12 +125,12 @@ Load that local bundle without network access or catalog lookup:
121
  ```python
122
  model = load_pretrained(
123
  weights_dir="morph-models/geom/explicit_h",
124
- epoch=50,
125
  device="cuda",
126
  )
127
  ```
128
 
129
- Use another model name from the table for ChEMBL3D. The interface also accepts
130
  direct Hub repository IDs with `subfolder` and `revision`. Pass `cache_dir` to
131
  choose a cache location, or `local_files_only=True` to load a previously cached
132
  release without network access. The corresponding CLI options are `--cache-dir`
@@ -134,7 +138,7 @@ and `--offline`.
134
 
135
  The root `sample.py` remains available as the archived ChEMBL3D sampling entry
136
  point with its corresponding bundled runtimes. The shared interface above
137
- supports all three published model variants.
138
 
139
  ## Reproducibility
140
 
@@ -144,10 +148,10 @@ The bundles live alongside the corresponding model files on Hugging Face:
144
 
145
  | Model | Configuration and source |
146
  | --- | --- |
 
 
147
  | ChEMBL3D, explicit H | [Training bundle](https://huggingface.co/maltefranke/morph/resolve/main/chembl3d/explicit_h/training_bundle.tar.gz) |
148
  | ChEMBL3D, implicit H | [Training bundle](https://huggingface.co/maltefranke/morph/resolve/main/chembl3d/implicit_h/training_bundle.tar.gz) |
149
- | GEOM-Drugs, explicit H | [Training bundle](https://huggingface.co/maltefranke/morph/resolve/main/geom/explicit_h/training_bundle.tar.gz) |
150
- | QM9, explicit H (no published weights yet) | [Training bundle](https://huggingface.co/maltefranke/morph/resolve/main/qm9/explicit_h/training_bundle.tar.gz) |
151
 
152
  For example, download and unpack the GEOM training bundle:
153
 
@@ -165,8 +169,9 @@ are recorded in the release metadata and bundle manifests.
165
 
166
  | Dataset | Training filter | Representation |
167
  | --- | --- | --- |
168
- | ChEMBL3D | At most 100 total atoms, including H before hydrogen removal | Explicit-H and implicit-H variants |
169
  | GEOM-Drugs | At most 72 total atoms, including H | Explicit-H variant |
 
170
 
171
  Both ChEMBL3D variants use the same split membership: 1,474,008 training,
172
  184,295 validation and 184,242 test molecules. The implicit-H model predicts
@@ -174,8 +179,11 @@ heavy atoms, bonds and formal charges; RDKit infers hydrogens during conversion
174
  and validity checking. Its geometry statistics and coordinate normalization were
175
  recomputed for the heavy-atom representation.
176
 
177
- The GEOM-Drugs epoch 50 checkpoint was obtained by resuming the best checkpoint
178
- after 48 completed epochs. The resumed run validates every epoch and retains
 
 
 
179
  checkpoints every fifth epoch. Only the epochs listed in the catalog have been
180
  published here.
181
 
@@ -204,11 +212,13 @@ Each model directory contains:
204
 
205
  The published bundles were checked for strict current/EMA weight loading and
206
  end-to-end sampling. These are functionality checks, not validity benchmarks.
207
- The GEOM release also passed remote file-size and hash verification.
208
 
209
  The [ChEMBL3D release manifest](https://huggingface.co/maltefranke/morph/blob/main/manifest.json)
210
- describes the original ChEMBL3D release, including its historical model card. GEOM has its own
211
- [bundle manifest](https://huggingface.co/maltefranke/morph/blob/main/geom/explicit_h/manifest.json).
 
 
212
  Original training configs contain historical cluster paths; use `config.yaml`
213
  through the inference loader for portable generation.
214
 
 
4
  - chemistry
5
  - molecular-generation
6
  - flow-matching
7
+ - qm9
8
  - geom-drugs
9
+ - chembl3d
10
  - 3d
11
  - arxiv:2606.07239
12
  ---
13
 
14
  # Morph: 3D molecular generation
15
 
16
+ Unconditional molecular generation checkpoints trained on **QM9**, **GEOM-Drugs**
17
+ and **ChEMBL3D**, with the configurations, vocabularies and training distributions
18
  needed for inference. No training dataset is required to load a model or generate
19
  molecules.
20
 
 
24
 
25
  | Dataset | Model name | Hydrogen representation | Completed epochs | Files |
26
  | --- | --- | --- | --- | --- |
27
+ | QM9 | `qm9-explicit-h` | Explicit H atoms | 1,000, 1,500 | [Bundle](https://huggingface.co/maltefranke/morph/tree/main/qm9/explicit_h) |
28
+ | GEOM-Drugs | `geom-explicit-h` | Explicit H atoms | 50, 100 | [Bundle](https://huggingface.co/maltefranke/morph/tree/main/geom/explicit_h) |
29
  | ChEMBL3D | `chembl3d-explicit-h` | Explicit H atoms | 200, 300, 400 | [Bundle](https://huggingface.co/maltefranke/morph/tree/main/chembl3d/explicit_h) |
30
  | ChEMBL3D | `chembl3d-implicit-h` | Heavy atoms; implicit H | 100, 200, 300 | [Bundle](https://huggingface.co/maltefranke/morph/tree/main/chembl3d/implicit_h) |
 
31
 
32
  Epoch numbers count **completed training epochs**: `epoch_050.ckpt` means 50
33
  completed epochs and stores the zero-based Lightning counter `epoch=49`.
 
66
  ```python
67
  from morph.inference import load_pretrained
68
 
69
+ model = load_pretrained("geom-explicit-h", epoch=100, device="cuda")
70
 
71
  trajectories, validity, vocab, coordinate_std = model.generate(
72
  n_mols=64,
 
76
  )
77
  ```
78
 
79
+ Use `device="cpu"` for CPU inference. The same interface loads QM9 and ChEMBL3D:
80
 
81
  ```python
82
+ model = load_pretrained("qm9-explicit-h", epoch=1500, device="cuda")
83
+ # Use epoch=1000 for the earlier QM9 checkpoint.
84
  model = load_pretrained("chembl3d-explicit-h", epoch=400, device="cuda")
85
  # Or choose the heavy-atom model:
86
  model = load_pretrained("chembl3d-implicit-h", epoch=300, device="cuda")
 
106
  Generate GEOM-Drugs molecules and save valid structures to SDF:
107
 
108
  ```bash
109
+ morph generate --model geom-explicit-h --epoch 100 \
110
+ --device cuda --batch 64 --batch-size 16 --output geom-e100.sdf
111
  ```
112
 
113
  `--batch` is the total number of generation attempts. Add `--save-trajs` to save
 
117
  Download a portable bundle without loading the model:
118
 
119
  ```bash
120
+ morph models download geom-explicit-h --epoch 100 --local-dir morph-models
121
  ```
122
 
123
  Load that local bundle without network access or catalog lookup:
 
125
  ```python
126
  model = load_pretrained(
127
  weights_dir="morph-models/geom/explicit_h",
128
+ epoch=100,
129
  device="cuda",
130
  )
131
  ```
132
 
133
+ Use another model name from the table for QM9 or ChEMBL3D. The interface also accepts
134
  direct Hub repository IDs with `subfolder` and `revision`. Pass `cache_dir` to
135
  choose a cache location, or `local_files_only=True` to load a previously cached
136
  release without network access. The corresponding CLI options are `--cache-dir`
 
138
 
139
  The root `sample.py` remains available as the archived ChEMBL3D sampling entry
140
  point with its corresponding bundled runtimes. The shared interface above
141
+ supports all four published model variants.
142
 
143
  ## Reproducibility
144
 
 
148
 
149
  | Model | Configuration and source |
150
  | --- | --- |
151
+ | QM9, explicit H | [Training bundle](https://huggingface.co/maltefranke/morph/resolve/main/qm9/explicit_h/training_bundle.tar.gz) |
152
+ | GEOM-Drugs, explicit H | [Training bundle](https://huggingface.co/maltefranke/morph/resolve/main/geom/explicit_h/training_bundle.tar.gz) |
153
  | ChEMBL3D, explicit H | [Training bundle](https://huggingface.co/maltefranke/morph/resolve/main/chembl3d/explicit_h/training_bundle.tar.gz) |
154
  | ChEMBL3D, implicit H | [Training bundle](https://huggingface.co/maltefranke/morph/resolve/main/chembl3d/implicit_h/training_bundle.tar.gz) |
 
 
155
 
156
  For example, download and unpack the GEOM training bundle:
157
 
 
169
 
170
  | Dataset | Training filter | Representation |
171
  | --- | --- | --- |
172
+ | QM9 | Original QM9 split | Explicit-H variant |
173
  | GEOM-Drugs | At most 72 total atoms, including H | Explicit-H variant |
174
+ | ChEMBL3D | At most 100 total atoms, including H before hydrogen removal | Explicit-H and implicit-H variants |
175
 
176
  Both ChEMBL3D variants use the same split membership: 1,474,008 training,
177
  184,295 validation and 184,242 test molecules. The implicit-H model predicts
 
179
  and validity checking. Its geometry statistics and coordinate normalization were
180
  recomputed for the heavy-atom representation.
181
 
182
+ QM9 uses 100,000 training, 20,000 validation and 12,947 test molecules. Its run
183
+ started from scratch, validates every epoch and retains checkpoints every 25 epochs.
184
+
185
+ The GEOM-Drugs epoch 50 and 100 checkpoints come from the run resumed from the
186
+ best checkpoint after 48 completed epochs. The resumed run validates every epoch and retains
187
  checkpoints every fifth epoch. Only the epochs listed in the catalog have been
188
  published here.
189
 
 
212
 
213
  The published bundles were checked for strict current/EMA weight loading and
214
  end-to-end sampling. These are functionality checks, not validity benchmarks.
215
+ The GEOM and QM9 releases also passed remote file-size and hash verification.
216
 
217
  The [ChEMBL3D release manifest](https://huggingface.co/maltefranke/morph/blob/main/manifest.json)
218
+ describes the original ChEMBL3D release, including its historical model card.
219
+ [QM9](https://huggingface.co/maltefranke/morph/blob/main/qm9/explicit_h/manifest.json) and
220
+ [GEOM-Drugs](https://huggingface.co/maltefranke/morph/blob/main/geom/explicit_h/manifest.json)
221
+ have their own bundle manifests.
222
  Original training configs contain historical cluster paths; use `config.yaml`
223
  through the inference loader for portable generation.
224
 
catalog.json CHANGED
@@ -2,6 +2,30 @@
2
  "schema_version": 1,
3
  "default_model": "chembl3d-explicit-h",
4
  "models": [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  {
6
  "name": "chembl3d-explicit-h",
7
  "repo_id": "maltefranke/morph",
@@ -27,17 +51,6 @@
27
  200,
28
  300
29
  ]
30
- },
31
- {
32
- "name": "geom-explicit-h",
33
- "repo_id": "maltefranke/morph",
34
- "subfolder": "geom/explicit_h",
35
- "revision": "b839af108eaade757a5d2d668d05498e8c733c1e",
36
- "dataset": "geom",
37
- "variant": "explicit_h",
38
- "epochs": [
39
- 50
40
- ]
41
  }
42
  ]
43
  }
 
2
  "schema_version": 1,
3
  "default_model": "chembl3d-explicit-h",
4
  "models": [
5
+ {
6
+ "name": "qm9-explicit-h",
7
+ "repo_id": "maltefranke/morph",
8
+ "subfolder": "qm9/explicit_h",
9
+ "revision": "cd010661227ece54e197343854330d2871138e18",
10
+ "dataset": "qm9",
11
+ "variant": "explicit_h",
12
+ "epochs": [
13
+ 1000,
14
+ 1500
15
+ ]
16
+ },
17
+ {
18
+ "name": "geom-explicit-h",
19
+ "repo_id": "maltefranke/morph",
20
+ "subfolder": "geom/explicit_h",
21
+ "revision": "cd010661227ece54e197343854330d2871138e18",
22
+ "dataset": "geom",
23
+ "variant": "explicit_h",
24
+ "epochs": [
25
+ 50,
26
+ 100
27
+ ]
28
+ },
29
  {
30
  "name": "chembl3d-explicit-h",
31
  "repo_id": "maltefranke/morph",
 
51
  200,
52
  300
53
  ]
 
 
 
 
 
 
 
 
 
 
 
54
  }
55
  ]
56
  }
geom/explicit_h/training_bundle.json CHANGED
@@ -2,7 +2,8 @@
2
  "model": "geom-explicit-h",
3
  "source_snapshot": "geom_resume_e48_20261008",
4
  "published_completed_epochs": [
5
- 50
 
6
  ],
7
  "original_resume_completed_epoch": 48,
8
  "original_validation_every_epochs": 1,
@@ -36,9 +37,10 @@
36
  "checkpoint_release": {
37
  "repo_id": "maltefranke/morph",
38
  "subfolder": "geom/explicit_h",
39
- "revision": "b839af108eaade757a5d2d668d05498e8c733c1e",
40
  "epochs": [
41
- 50
 
42
  ]
43
  },
44
  "files": {
 
2
  "model": "geom-explicit-h",
3
  "source_snapshot": "geom_resume_e48_20261008",
4
  "published_completed_epochs": [
5
+ 50,
6
+ 100
7
  ],
8
  "original_resume_completed_epoch": 48,
9
  "original_validation_every_epochs": 1,
 
37
  "checkpoint_release": {
38
  "repo_id": "maltefranke/morph",
39
  "subfolder": "geom/explicit_h",
40
+ "revision": "cd010661227ece54e197343854330d2871138e18",
41
  "epochs": [
42
+ 50,
43
+ 100
44
  ]
45
  },
46
  "files": {
qm9/explicit_h/training_bundle.json CHANGED
@@ -1,7 +1,10 @@
1
  {
2
  "model": "qm9-explicit-h",
3
  "source_snapshot": "qm9_launch_20261008",
4
- "published_completed_epochs": [],
 
 
 
5
  "original_resume_completed_epoch": null,
6
  "original_validation_every_epochs": 1,
7
  "reproduction_validation_every_epochs": 1,
@@ -31,7 +34,15 @@
31
  "revision": "d0332f1c022345956470bb948ada79e5702ed8dc",
32
  "filename": "reproduction/qm9-explicit-h.tar.gz"
33
  },
34
- "checkpoint_release": null,
 
 
 
 
 
 
 
 
35
  "files": {
36
  "original_config": "reproduction/original_training_config.yaml",
37
  "portable_config": "configs/reproduce.yaml",
 
1
  {
2
  "model": "qm9-explicit-h",
3
  "source_snapshot": "qm9_launch_20261008",
4
+ "published_completed_epochs": [
5
+ 1000,
6
+ 1500
7
+ ],
8
  "original_resume_completed_epoch": null,
9
  "original_validation_every_epochs": 1,
10
  "reproduction_validation_every_epochs": 1,
 
34
  "revision": "d0332f1c022345956470bb948ada79e5702ed8dc",
35
  "filename": "reproduction/qm9-explicit-h.tar.gz"
36
  },
37
+ "checkpoint_release": {
38
+ "repo_id": "maltefranke/morph",
39
+ "subfolder": "qm9/explicit_h",
40
+ "revision": "cd010661227ece54e197343854330d2871138e18",
41
+ "epochs": [
42
+ 1000,
43
+ 1500
44
+ ]
45
+ },
46
  "files": {
47
  "original_config": "reproduction/original_training_config.yaml",
48
  "portable_config": "configs/reproduce.yaml",
reproduction/README.md CHANGED
@@ -49,10 +49,10 @@ is the model name, also recorded as `directory` in `training_bundle.json`.
49
 
50
  | Model folder | Extracted directory |
51
  | --- | --- |
 
 
52
  | `chembl3d/explicit_h` | `chembl3d-explicit-h` |
53
  | `chembl3d/implicit_h` | `chembl3d-implicit-h` |
54
- | `geom/explicit_h` | `geom-explicit-h` |
55
- | `qm9/explicit_h` | `qm9-explicit-h` |
56
 
57
  ## Bundle contents
58
 
@@ -85,10 +85,10 @@ directory for each run, and retain these records alongside checkpoints.
85
 
86
  | Model | Batch per GPU | Accumulation | Effective batch | Original validation cadence | Portable validation / save cadence |
87
  | --- | ---: | ---: | ---: | --- | --- |
 
 
88
  | `chembl3d-explicit-h` | 320 | 1 | 640 | Every 5 epochs | Every 1 / 5 epochs |
89
  | `chembl3d-implicit-h` | 320 | 1 | 640 | Every epoch | Every 1 / 5 epochs |
90
- | `geom-explicit-h` | 320 | 1 | 640 | Every epoch | Every 1 / 5 epochs |
91
- | `qm9-explicit-h` | 1024 | 2 | 4096 | Every epoch | Every 1 / 25 epochs |
92
 
93
  All recipes use two RTX 4090 GPUs, seed 42, bf16 mixed precision, SDPA attention,
94
  compiled networks and 4096 generation attempts per validation epoch. GEOM uses
@@ -98,7 +98,9 @@ Environment flags are explicit in each archive's `reproduction/environment.sh`.
98
 
99
  The portable recipes stop at 400 completed epochs for explicit-H ChEMBL3D,
100
  300 for implicit-H ChEMBL3D, 50 for GEOM, or 3000 for QM9. Override that limit
101
- with `bash train.sh trainer.trainer.max_epochs=100`.
 
 
102
 
103
  The portable configs preserve the saved model, optimizer, schedule and batch
104
  settings. They change data/output paths, disable W&B, remove the historical
@@ -112,10 +114,10 @@ Set `MORPH_DATASET_ROOT` to a dataset directory containing `processed/`:
112
 
113
  | Archive | Dataset directory | Selection / representation |
114
  | --- | --- | --- |
 
 
115
  | ChEMBL3D explicit H | `chembl3d_max100` | At most 100 total atoms, explicit H |
116
  | ChEMBL3D implicit H | `chembl3d_max100_implicit_h` | Same source molecules, then remove H |
117
- | GEOM explicit H | `geom` | At most 72 total atoms, explicit H |
118
- | QM9 explicit H | `qm9` | Original QM9 split, explicit H |
119
 
120
  The ChEMBL3D cap counts hydrogens **before removal**. Both variants have
121
  1,474,008 / 184,295 / 184,242 train/validation/test molecules. The implicit-H cache
@@ -140,12 +142,12 @@ a CPU worker if you need a full content manifest for future comparisons.
140
 
141
  ## Fresh training versus resuming
142
 
143
- The explicit-H ChEMBL3D release resumed after 5 completed epochs. GEOM epoch 50
144
- resumed from the best checkpoint after 48 completed epochs. Starting these
145
  recipes from seed 42 reproduces their setup but does not replay that history.
146
  The intermediate epoch-5 and epoch-48 checkpoints are not in the Hub release.
147
- The implicit-H ChEMBL3D run and the QM9 recipe start fresh. QM9 has no published
148
- checkpoint in this release.
149
 
150
  To continue from an available full training checkpoint, pass its absolute path
151
  and the desired **total** completed epoch count to the matching archive:
 
49
 
50
  | Model folder | Extracted directory |
51
  | --- | --- |
52
+ | `qm9/explicit_h` | `qm9-explicit-h` |
53
+ | `geom/explicit_h` | `geom-explicit-h` |
54
  | `chembl3d/explicit_h` | `chembl3d-explicit-h` |
55
  | `chembl3d/implicit_h` | `chembl3d-implicit-h` |
 
 
56
 
57
  ## Bundle contents
58
 
 
85
 
86
  | Model | Batch per GPU | Accumulation | Effective batch | Original validation cadence | Portable validation / save cadence |
87
  | --- | ---: | ---: | ---: | --- | --- |
88
+ | `qm9-explicit-h` | 1024 | 2 | 4096 | Every epoch | Every 1 / 25 epochs |
89
+ | `geom-explicit-h` | 320 | 1 | 640 | Every epoch | Every 1 / 5 epochs |
90
  | `chembl3d-explicit-h` | 320 | 1 | 640 | Every 5 epochs | Every 1 / 5 epochs |
91
  | `chembl3d-implicit-h` | 320 | 1 | 640 | Every epoch | Every 1 / 5 epochs |
 
 
92
 
93
  All recipes use two RTX 4090 GPUs, seed 42, bf16 mixed precision, SDPA attention,
94
  compiled networks and 4096 generation attempts per validation epoch. GEOM uses
 
98
 
99
  The portable recipes stop at 400 completed epochs for explicit-H ChEMBL3D,
100
  300 for implicit-H ChEMBL3D, 50 for GEOM, or 3000 for QM9. Override that limit
101
+ with `bash train.sh trainer.trainer.max_epochs=100` to train GEOM through
102
+ 100 completed epochs. For QM9, use `trainer.trainer.max_epochs=1000` or
103
+ `trainer.trainer.max_epochs=1500` to match the published epoch counts.
104
 
105
  The portable configs preserve the saved model, optimizer, schedule and batch
106
  settings. They change data/output paths, disable W&B, remove the historical
 
114
 
115
  | Archive | Dataset directory | Selection / representation |
116
  | --- | --- | --- |
117
+ | QM9 explicit H | `qm9` | Original QM9 split, explicit H |
118
+ | GEOM explicit H | `geom` | At most 72 total atoms, explicit H |
119
  | ChEMBL3D explicit H | `chembl3d_max100` | At most 100 total atoms, explicit H |
120
  | ChEMBL3D implicit H | `chembl3d_max100_implicit_h` | Same source molecules, then remove H |
 
 
121
 
122
  The ChEMBL3D cap counts hydrogens **before removal**. Both variants have
123
  1,474,008 / 184,295 / 184,242 train/validation/test molecules. The implicit-H cache
 
142
 
143
  ## Fresh training versus resuming
144
 
145
+ The explicit-H ChEMBL3D release resumed after 5 completed epochs. GEOM epochs
146
+ 50 and 100 come from the run resumed from the best checkpoint after 48 completed epochs. Starting these
147
  recipes from seed 42 reproduces their setup but does not replay that history.
148
  The intermediate epoch-5 and epoch-48 checkpoints are not in the Hub release.
149
+ The implicit-H ChEMBL3D and QM9 runs started fresh. QM9 checkpoints after
150
+ 1,000 and 1,500 completed epochs are published alongside its training bundle.
151
 
152
  To continue from an available full training checkpoint, pass its absolute path
153
  and the desired **total** completed epoch count to the matching archive: