Generated banner for Kermt Continue Pretrain
Generated logo for Kermt Continue Pretrain

Kermt Continue Pretrain

NVIDIAOfficialPublished by NVIDIA

  • Skill
  • Workflow
  • Data and AI
  • Apache-2.0
  • Medium risk
  • Has scripts

From the author

Continue KERMT pretraining on a custom SMILES corpus with a grover_base, cmim, or hybrid checkpoint. Use a local checkpoint or optionally download a pinned Hugging Face model bundle using HF_TOKEN if configured. Run containerized training and write model bundles, prepared data, logs, and checkpoints to user-selected host directories.
— the description by NVIDIA

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The kermt-continue-pretrain skill manages the end-to-end workflow for continuing the pretraining of KERMT models (grover_base, cmim, or hybrid). It handles input validation, data preparation, and the execution of training runs within a containerized environment. The skill supports both fresh-schedule training and true resumption of interrupted runs, ensuring that model architecture and vocabulary constraints are strictly maintained.

What it does

  • Validates system requirements and GPU availability for training.
  • Resolves and validates user-provided or released KERMT checkpoints.
  • Prepares custom SMILES data for training while enforcing vocabulary consistency.
  • Configures and launches detached training runs with hyperparameter overrides.
  • Provides progress monitoring and logging for long-running training tasks.
  • Generates a manifest for reproducible training runs.

When to use it

  • When you need to continue training an existing KERMT checkpoint on a new SMILES dataset.
  • When you want to perform a fresh-schedule continuation of a pretrained model.
  • When you need to resume an interrupted training run from a specific checkpoint.
  • When you want to leverage NVIDIA-released pretrained hybrid models for further training.

Advantages

  • Ensures architectural and vocabulary integrity by validating checkpoints before training.
  • Automates complex data preparation and container orchestration.
  • Supports flexible hyperparameter tuning while preventing invalid configuration overrides.
  • Provides clear error handling and redirection to appropriate workflows for incompatible models.

Usage examples

“Continue pretraining the hybrid model on my custom_data.csv.”
The agent will prompt for consent to download the released hybrid model, validate the CSV, prepare the data, and launch the training process.
“Resume my interrupted pretraining run from /path/to/checkpoint.pt.”
The agent will validate the checkpoint for resume compatibility and restart the training process from the exact state saved in the checkpoint.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/nvidia/kermt-continue-pretrain/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip kermt-continue-pretrain.zip -d .agents/skills

Documentation by NVIDIA

kermt-continue-pretrain

Continue pretraining from a user-supplied KERMT checkpoint (grover_base / cmim / hybrid). The skill is the workflow orchestrator: it validates inputs, prepares the corpus, launches the runner, and returns a run directory.

Skill and runtime paths

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.

Downloads and local outputs

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.

Hardware requirements

  • GPUs: 1–N CUDA-capable NVIDIA GPUs. The runner auto-detects via torch.cuda.device_count(); --gpus 0,2 overrides. On a single GPU the runner falls back to --batch_size 32 --save_interval 500; on multi-GPU it uses the defaults_pretrain.json values (currently batch_size 256). Note: --gpus N uses torch.cuda indexing, which can differ from nvidia-smi's display order on multi-GPU hosts (PCI bus vs. CUDA enumeration). To target a specific physical GPU, set CUDA_VISIBLE_DEVICES before invoking, or run python -c "import torch; print([torch.cuda.get_device_name(i) for i in range(torch.cuda.device_count())])" to confirm which device you're picking.

  • VRAM: the default --batch-size 256 is sized for A100-class hardware (80 GB VRAM). On smaller GPUs, downscale to avoid OOM:

    GPU classVRAMSuggested --batch-size
    L4, T4, V100 16 GB16–24 GB32–64
    A100 40 GB, L40, A4040–48 GB128
    A100 80 GB, H100, H20080 GB256 (default)

    These are rough starting points — pass --batch-size N to override.

  • Disk: tens of GB depending on corpus size + epochs (each checkpoint is several hundred MB).

  • Driver / CUDA: any host supporting CUDA 12.6 (the kermt image base). kermt-setup validates this up-front.

