npx skills add ...
npx skills add nvidia/skills --skill kermt-embed
Extract per-molecule embeddings from any encoder-bearing KERMT checkpoint. Use a local checkpoint or optionally download a pinned Hugging Face model bundle using HF_TOKEN if configured. Run containerized embedding extraction and write model bundles, per-readout .npy embeddings, canonical SMILES, and validity arrays to user-selected host directories.
npx skills add nvidia/skills --skill kermt-embed
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.
Set SKILL_DIR to the absolute path of this installed skill directory. Export
KERMT_REPO as the absolute path to the KERMT checkout used for model
execution. The bundled container helper mounts that checkout at
/workspace and this skill at /skill (read-only). Commands inside
the container use /skill/scripts/; defaults are bundled in config/.
See Released models for checkpoint bundle requirements.
The optional released-model branch reads config/released_model.json for the
Hugging Face repository, pinned revision, and filenames. The bundled
scripts/fetch_released_model.py downloads the model bundle over HTTPS into
the host directory the user selects. Public models work without credentials;
if HF_TOKEN is set, the container helper forwards it for Hugging Face
authentication. Prepared data, logs, and workflow results go into the chosen
run directory.
batch_size 64.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.Required:
--csv <path> — SMILES CSV. First column is smiles; other columns
are ignored (no targets needed).Checkpoint (optional — defaults to the released model if omitted):
--ckpt <path> — any encoder-bearing checkpoint. Grover_base, cmim,
hybrid, and finetuned ckpts are all accepted. The validator only refuses
ckpts with no encoder. If omitted, the skill offers to download the
released pretrained hybrid model nvidia/NV-KERMT-70M-v2 and embed with
it — see "Resolve & validate the checkpoint" (workflow step 3).--pretrained-release — explicit opt-in to use the released model without
the interactive prompt (for non-interactive / agent runs). Mutually
exclusive with --ckpt.--model-dir <dir> — where to save the downloaded bundle (default
$KERMT_REPO/models/NV-KERMT-70M-v2/). An already-complete bundle there is
reused, not re-downloaded.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>.Let $KERMT_REPO be the path to your kermt repo checkout.
Pre-flight: container + system probe.
Compute run directory.
Resolve & validate the checkpoint.
Resolve — only if --ckpt was omitted. Default to the released
pretrained hybrid model nvidia/NV-KERMT-70M-v2:
--pretrained-release was passed, ask the user:
"No checkpoint given — download the released model nvidia/NV-KERMT-70M-v2
(NVIDIA Open Model License, https://huggingface.co/nvidia/NV-KERMT-70M-v2)
and embed with it? [y/N]". Never download without an explicit yes (or
--pretrained-release). If both --ckpt and --pretrained-release are
given, abort — they conflict.$KERMT_REPO/models/NV-KERMT-70M-v2/; honor
--model-dir <dir> if given. An already-complete bundle is reused.ok: false (surface errors). On success set
<user-ckpt> = <save-dir>/kermt_contrastive_v2.0.pt.Validate the resolved (or user-provided) ckpt:
Parse JSON. Abort on ok: false. The validator only refuses encoder-less
ckpts (rare).
Validate the data.
Prepare the data (clean-only — no features step).
Outputs land at $RUN_DIR/data/prepare_data.json with a single clean_csv
path. task/extract_embeddings.py featurizes from SMILES on the fly.
Launch the runner (blocking).
Report to the user.
$RUN_DIR/out/
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.$RUN_DIR/run.json$RUN_DIR/logs/embed.log--ckpt is
omitted, download nvidia/NV-KERMT-70M-v2 only after an explicit user "yes"
or an explicit --pretrained-release flag. --ckpt and
--pretrained-release are mutually exclusive.task/extract_embeddings.py's --checkpoint <path> flag.--hidden-size flag etc. on this runner;
task/extract_embeddings.py reads arch from the ckpt's saved_args.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.If ok_to_replay: false (dirty kermt repo worktree at launch time), pin
the commit via repo.commit and git checkout it first.