What is evo2?
Score, embed, and generate DNA sequences with Evo 2, a long-context genomic foundation model.
xuzhougeng/wisp-science
Score, embed, and generate DNA sequences with Evo 2, a long-context genomic foundation model. Use this skill when: (1) Computing per-nucleotide or per-sequence likelihoods for variant effect scoring, (2) Embedding genomic windows for downstream classification, (3) Generating DNA conditioned on a prefix, (4) Scoring regulatory or coding regions across species.
npx skills add https://github.com/xuzhougeng/wisp-science --skill "skills/evo2"Quick start
Install it or open the source, trigger it with a clear task, then follow the source workflow.
npx skills add https://github.com/xuzhougeng/wisp-science --skill "skills/evo2"Use evo2 to help me with: [describe your task]. Before you begin, tell me what input you need, the steps you will follow, and the expected output.
No structured workflow was detected; follow the original SKILL.md below.
Continue to the workflowDirect answers
Score, embed, and generate DNA sequences with Evo 2, a long-context genomic foundation model.
It is relevant to workflows involving Engineering.
SkillSignal detected this source-specific command: npx skills add https://github.com/xuzhougeng/wisp-science --skill "skills/evo2". Inspect the repository and command before running it.
The upstream source does not declare a dedicated Agent platform.
No obvious permission action was detected by the static rules. This is not proof that the Skill is safe.
This page combines upstream documentation with deterministic repository, quality, and static-risk signals. It is not described as a manual test or security review.
SkillSignal brief
Score, embed, and generate DNA sequences with Evo 2, a long-context genomic foundation model.
Useful in these contexts
Core capabilities
Distilled from the source
About 2 min · 9 sections
Use this skill when: (1) Computing per-nucleotide or per-sequence likelihoods for variant effect scoring, (2) Embedding genomic windows for downstream classification, (3) Generating DNA conditioned on a prefix, (4) Scor…
scoresequences returns a list[float] (or np.ndarray) of mean log-likelihoods, one per input sequence. More negative ⇒ less likely under the model. For variant effect, compute Δll = llalt - llref over a fixed window.
generate returns a GenerationOutput with .sequences (list[str]), .logits (list[Tensor]), and .logprobsmean (list[float]) — always populated, no flag required.
Next: pair with borzoi to predict track-level effects of the same variants.
Quality breakdown
Based on traceable docs and repository signals; stars are not treated as quality.
Compare before choosing
These links are selected from shared tasks, functions, stacks, platforms, and same-name variants. Compare the source owner, documentation, permissions, and maintenance signals.
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
Grounded design brief from the adopted corpus — style, WCAG-checked color tokens, typography, layout pattern, anti-patterns. Use on ui-design-brief or any which-style/palette/font/chart decision.
Use BEFORE writing or editing any non-trivial UI — inventories components, design tokens, shadcn primitives, and reusable patterns into state.ui_audit. Hard gate for the ui directive set.
Use BEFORE writing/changing tests, adding mocks, or test-only methods on production classes — vs mocking-the-mock, production pollution, partial mocks, and overfit/tautological assertions
This skill encodes Emil Kowalski's philosophy on UI polish, component design, animation decisions, and the invisible details that make software feel great.
| Requirement | Minimum | Recommended |
|---|---|---|
| Python | 3.11 | 3.12 (<3.13) |
| CUDA | 12.1+ | 12.4+ |
| GPU VRAM | 24 GB (7B bf16) | 80 GB (40B) |
| RAM | 32 GB | 128 GB |
pip install evo2
# Weights pulled from Hugging Face on first model load.
from evo2 import Evo2
model = Evo2("evo2_7b") # or "evo2_40b" — see model table
seqs = ["ATCG" * 50, "GGGCTTAA" * 25]
ll = model.score_sequences(seqs) # → list[float], mean per-token log-likelihood
print(ll)
out = model.generate(
prompt_seqs=["ATGAAAGCT"],
n_tokens=256,
temperature=0.7,
)
print(out.sequences[0])
| Name | Params | Context | VRAM (bf16) | Notes |
|---|---|---|---|---|
evo2_7b | 7 B | 1 M nt | ~22 GB | Default; fits on a single 24 GB+ GPU |
evo2_40b | 40 B | 1 M nt | ~78 GB | H100 80 GB or multi-GPU |
evo2_1b_base | 1 B | 8 K nt | ~6 GB | FP8 path requires sm_89+ (H100) |
score_sequences returns a list[float] (or np.ndarray) of mean log-likelihoods,
one per input sequence. More negative ⇒ less likely under the model. For variant
effect, compute Δll = ll_alt - ll_ref over a fixed window.
generate returns a GenerationOutput with .sequences (list[str]), .logits
(list[Tensor]), and .logprobs_mean (list[float]) — always populated, no flag required.
Need a DNA model?
│
├─ Per-base/per-sequence likelihood, generation → Evo 2 ✓
├─ Predict experimental tracks (expression, accessibility) → borzoi
└─ Protein, not DNA → fair-esm2 / esmfold2
7B/40B inference is GPU-bound (≥24 GB / 80 GB VRAM). Use a selected and
probed ssh:<alias> context and load remote-compute-ssh. Confirm that the
environment imports Evo 2 and that the desired weights are cached. Submit a
self-contained scoring script through one run_in_context call:
{
"context_id": "ssh:gpu-box",
"title": "Evo 2 variant scoring",
"command": "source ~/miniforge3/etc/profile.d/conda.sh && conda activate evo2 && HF_HOME=/srv/model-cache HF_HUB_OFFLINE=1 python score_evo2.py --output /home/me/wisp-results/evo2/scores.json",
"timeout_secs": 1800,
"input_paths": ["runs/score_evo2.py"],
"output_specs": [
{
"glob": "ssh://gpu-box/home/me/wisp-results/evo2/scores.json",
"kind": "json",
"residency": "remote"
}
]
}
Replace context, environment, cache, and output paths with discovered values.
Call monitor_run once to wait, get_run once for a snapshot, or cancel_run
to stop. Set HF_HUB_OFFLINE=1 only after confirming the cache is complete, so
the loader does not try to write refs/ into a read-only mount. Weight footprint:
~15 GB (7B), ~80 GB (40B).
| Task | 7B on H100 | Notes |
|---|---|---|
| Model load (cached) | ~5-7 min | First call hydrates weights |
score_sequences, 200×200bp | ~10-20 s | After load |
generate, 1×512 nt | ~15 s |
| Symptom | Cause | Fix |
|---|---|---|
Transformer Engine not installed | No FP8 — falls back to bf16 | Informational only on non-H100; ignore |
| OOM on load | 40B on <80 GB GPU | Use evo2_7b or shard with device_map |
HF tries to write refs/main | HF_HOME points at RO mount | Set HF_HUB_OFFLINE=1 |
dtype mismatch in score_sequences | Passing tensors not strings | Pass list[str]; the API tokenises for you |
Next: pair with borzoi to predict track-level effects of the same
variants.