Inputs

Required:

  • --csv <path> — the pretrain CSV (single column smiles). If you have separate train/val CSVs, pass --val-csv <path> too.

Checkpoint (optional — defaults to the released model if omitted):

  • --ckpt <path> — the input pretrain checkpoint to continue from. Must be a grover_base (with vocab heads), cmim, or hybrid ckpt; the validator rejects everything else with a redirect to the correct workflow. If omitted, the skill offers to download the released pretrained hybrid model nvidia/NV-KERMT-70M-v2 and continue-pretrain from it — see "Resolve & validate the checkpoint" (workflow step 3). The released bundle ships its three vocab files alongside the ckpt, so the authoritative-vocab pass-through (step 5) works automatically.

  • --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:

  • --val-csv <path> — separate validation CSV. Without it, the prep step auto-splits the input by --val-frac 0.1 (random shuffle with --seed).

  • --epochs N / --batch-size N / --init-lr F / --max-lr F / --final-lr F / --warmup-epochs F / --weight-decay F / --dropout F / --save-interval N / --seed N — training-hyperparameter overrides. Anything not given is filled from config/defaults_pretrain.json.

  • --vocab-loss-weight F (hybrid only) / --latent-dim N / --contrastive-temperature F (cmim and hybrid only) — loss / decoder overrides.

  • --wandb-project NAME / --wandb-run-name NAME — optional Weights & Biases logging. When --wandb-project is set, rank 0 logs train/val losses; the run name is honored only alongside a project. Off by default. (Independent of the ckpt's wandb_run_id continuity handling under --resume.)

  • --resume — see "Modes" section below.

  • --gpus 0,2 — restrict to a GPU subset. Default uses all visible GPUs.

  • --from-prepare <dir> — skip the prepare step and reuse an existing prepare_data.json in <dir>. Useful when iterating on hyperparameters.

Modes

The runner has two modes for ingesting the input ckpt, dispatched on whether --resume is set. Pick based on intent:

Default (fresh-schedule continue-pretrain)

Use when: you have a finished pretrain ckpt and want to continue training it — on a new corpus, with a different objective, or just for more epochs than its original plan. The previous training's step counter and schedule shape are no longer relevant; you want a new learning-rate schedule for the new run.

What gets loaded from the ckpt:

  • ✓ Model weights (encoder + vocab heads + contrast head + decoder, whatever is there)

  • ✓ Optimizer state (Adam's running m1/m2 moments — warm-starts the new schedule so the first few hundred steps aren't dominated by noisy gradient-estimate startup)

  • ✗ Scheduler step counter (reset to 0)

  • ✗ Epoch counter (reset to 0)

  • ✗ Batch counter (reset to 0)

  • ✗ wandb run id (new wandb run, not a continuation)

Schedule shape (init/max/final LR, warmup epochs, total epochs): from your CLI args or defaults_pretrain.json. A fresh NoamLR is constructed from these values and starts at step 0.

--resume (true resume)

Use when: a previous run was interrupted (crash, OOM, Ctrl-C) and you want to pick up exactly where it left off — same dataset, same schedule, same training trajectory.

What gets loaded from the ckpt: everything in the save_model_for_restart format. Model weights + optimizer state + scheduler_step + epoch + batch_idx + wandb_run_id are all restored. The new run continues from the saved step in the saved schedule (which is recovered from the ckpt's saved_args). Mid-epoch resume works too — pretrain_ddp.py's sampler skip-count picks up at the saved batch index within the saved epoch.

Schedule shape: inherited from the ckpt's saved_args. CLI overrides of any schedule flag (--epochs / --warmup-epochs / --init-lr / --max-lr / --final-lr) are rejected with a hard error — pure resume means pure resume; if you want to change the schedule, drop --resume and start a fresh-schedule run.

Requirements: the ckpt must have been saved via save_model_for_restart (i.e., carry optimizer / scheduler_step / epoch / batch_idx keys). If any of these is missing, the runner errors with a clear message and suggests dropping --resume.

The default mode is the right choice ~90% of the time. Reach for --resume only when you genuinely need to continue a single interrupted training run.

Workflow

Let $KERMT_REPO be the path to your kermt repo checkout, and assume kermt-setup has already built kermt:latest. All paths below are on the host; the helper bind-mounts them at known container paths.

  1. Pre-flight: ensure container + system probe.

    "$SKILL_DIR/scripts/kermt_container.sh" check_system | python -c "
    import json, sys; d = json.load(sys.stdin)
    if not d['ok']:
        print('System check failed:', d['gaps']); sys.exit(1)
    print(f'OK: {len(d[\"gpus\"])} GPU(s); {d[\"disk\"][\"free_gb\"]} GB free; CUDA via container toolkit')
    "

    Surface any gaps to the user. Refuse to proceed if ok: false.

  2. Compute run directory.

    RUN_DIR=$KERMT_REPO/runs/continue-pretrain_$(date -u +%Y-%m-%dT%H-%M-%SZ)
  3. Resolve & validate the checkpoint.

    Resolve — only if --ckpt was omitted. Default to the released pretrained hybrid model nvidia/NV-KERMT-70M-v2:

    • Consent gate. Unless --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 continue-pretrain from it? [y/N]". Never download without an explicit yes (or --pretrained-release). If both --ckpt and --pretrained-release are given, abort — they conflict.

    • Save location. Default $KERMT_REPO/models/NV-KERMT-70M-v2/; honor --model-dir <dir> if given. An already-complete bundle is reused.

    • Download (foreground; ~282 MB on first fetch):

      "$SKILL_DIR/scripts/kermt_container.sh" run --model-dir <save-dir> -- \
          "python /skill/scripts/fetch_released_model.py --out /model"

      Parse the JSON; abort on ok: false (surface errors). On success set <user-ckpt> = <save-dir>/kermt_contrastive_v2.0.pt. The bundle's three vocab files land in <save-dir> too, so step 5's --vocab-dir auto-detection (which looks in the ckpt's parent directory) finds them with no extra work.

    Validate the resolved (or user-provided) ckpt:

    "$SKILL_DIR/scripts/kermt_container.sh" run --ckpt <user-ckpt> -- \
        "python /skill/scripts/check_checkpoint.py --mode continue_pretrain --ckpt /ckpt"

    Parse the JSON. Abort on ok: false, showing the error verbatim. The error message redirects the user to kermt-add-cmim-pretrain for encoder-only ckpts, or to kermt-finetune for finetuned ckpts.

  4. Validate the data.

    "$SKILL_DIR/scripts/kermt_container.sh" run --data <user-csv> -- \
        "python /skill/scripts/check_data.py --mode pretrain --csv /data/<basename>"

    Abort on ok: false.

  5. Prepare the data (skip if --from-prepare given). Pass the ckpt's vocab through. Look in the ckpt's parent directory for the conventional pretrain_atom_vocab.{json,pkl}, pretrain_bond_vocab.{json,pkl}, and pretrain_smiles_vocab.pkl files (the bundling convention for released models; see references/released-models.md). If all three are present, auto-pass via --vocab-dir <ckpt_parent_dir>. If only some are present, pass them via explicit flags (--atom-vocab, --bond-vocab, --smiles-vocab). If none are present, ask the user for --vocab-dir — or refuse to proceed, because rebuilding a fresh vocab from the new corpus would silently mismatch the ckpt's vocab heads (the ckpt's vocab is authoritative for continue-pretrain).

    Note the two-layer mount pattern: pass the host directory to kermt_container.sh --vocab-dir (which mounts it at /vocab inside the container), and reference /vocab from the inner prepare_data.py command. The same pattern applies to every host path the inner command needs to read (--data <host-csv> → /data/<basename>, --ckpt <host-ckpt> → /ckpt).

    VOCAB_DIR=$(dirname <user-ckpt>)
    "$SKILL_DIR/scripts/kermt_container.sh" run \
        --data <user-csv> --vocab-dir $VOCAB_DIR --run-dir $RUN_DIR -- \
        "python /skill/scripts/prepare_data.py --mode pretrain \\
             --csv /data/<basename> --out /runs/data \\
             --vocab-dir /vocab \\
             [--val-csv /data/<val-basename>] [--val-frac 0.1] [--seed 0]"

    Outputs land at $RUN_DIR/data/prepare_data.json with vocab_source: "user_provided". The runner step 7 will verify the vocab files' entry counts match the ckpt's vocab-head sizes and refuse to launch on mismatch.

  6. Estimate runtime + confirm with user.

    • Pretrain wall time depends on corpus size × epochs × GPU count.

    • Tell the user the estimate; ask "proceed?" unless --yes flag was given (agent-non-interactive case).

    • Example estimate template: ~N hours on K GPUs for E epochs over M molecules (~steps/epoch × seconds/step).

  7. Launch the runner detached.

    "$SKILL_DIR/scripts/kermt_container.sh" run_detached \\
        --name kermt-continue-pretrain-<ts> \\
        --ckpt <user-ckpt> --run-dir $RUN_DIR -- \\
        "python /skill/scripts/run_pretrain_local.py \\
             --ckpt /ckpt \\
             --prepare-manifest /runs/data/prepare_data.json \\
             --out /runs \\
             [--epochs N --batch-size N --init-lr F ...]"

    Returns the container name + id + log file path.

  8. Report to the user. Output a short summary:

    • Container name + id

    • $RUN_DIR/run.json (the manifest with cmd_replay + image digest)

    • Log file: $RUN_DIR/logs/pretrain_ddp.log

    • TensorBoard: $RUN_DIR/logs/tb (open with tensorboard --logdir $RUN_DIR/logs/tb)

    • Suggest invoking kermt-monitor <RUN_DIR> to check progress.

Hard rules

  • Never download the released model without consent. When --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.

  • Never modify the user's input ckpt. The runner symlinks it into the save_dir; the symlink is what pretrain_ddp.py auto-resumes from. The source file stays untouched.

  • Never silently override arch. If the user passes a --hidden-size etc. that doesn't match the ckpt-derived value, the runner aborts loudly. Arch params come from the ckpt, period.

  • Never block on the long-running pretrain itself. The runner is invoked via run_detached; the skill returns immediately after step 8. Use kermt-monitor for progress.

  • Echo applied defaults back to the user. The args_applied field of run.json records every flag's value + source (user / default-config / auto-1gpu / auto-multi-gpu). Skill should surface a summary of any flag not user-specified so the user knows what was assumed.

Common errors

  • model_type='finetuned' rejected → the ckpt is a downstream finetune, not a pretrain. The error redirects to the relevant workflow.

  • grover_base ckpt has no vocab head → encoder-only ckpt (e.g. the original-grover grover_base.pt). The error redirects to kermt-add-cmim-pretrain.

  • prepare_data manifest is missing required outputs → user passed --from-prepare to a directory where prepare was run with --skip-vocab or --skip-split. Re-run prepare without those flags.

  • --gpus all not available → install nvidia-container-toolkit; check kermt_container.sh check_system.

Replayability

The run.json cmd_replay field is a single-line command that re-runs the pretrain with the same inputs, hyperparameters, and arch. To replay:

# Inside the kermt container:
$(jq -r .cmd_replay $RUN_DIR/run.json)

If ok_to_replay: false in the manifest (because the kermt repo working tree was dirty at launch time), the replay may not be bit-exact — pin the exact commit via the repo.commit field and git checkout it first.

Files

scripts/fetch_released_model.py

#!/usr/bin/env python3
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

"""Download a released KERMT model bundle from Hugging Face.

Runs INSIDE the kermt container (huggingface_hub is part of the image env).
Writes the released-model directory bundle — the checkpoint plus its vocab
files — into the directory mounted at `--out` (the skills mount the user's
chosen save location there via `kermt_container.sh --model-dir <host>`), then
emits a single JSON object to stdout that the calling skill parses.

The downloaded directory is exactly the repo's "released model bundle" layout
(see skills/README.md "Released models"): `<ckpt>.pt` + the three
`pretrain_*_vocab.*` files in one flat directory. The downstream skill then
feeds it through the existing `--ckpt <out>/<ckpt_name>` flow; for
continue-pretrain the bundled vocab files are auto-detected in the ckpt's
parent directory. No runner changes are needed.

Defaults (repo id, pinned revision, ckpt + vocab filenames) come from
`config/released_model.json` so the pin lives in one place; every value
is overridable on the CLI.

Idempotent: if the bundle is already complete in `--out` (ckpt + all vocab
files present), nothing is downloaded and `reused: true` is reported — so a
re-invocation never re-fetches the 282 MB checkpoint.

Authentication: the repo is public (no token needed). If `HF_TOKEN` is set in
the environment (forwarded into the container by `kermt_container.sh`),
huggingface_hub picks it up automatically — useful against shared-IP rate
limits or if the repo is ever gated.

Output (stdout)
---------------
{
  "ok": true | false,
  "repo_id": str,
  "revision": str,
  "out": str,                 // container path of the bundle dir (e.g. /model)
  "ckpt": str | null,         // container path of the checkpoint file
  "vocab_dir": str | null,    // == out (where the vocab files live)
  "ckpt_name": str,
  "vocab_files": [str, ...],
  "files_present": [str, ...],
  "ckpt_bytes": int | null,
  "reused": bool,             // true if the bundle already existed (no download)
  "license": str | null,
  "license_url": str | null,
  "errors": [str, ...]
}

Exit code: 0 on `ok: true`, 1 on `ok: false`.

CLI
---
    fetch_released_model.py [--out /model]
                            [--repo-id <id>] [--revision <sha|tag|branch>]
                            [--ckpt-name <name>] [--config <path>]
"""

from __future__ import annotations

import argparse
import json
import sys
import traceback
from pathlib import Path
from typing import Any

# Default config lives at config/released_model.json (one dir up from
# scripts/). Resolved relative to this file so the script is
# location-independent.
DEFAULT_CONFIG = (
    Path(__file__).resolve().parent.parent / "config" / "released_model.json"
)


def _load_config(config_path: Path) -> dict[str, Any]:
    if not config_path.is_file():
        raise FileNotFoundError(f"released-model config not found at {config_path}")
    return json.loads(config_path.read_text())


def fetch(
    *,
    out: Path,
    repo_id: str,
    revision: str,
    ckpt_name: str,
    vocab_files: list[str],
    license_name: str | None = None,
    license_url: str | None = None,
) -> dict[str, Any]:
    """Resolve-or-download the released bundle into `out`. Returns the manifest
    dict (never raises for the expected failure modes — they land in
    `errors[]` with `ok: false`)."""
    result: dict[str, Any] = {
        "ok": False,
        "repo_id": repo_id,
        "revision": revision,
        "out": str(out),
        "ckpt": None,
        "vocab_dir": None,
        "ckpt_name": ckpt_name,
        "vocab_files": list(vocab_files),
        "files_present": [],
        "ckpt_bytes": None,
        "reused": False,
        "license": license_name,
        "license_url": license_url,
        "errors": [],
    }

    required = [ckpt_name, *vocab_files]

    def _present() -> list[str]:
        return [name for name in required if (out / name).is_file()]

    # 1. Idempotent reuse — bundle already complete in `out`.
    if out.is_dir() and set(_present()) == set(required):
        result["reused"] = True
    else:
        # 2. Download. Import here so a stale image (missing huggingface_hub)
        #    surfaces a clean, actionable JSON error rather than a traceback.
        try:
            from huggingface_hub import snapshot_download
        except ImportError:
            result["errors"].append(
                "huggingface_hub is not available in the container image. The "
                "released-model download needs it; rebuild the image with "
                "`kermt-setup` (it now ships huggingface_hub) and retry."
            )
            return result

        out.mkdir(parents=True, exist_ok=True)
        try:
            # local_dir gives a flat copy (the bundle layout) rather than the
            # opaque blob/snapshot cache. HF_TOKEN, if set, is read by the lib.
            snapshot_download(repo_id=repo_id, revision=revision, local_dir=str(out))
        except Exception as exc:  # noqa: BLE001
            result["errors"].append(
                f"download failed for {repo_id}@{revision}: {type(exc).__name__}: {exc}"
            )
            return result

    # 3. Verify the bundle is complete regardless of download/reuse path.
    present = _present()
    result["files_present"] = present
    missing = [name for name in required if name not in present]
    if missing:
        result["errors"].append(
            f"bundle at {out} is missing expected file(s): {missing}. "
            f"Present: {present}."
        )
        return result

    ckpt_path = out / ckpt_name
    result["ckpt"] = str(ckpt_path)
    result["vocab_dir"] = str(out)
    try:
        result["ckpt_bytes"] = ckpt_path.stat().st_size
    except OSError:
        result["ckpt_bytes"] = None

    result["ok"] = True
    return result


def main(argv: list[str] | None = None) -> int:
    parser = argparse.ArgumentParser(
        description="Download a released KERMT model bundle from Hugging Face (runs in-container)."
    )
    parser.add_argument(
        "--out",
        default="/model",
        help="Directory to write the bundle into (default: /model, the --model-dir mount).",
    )
    parser.add_argument(
        "--config",
        default=str(DEFAULT_CONFIG),
        help="Path to released_model.json (default: config/released_model.json).",
    )
    parser.add_argument(
        "--repo-id", default=None, help="Override the HF repo id from the config."
    )
    parser.add_argument(
        "--revision",
        default=None,
        help="Override the pinned revision (sha/tag/branch).",
    )
    parser.add_argument(
        "--ckpt-name",
        default=None,
        help="Override the checkpoint filename from the config.",
    )
    args = parser.parse_args(argv)

    try:
        cfg = _load_config(Path(args.config))
        repo_id = args.repo_id or cfg["repo_id"]
        revision = args.revision or cfg["revision"]
        ckpt_name = args.ckpt_name or cfg["ckpt_name"]
        vocab_files = list(cfg.get("vocab_files", []))
        result = fetch(
            out=Path(args.out),
            repo_id=repo_id,
            revision=revision,
            ckpt_name=ckpt_name,
            vocab_files=vocab_files,
            license_name=cfg.get("license"),
            license_url=cfg.get("license_url"),
        )
    except Exception as exc:  # noqa: BLE001
        print(traceback.format_exc(), file=sys.stderr)
        print(
            json.dumps(
                {
                    "ok": False,
                    "out": args.out,
                    "errors": [
                        f"unhandled exception in fetch_released_model: {type(exc).__name__}: {exc}"
                    ],
                },
                indent=2,
            )
        )
        return 1

    print(json.dumps(result, indent=2))
    return 0 if result["ok"] else 1


if __name__ == "__main__":
    raise SystemExit(main())

Requirements and compatibility

Written for: Claude Code, OpenAI Codex

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs Python

The author says: Requires docker, nvidia-container-toolkit, and a CUDA-capable NVIDIA GPU. Designed for Claude Code, Codex, and Nemotron.

Security

What our scanner noticed· Medium risk

  • Large base64-encoded blobs
  • Scripts that your agent may run

This skill includes scripts that your agent may run. Read them before you use it.

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
NVIDIA
Publisher
NVIDIA (Official)
Source
NVIDIA/skills · skills/bionemo-kermt-continue-pretrain · commit fce3cca
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE-APACHE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by NVIDIA.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download kermt-continue-pretrain.zip