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
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
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.