Evo 2 — DNA Language Model
SkillAI & modelsScore, 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.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Evo 2 — DNA Language Model skill
What this skill tells your AI
The instructions your AI receives, as published by pku-yuangroup/openai4s in skills/evo2/SKILL.md and read by ahel’s review.
Prerequisites
| 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 |
How to run
Installation
pip install evo2
# Weights pulled from Hugging Face on first model load.
Loading and scoring
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)
Generation
out = model.generate(
prompt_seqs=["ATGAAAGCT"],
n_tokens=256,
temperature=0.7,
)
print(out.sequences[0])
Models
| 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) |
Output format
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.
Decision tree
Need a DNA model?
│
├─ Per-base/per-sequence likelihood, generation → Evo 2 ✓
├─ Predict experimental tracks (expression, accessibility) → borzoi
└─ Protein, not DNA → fair-esm2 / esmfold2
Remote compute
7B/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.submit_job(
intent="Evo2-7B score 200bp variant window — 1×GPU, ~2 min",
inputs=[{"src": "score_evo2.py", "dst_filename": "score_evo2.py"}],
command="python3 score_evo2.py", # env selection is host-specific — see compute_details for your provider
outputs=["scores.json"],
timeout_seconds=1800,
)
print(job.job_id) # cell ends here — kernel never blocks on compute
Then poll from a later cell. .result() is one non-blocking probe of the
remote and is what harvests the outputs once the job is terminal — nothing
runs in the background, so a job you never poll is never harvested. While the
job is still running it returns {"status": "running", …}; end the cell and
call it again later:
r = c.attach_job(job_id).result() # {status, exit_code, output_files,
# featured_files, remote_workdir, …}
if r["status"] == "succeeded":
for path in r["featured_files"]: # paths under hpc/<job_id>/
host.save_artifact(path)
c.close()
# `unknown` is not a finished job — poll again rather than closing over it.
See the remote-compute-ssh / remote-compute-nvidia skill for the
orchestration 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).
Typical performance
| 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 |
Troubleshooting
| 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.
Signals
- GitHub stars
- 404
- Forks
- 48
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
evo2-pku-yuangroup- Source
- github.com/pku-yuangroup/openai4s