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.
71
89%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
| 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 / esmfold27B/40B inference is GPU-bound (≥24 GB / 80 GB VRAM). Read
compute_details({provider, mode:'read'}) for an environment with evo2 +
flash-attn and a pre-cached HF weight mount, then submit:
c = host.compute.create(provider)
job = c.submitJob(
intent="Evo2-7B score 200bp variant window — 1×GPU, ~2 min",
inputs=[{"src": "score_evo2.py", "dstFilename": "score_evo2.py"}],
command="python3 score_evo2.py", # env selection is host-specific — see compute_details for your provider
outputs=["scores.json"],
timeoutSeconds=1800,
)
print(job.job_id) # cell ends here — kernel never blocks on computeRetain the exact returned job_id. Query that saved ID with the non-blocking
c.attachJob(job_id).status() or .result() when its state or result is relevant; do not scan Job
history. A final .result() read reports whether its follow-up was suppressed or had already been
committed; otherwise the app starts the later analysis turn for an unread final result. See the
remote-compute-ssh skill for details.
Inside score_evo2.py, point HF_HOME at the provider's weight-cache mount
(path is in compute_details) and set HF_HUB_OFFLINE=1 so the loader
doesn't 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.
bf35648
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.