Discover QM9 and GEOM epoch 100; order model tables QM9, GEOM-Drugs, ChEMBL
Browse files- README.md +30 -20
- catalog.json +24 -11
- geom/explicit_h/training_bundle.json +5 -3
- qm9/explicit_h/training_bundle.json +13 -2
- reproduction/README.md +13 -11
README.md
CHANGED
|
@@ -4,16 +4,17 @@ tags:
|
|
| 4 |
- chemistry
|
| 5 |
- molecular-generation
|
| 6 |
- flow-matching
|
| 7 |
-
-
|
| 8 |
- geom-drugs
|
|
|
|
| 9 |
- 3d
|
| 10 |
- arxiv:2606.07239
|
| 11 |
---
|
| 12 |
|
| 13 |
# Morph: 3D molecular generation
|
| 14 |
|
| 15 |
-
Unconditional molecular generation checkpoints trained on **
|
| 16 |
-
**
|
| 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=
|
| 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
|
| 106 |
-
--device cuda --batch 64 --batch-size 16 --output geom-
|
| 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
|
| 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=
|
| 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
|
| 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 |
-
|
|
| 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 |
-
|
| 178 |
-
|
|
|
|
|
|
|
|
|
|
| 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
|
| 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.
|
| 211 |
-
[
|
|
|
|
|
|
|
| 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": "
|
| 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":
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|
| 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
|
| 148 |
-
|
| 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:
|