Extract per-molecule embeddings from any encoder-bearing KERMT checkpoint (grover_base / cmim / hybrid / finetuned). Writes one .npy per readout type (atom_from_atom, bond_from_atom, atom_from_bond, bond_from_bond) plus canonical_smiles.npy and validity.npy. Calls task/extract_embeddings.py (which featurizes SMILES on the fly — no pre-computed features needed).
Installation
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Extract per-molecule embeddings from any encoder-bearing KERMT checkpoint (grover_base / cmim / hybrid / finetuned). Writes one .npy per readout type (atom_from_atom, bond_from_atom, atom_from_bond, bond_from_bond) plus canonical_smiles.npy and validity.npy. Calls task/extract_embeddings.py (which featurizes SMILES on the fly — no pre-computed features needed).
license
Apache-2.0 OR CC-BY-4.0
compatibility
Requires docker, nvidia-container-toolkit, and a CUDA-capable NVIDIA GPU. Designed for Claude Code, Codex, and Nemotron.
Extract per-molecule embeddings from any encoder-bearing KERMT checkpoint.
The skill is the workflow orchestrator: validate ckpt, validate CSV, clean
SMILES, launch the runner blocking, return the per-readout .npy files.
Hardware requirements
GPUs: 1 (single-GPU).
VRAM: ≥ 4 GB for the default batch_size 64.
Disk: depends on output size — roughly a few MB per 1k molecules at
hidden 800 per readout, so ~10–20 MB per 1k molecules across the 4
readouts. Plus a small canonical_smiles.npy + validity.npy per run.
Driver / CUDA: any host supporting CUDA 12.6.
Inputs
Required:
--ckpt <path> — any encoder-bearing checkpoint. Grover_base, cmim,
hybrid, and finetuned ckpts are all accepted. The validator only refuses
ckpts with no encoder.
--csv <path> — SMILES CSV. First column is smiles; other columns
are ignored (no targets needed).
Optional:
--batch-size N — override the configured default (64).
--gpus 0 — single GPU id (default 0).
--from-prepare <dir> — skip the prepare step and reuse an existing
prepare_data.json in <dir>.
Workflow
Let $KERMT_REPO be the path to your kermt repo checkout.
atom_from_atom.npy, bond_from_atom.npy,
atom_from_bond.npy, bond_from_bond.npy (the 4 standard readouts;
each shape (N_rows, hidden_size))
metadata.pkl — pickle of a dict containing canonical_smiles
(RDKit-canonicalized SMILES per row), valid (boolean per-row: did
RDKit parse it), plus other run metadata.
Manifest: $RUN_DIR/run.json
Log: $RUN_DIR/logs/embed.log
Hard rules
Never modify the user's ckpt. The runner reads-only via
task/extract_embeddings.py's --checkpoint <path> flag.
Arch comes from the ckpt. No --hidden-size flag etc. on this runner;
task/extract_embeddings.py reads arch from the ckpt's saved_args.
Common errors
prepare_data manifest is missing required output 'clean_csv' → prepare
ran with --skip-clean but no source CSV given. Re-run prepare without it.
--gpus '0,1' is single-GPU only → pass a single id.
Replayability
$(jq -r .cmd_replay $RUN_DIR/run.json)
If ok_to_replay: false (dirty kermt repo worktree at launch time), pin
the commit via repo.commit and git checkout it first.