Skip to content

Evo2

A multi-domain autoregressive DNA foundation model (1B--40B parameters) built on StripedHyena, supporting embedding extraction, log-probability scoring, and sequence generation across prokaryotic, eukaryotic, and viral genomes.

License: Apache-2.0 · Molecules: dna · Tasks: embedding, sequence_generation, property_prediction

Actions: encode, log_prob, generate · Variants: 1

At a glance

Use it when

  • You need to analyze or generate DNA sequences across all domains of life — prokaryotic, eukaryotic, and viral — with a single model
  • You need long-range genomic context (>12 kbp) for tasks like enhancer-promoter interaction prediction, whole-locus variant effect scoring, or multi-gene region analysis
  • You need DNA embeddings, log-probability scoring, and sequence generation from a single deployment for maximum pipeline flexibility
  • You are predicting variant effects in eukaryotic genomes (especially human clinical variants) where Evo 1.x's prokaryotic training bias would be a limitation (Evo2 is trained across all domains of life)
  • You need layer-selectable embeddings to experiment with different representation depths for your specific downstream task
  • You are designing synthetic DNA sequences that must be plausible across multiple domains of life, not just prokaryotes
  • You need genome-scale DNA generation for synthetic biology applications involving eukaryotic-style genomic organization
Strengths
  • Multi-domain training on 9 trillion nucleotides spanning prokaryotes, eukaryotes, and viruses — the broadest genomic training data of any DNA model in this catalog
  • Three-action API (encode + log_prob + generate) provides embeddings, fitness scoring, and sequence generation in a single model deployment
  • Up to 1M-token context (7B variant) enables genome-scale analysis including whole gene loci, long-range enhancer-promoter interactions, and multi-gene regions
  • Published demonstration of zero-shot BRCA1 pathogenic variant prediction with over 90% accuracy, validating clinical-relevance for eukaryotic variant effect prediction
  • Layer-selectable embedding extraction enables users to choose representation depth — shallow layers for local patterns, deep layers for long-range dependencies
  • Single-nucleotide (byte-level) tokenization preserves full sequence resolution without tokenization artifacts, enabling precise variant effect analysis
  • Multiple size variants (1B base, 7B base) provide a compute-quality tradeoff for different deployment scenarios
  • Apache-2.0 license permits unrestricted commercial and academic use
Limitations
  • Higher compute requirements than embedding-only models — the 1B variant requires an L4 GPU, and the 7B variant requires even more resources for long-context inference
  • Recent model (2025) with limited independent benchmarking beyond the original publication; less established than NT or DNABERT-2 for embedding tasks
  • StripedHyena architecture is less widely adopted than standard transformers, potentially complicating integration with existing downstream pipelines
  • Generated sequences require computational and experimental validation — the model provides statistical plausibility, not guaranteed function
  • Byte-level tokenization produces very long token sequences, resulting in slower inference per nucleotide compared to BPE (DNABERT-2) or 6-mer (NT) approaches
  • No built-in function conditioning for generation — cannot specify target gene function or regulatory activity during sequence design
  • Mechanistic interpretability study (sparse autoencoders) revealed meaningful internal features but also highlighted that the model's decision-making is not yet fully understood
Reach for something else when
  • You need a lightweight, cost-effective model for high-throughput DNA embedding or scoring on T4 GPUs (use dnabert2, which is much smaller)
  • You need only DNA embeddings and the model's independent validation track record is critical for your application (use dnabert2, which has years of benchmark validation)
  • You need codon optimization, restriction site checking, or deterministic DNA feature extraction (use dna_chisel)
  • You are working exclusively with short regulatory elements (<1 kbp) where Evo2's long-context capability provides no advantage over cheaper models like DNABERT-2
  • You need protein-level analysis from coding DNA (translate and use esm2 directly)
  • You need function-conditioned DNA generation with specific functional labels (no built-in conditioning mechanism; consider custom fine-tuning or prompt engineering)
  • You need RNA-specific analysis — Evo2 accepts only ACGT characters
  • You need a model with extensive, multi-year real-world deployment experience (use dnabert2)

Alternatives

Model Better when Worse when
evo More mature publication (Science 2024) with experimental validation of generated sequences; simpler model for prokaryotic-focused tasks where eukaryotic coverage is unnecessary Prokaryotic-only training, no embedding endpoint, shorter context (8 kbp vs up to 1M), and single model size; Evo2 is strictly more capable for multi-domain analysis
dnabert2 Lightweight (117M on T4), BPE tokenization, Apache-2.0 license, and extensive GUE benchmark validation for regulatory element tasks Much shorter context (~4-8 kbp), no generation, smaller capacity, and masked LM architecture; Evo2 is superior for long-range and generative tasks
omni_dna BPE tokenization may better capture intermediate-scale motifs; recent autoregressive architecture designed for multi-task flexibility Smaller model (1B), no generation endpoint, limited validation, and no multi-domain training; Evo2 is more capable across all dimensions

API & schema

Variants

Variant Endpoint slug GPU CPU Memory
1b-base evo2-1b-base l4 4.0 16 GB

Call an action with POST /api/v1/{slug}/{action} — the request envelope is {"items": [...], "params": {...}} and a success returns {"results": [...]}. See the HTTP API page for the base URL, error shape, and full contract.

encode

Call it

curl -X POST http://127.0.0.1:8000/api/v1/evo2-1b-base/encode \
  -H "Content-Type: application/json" \
  -d '{
  "items": [
    {
      "sequence": "MKTAYIAKQRQISFVKSHFSRQLEERLGLIE"
    }
  ]
}'

RequestEvo2EncodeRequest

Field Type Required Constraints Description
params Evo2EncodeRequestParams no Optional parameters controlling this action (defaults are used when omitted).
items list[Evo2EncodeRequestItem] yes items 1–1 Batch of inputs to process in a single request. Up to 1 sequence per request.
Nested types

Evo2EncodeIncludeOptions

Allowed values: mean, last

Evo2EncodeRequestItem

Field Type Required Constraints Description
sequence string yes len 1–4096 A DNA sequence (A/C/G/T).

Evo2EncodeRequestParams

Field Type Required Constraints Description
embedding_layers list[integer] no default [-2] Transformer layers whose embeddings to extract; supports negative indexing from the last layer.
mlp_layer integer no default 3 Index of the MLP sublayer within each transformer block used for embedding extraction.
include list[Evo2EncodeIncludeOptions] no default ['mean'] Optional outputs to compute and include in the response.
Raw JSON Schema
{
  "$defs": {
    "Evo2EncodeIncludeOptions": {
      "enum": [
        "mean",
        "last"
      ],
      "title": "Evo2EncodeIncludeOptions",
      "type": "string"
    },
    "Evo2EncodeRequestItem": {
      "additionalProperties": false,
      "properties": {
        "sequence": {
          "description": "A DNA sequence (A/C/G/T).",
          "maxLength": 4096,
          "minLength": 1,
          "title": "Sequence",
          "type": "string"
        }
      },
      "required": [
        "sequence"
      ],
      "title": "Evo2EncodeRequestItem",
      "type": "object"
    },
    "Evo2EncodeRequestParams": {
      "additionalProperties": false,
      "properties": {
        "embedding_layers": {
          "description": "Transformer layers whose embeddings to extract; supports negative indexing from the last layer.",
          "items": {
            "type": "integer"
          },
          "title": "Embedding Layers",
          "type": "array",
          "default": [
            -2
          ]
        },
        "mlp_layer": {
          "default": 3,
          "description": "Index of the MLP sublayer within each transformer block used for embedding extraction.",
          "title": "Mlp Layer",
          "type": "integer"
        },
        "include": {
          "description": "Optional outputs to compute and include in the response.",
          "items": {
            "$ref": "#/$defs/Evo2EncodeIncludeOptions"
          },
          "title": "Include",
          "type": "array",
          "default": [
            "mean"
          ]
        }
      },
      "title": "Evo2EncodeRequestParams",
      "type": "object"
    }
  },
  "additionalProperties": false,
  "properties": {
    "params": {
      "$ref": "#/$defs/Evo2EncodeRequestParams",
      "description": "Optional parameters controlling this action (defaults are used when omitted)."
    },
    "items": {
      "description": "Batch of inputs to process in a single request. Up to 1 sequence per request.",
      "items": {
        "$ref": "#/$defs/Evo2EncodeRequestItem"
      },
      "maxItems": 1,
      "minItems": 1,
      "title": "Items",
      "type": "array"
    }
  },
  "required": [
    "items"
  ],
  "title": "Evo2EncodeRequest",
  "type": "object"
}

ResponseEvo2EncodeResponse

Field Type Required Constraints Description
results list[Evo2EncodeResponseResult] yes Per-input results, returned in the same order as the request items.
Nested types

Evo2EncodeResponseEmbedding

Field Type Required Constraints Description
layer integer yes Model layer this representation was taken from.
mean list[number] | null no Mean-pooled embedding vector over all non-padded sequence positions for this layer.
last list[number] | null no Last-token embedding vector for this layer; null if not requested.

Evo2EncodeResponseResult

Field Type Required Constraints Description
embeddings list[Evo2EncodeResponseEmbedding] yes Per-layer embedding vectors for the sequence.
Raw JSON Schema
{
  "$defs": {
    "Evo2EncodeResponseEmbedding": {
      "exclude_none": true,
      "exclude_unset": true,
      "properties": {
        "layer": {
          "description": "Model layer this representation was taken from.",
          "title": "Layer",
          "type": "integer"
        },
        "mean": {
          "anyOf": [
            {
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Mean-pooled embedding vector over all non-padded sequence positions for this layer.",
          "title": "Mean"
        },
        "last": {
          "anyOf": [
            {
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Last-token embedding vector for this layer; null if not requested.",
          "title": "Last"
        }
      },
      "required": [
        "layer"
      ],
      "title": "Evo2EncodeResponseEmbedding",
      "type": "object"
    },
    "Evo2EncodeResponseResult": {
      "properties": {
        "embeddings": {
          "description": "Per-layer embedding vectors for the sequence.",
          "items": {
            "$ref": "#/$defs/Evo2EncodeResponseEmbedding"
          },
          "title": "Embeddings",
          "type": "array"
        }
      },
      "required": [
        "embeddings"
      ],
      "title": "Evo2EncodeResponseResult",
      "type": "object"
    }
  },
  "properties": {
    "results": {
      "description": "Per-input results, returned in the same order as the request items.",
      "items": {
        "$ref": "#/$defs/Evo2EncodeResponseResult"
      },
      "title": "Results",
      "type": "array"
    }
  },
  "required": [
    "results"
  ],
  "title": "Evo2EncodeResponse",
  "type": "object"
}

log_prob

Call it

curl -X POST http://127.0.0.1:8000/api/v1/evo2-1b-base/log_prob \
  -H "Content-Type: application/json" \
  -d '{
  "items": [
    {
      "sequence": "MKTAYIAKQRQISFVKSHFSRQLEERLGLIE"
    }
  ]
}'

RequestEvo2LogProbRequest

Field Type Required Constraints Description
items list[Evo2LogProbRequestItem] yes items 1–1 Batch of inputs to process in a single request. Up to 1 sequence per request.
Nested types

Evo2LogProbRequestItem

Field Type Required Constraints Description
sequence string yes len 1–4096 A DNA sequence (A/C/G/T).
Raw JSON Schema
{
  "$defs": {
    "Evo2LogProbRequestItem": {
      "additionalProperties": false,
      "properties": {
        "sequence": {
          "description": "A DNA sequence (A/C/G/T).",
          "maxLength": 4096,
          "minLength": 1,
          "title": "Sequence",
          "type": "string"
        }
      },
      "required": [
        "sequence"
      ],
      "title": "Evo2LogProbRequestItem",
      "type": "object"
    }
  },
  "additionalProperties": false,
  "properties": {
    "items": {
      "description": "Batch of inputs to process in a single request. Up to 1 sequence per request.",
      "items": {
        "$ref": "#/$defs/Evo2LogProbRequestItem"
      },
      "maxItems": 1,
      "minItems": 1,
      "title": "Items",
      "type": "array"
    }
  },
  "required": [
    "items"
  ],
  "title": "Evo2LogProbRequest",
  "type": "object"
}

ResponseEvo2LogProbResponse

Field Type Required Constraints Description
results list[Evo2LogProbResponseResult] yes Per-input results, returned in the same order as the request items.
Nested types

Evo2LogProbResponseResult

Field Type Required Constraints Description
log_prob number yes Log-likelihood of the sequence under the model.
Raw JSON Schema
{
  "$defs": {
    "Evo2LogProbResponseResult": {
      "properties": {
        "log_prob": {
          "description": "Log-likelihood of the sequence under the model.",
          "title": "Log Prob",
          "type": "number"
        }
      },
      "required": [
        "log_prob"
      ],
      "title": "Evo2LogProbResponseResult",
      "type": "object"
    }
  },
  "properties": {
    "results": {
      "description": "Per-input results, returned in the same order as the request items.",
      "items": {
        "$ref": "#/$defs/Evo2LogProbResponseResult"
      },
      "title": "Results",
      "type": "array"
    }
  },
  "required": [
    "results"
  ],
  "title": "Evo2LogProbResponse",
  "type": "object"
}

generate

Call it

curl -X POST http://127.0.0.1:8000/api/v1/evo2-1b-base/generate \
  -H "Content-Type: application/json" \
  -d '{
  "items": [
    {
      "prompt": "string"
    }
  ]
}'

RequestEvo2GenerateRequest

Field Type Required Constraints Description
params Evo2GenerateRequestParams no Optional parameters controlling this action (defaults are used when omitted).
items list[Evo2GenerateRequestItem] yes items 1–1 Batch of inputs to process in a single request. Up to 1 sequence per request.
Nested types

Evo2GenerateRequestItem

Field Type Required Constraints Description
prompt string yes len 1–4096 DNA seed sequence (A/C/G/T only) from which to continue autoregressive generation.

Evo2GenerateRequestParams

Field Type Required Constraints Description
max_new_tokens integer no ≥1; ≤4096; default 100 Maximum number of new tokens to generate.
temperature number no ≥0.0; default 1.0 Sampling temperature; higher values increase diversity.
top_k integer no ≥1; default 4 Top-k sampling cutoff; only the k most likely tokens are sampled.
top_p number no ≥0.0; ≤1.0; default 1.0 Nucleus (top-p) sampling threshold.
seed integer | null no Random seed for reproducible sampling.
Raw JSON Schema
{
  "$defs": {
    "Evo2GenerateRequestItem": {
      "additionalProperties": false,
      "properties": {
        "prompt": {
          "description": "DNA seed sequence (A/C/G/T only) from which to continue autoregressive generation.",
          "maxLength": 4096,
          "minLength": 1,
          "title": "Prompt",
          "type": "string"
        }
      },
      "required": [
        "prompt"
      ],
      "title": "Evo2GenerateRequestItem",
      "type": "object"
    },
    "Evo2GenerateRequestParams": {
      "additionalProperties": false,
      "properties": {
        "max_new_tokens": {
          "default": 100,
          "description": "Maximum number of new tokens to generate.",
          "maximum": 4096,
          "minimum": 1,
          "title": "Max New Tokens",
          "type": "integer"
        },
        "temperature": {
          "default": 1.0,
          "description": "Sampling temperature; higher values increase diversity.",
          "minimum": 0.0,
          "title": "Temperature",
          "type": "number"
        },
        "top_k": {
          "default": 4,
          "description": "Top-k sampling cutoff; only the k most likely tokens are sampled.",
          "minimum": 1,
          "title": "Top K",
          "type": "integer"
        },
        "top_p": {
          "default": 1.0,
          "description": "Nucleus (top-p) sampling threshold.",
          "maximum": 1.0,
          "minimum": 0.0,
          "title": "Top P",
          "type": "number"
        },
        "seed": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Random seed for reproducible sampling.",
          "title": "Seed"
        }
      },
      "title": "Evo2GenerateRequestParams",
      "type": "object"
    }
  },
  "additionalProperties": false,
  "properties": {
    "params": {
      "$ref": "#/$defs/Evo2GenerateRequestParams",
      "description": "Optional parameters controlling this action (defaults are used when omitted)."
    },
    "items": {
      "description": "Batch of inputs to process in a single request. Up to 1 sequence per request.",
      "items": {
        "$ref": "#/$defs/Evo2GenerateRequestItem"
      },
      "maxItems": 1,
      "minItems": 1,
      "title": "Items",
      "type": "array"
    }
  },
  "required": [
    "items"
  ],
  "title": "Evo2GenerateRequest",
  "type": "object"
}

ResponseEvo2GenerateResponse

Field Type Required Constraints Description
results list[Evo2GenerateResponseResult] yes Per-input results, returned in the same order as the request items.
Nested types

Evo2GenerateResponseResult

Field Type Required Constraints Description
generated string yes Autoregressive continuation of the input prompt as a DNA sequence (A/C/G/T).
Raw JSON Schema
{
  "$defs": {
    "Evo2GenerateResponseResult": {
      "properties": {
        "generated": {
          "description": "Autoregressive continuation of the input prompt as a DNA sequence (A/C/G/T).",
          "title": "Generated",
          "type": "string"
        }
      },
      "required": [
        "generated"
      ],
      "title": "Evo2GenerateResponseResult",
      "type": "object"
    }
  },
  "properties": {
    "results": {
      "description": "Per-input results, returned in the same order as the request items.",
      "items": {
        "$ref": "#/$defs/Evo2GenerateResponseResult"
      },
      "title": "Results",
      "type": "array"
    }
  },
  "required": [
    "results"
  ],
  "title": "Evo2GenerateResponse",
  "type": "object"
}

Usage

One-line summary: A multi-domain autoregressive DNA foundation model (1B--40B parameters) built on StripedHyena, supporting embedding extraction, log-probability scoring, and sequence generation across prokaryotic, eukaryotic, and viral genomes.

Overview

Evo 2 is the successor to Evo 1, developed by the Arc Institute, Stanford, and collaborators. It extends the StripedHyena hybrid architecture to larger scales (up to 40B parameters) and, critically, is trained on genomes from all domains of life -- prokaryotes, eukaryotes, and viruses -- overcoming Evo 1's prokaryotic bias.

Evo 2 offers three actions: embedding extraction (new in Evo 2), log-probability scoring, and sequence generation. This makes it a versatile DNA foundation model suitable for both analysis (embeddings, scoring) and design (generation) workflows.

The model was described in Brixi et al. "Genome modeling and design across all domains of life with Evo 2" (bioRxiv, 2025).

Architecture

Property Value
Architecture StripedHyena (hybrid gated convolution + attention)
Tokenization Byte-level (single nucleotide per token)
Vocabulary A, C, G, T + special tokens
Training data Multi-domain genomes (prokaryotic, eukaryotic, viral)
Training objective Autoregressive next-token prediction
Max sequence length 4,096 nt (BioLM API)
License Apache-2.0

For detailed architecture information, see MODEL.md.

Capabilities & Limitations

CAN be used for: - Extracting per-layer DNA embeddings (mean or last-token pooling) for downstream ML tasks - Scoring DNA sequences via total log-probability under the autoregressive distribution - Generating novel DNA sequences from a seed prompt with configurable sampling parameters - Zero-shot variant effect assessment by comparing wild-type vs. mutant log-probabilities - Multi-domain genomic analysis (prokaryotic, eukaryotic, viral)

CANNOT be used for: - Sequences containing ambiguous bases (N, R, Y, etc.) -- only A, C, G, T accepted - Sequences longer than 4,096 nucleotides (BioLM API limit) - RNA sequences (U is not accepted) - Protein sequences (use ESM2 or similar)

Other considerations: - The generate action is stochastic by default; provide an explicit seed for reproducibility - Log-probability scores are summed over all positions; normalize by length for cross-length comparisons - Batch size is limited to 1 item per request

Usage Examples

# Encode -- extract embeddings
from models.evo2.schema import (
    Evo2EncodeIncludeOptions,
    Evo2EncodeRequest,
    Evo2EncodeRequestItem,
    Evo2EncodeRequestParams,
)

encode_request = Evo2EncodeRequest(
    params=Evo2EncodeRequestParams(
        embedding_layers=[-2],
        include=[Evo2EncodeIncludeOptions.MEAN, Evo2EncodeIncludeOptions.LAST],
    ),
    items=[Evo2EncodeRequestItem(sequence="ACGTACGTACGTACGT")],
)

# Score DNA sequences
from models.evo2.schema import Evo2LogProbRequest, Evo2LogProbRequestItem

logprob_request = Evo2LogProbRequest(
    items=[Evo2LogProbRequestItem(sequence="ATGATGATGATGATG")]
)

# Generate DNA sequences with seed for reproducibility
from models.evo2.schema import (
    Evo2GenerateRequest,
    Evo2GenerateRequestItem,
    Evo2GenerateRequestParams,
)

generate_request = Evo2GenerateRequest(
    params=Evo2GenerateRequestParams(
        max_new_tokens=100,
        temperature=0.8,
        top_k=10,
        seed=42,
    ),
    items=[Evo2GenerateRequestItem(prompt="ATGAAAGCAATTTTCGTACTG")],
)

Architecture & training

Architecture

Model Type & Innovation

Evo 2 is a large-scale autoregressive DNA foundation model developed by the Arc Institute, Stanford, and collaborators. It is the successor to Evo 1 and represents a major scaling advance in genomic language modeling. Evo 2 extends the StripedHyena hybrid architecture -- combining gated convolutions (Hyena operators) with multi-head attention -- to model sizes of 1B, 7B, and 40B parameters.

The key innovations of Evo 2 over its predecessor include: - Massive scaling: From 7B (Evo 1) to 40B parameters, demonstrating continued scaling benefits for genomic modeling - Multi-domain training: Trained on genomes from all domains of life (prokaryotes, eukaryotes, and viruses), unlike Evo 1 which focused on prokaryotic genomes - Embedding extraction: Unlike Evo 1, Evo 2 exposes per-layer embedding extraction via the encode action, enabling use as a feature extractor for downstream tasks - Three-action API: Supports embedding extraction, log-probability scoring, and sequence generation in a single model

Parameters & Layers

Variant Parameters Context Architecture GPU
evo2-1b-base ~1B 8k nt StripedHyena L4
evo2-7b-base ~7B 8k nt StripedHyena L4

Additional variants defined but not currently deployed: evo2-7b (1M context), evo2-40b-base (8k), evo2-40b (1M context).

Common across all variants:

Property Value
Architecture StripedHyena (hybrid gated convolution + attention)
Tokenization Byte-level (single nucleotide per token)
Vocabulary A, C, G, T + special tokens
Positional encoding Implicit via convolutional filters + RoPE in attention layers

Training Data

Property Details
Dataset Multi-domain genomic sequences
Composition Prokaryotic, eukaryotic, and viral genomes
Preprocessing Byte-level tokenization; single nucleotide per token

Loss Function & Objective

Standard autoregressive (next-token prediction) objective:

L = -sum_{t=1}^{T} log P(x_t | x_{<t})

This yields both generative capability (sampling new sequences) and scoring capability (evaluating log-probability of existing sequences).

Tokenization / Input Processing

Property Details
Tokenizer Byte-level (character-level), single nucleotide tokens
Special tokens BOS, PAD
Max sequence length 4,096 nt (BioLM API limit)
Input validation A, C, G, T only (unambiguous DNA)
Batch size 1 sequence per request

Performance & Benchmarks

Published Benchmarks

From Brixi et al. "Genome modeling and design across all domains of life with Evo 2" (bioRxiv, 2025):

Key reported findings: - Evo 2 outperforms Evo 1 on DNA fitness prediction benchmarks - Multi-domain training improves generalization to eukaryotic sequences - Scaling from 1B to 40B parameters yields consistent improvements

BioLM Verification Results

Action Test Input Tolerance Status
encode "ACGTACGTAC", layer 22 rel_tol=1e-4 PASS
log_prob "ACGTACGTAC" rel_tol=1e-4 PASS
generate Prompt "ACGT", 10 tokens Valid DNA output PASS

Comparison to Alternatives

Model Key Advantage Key Disadvantage
Evo2 (this) Multi-domain training; embeddings + generation + scoring Larger compute footprint than Evo 1
Evo 1 Proven in Science 2024; lighter weight Prokaryotic bias; no embedding endpoint
Nucleotide Transformer 6-mer tokenization captures broader context per token No generation; encoder-only
DNABERT-2 Lightweight (117M); BPE tokenization Short context; no generation

Error Bars & Confidence

  • encode and log_prob are deterministic for the same input and hardware
  • generate is stochastic by default; provide explicit seed for reproducibility
  • Small floating-point differences (within 1e-4) may occur across different GPU architectures

Strengths & Limitations

Pros

  • Multi-domain training covers prokaryotic, eukaryotic, and viral genomes
  • Three complementary actions: embedding extraction, scoring, and generation
  • Byte-level tokenization preserves single-nucleotide resolution
  • StripedHyena architecture enables near-linear scaling with sequence length
  • Multiple model sizes (1B, 7B) allow speed/quality tradeoffs

Cons

  • Large model footprint -- 7B variant requires significant GPU resources
  • Max API sequence length of 4,096 nt limits some genomic applications
  • Stochastic generation requires explicit seed management for reproducibility
  • Newer model with less downstream validation than Evo 1

Known Failure Modes

  • Very short sequences (< 10 nt): Insufficient context for meaningful embeddings or log-probabilities
  • Repetitive sequences: Highly repetitive DNA (microsatellites, tandem repeats) may receive unreliable scores
  • Non-DNA input: Only A, C, G, T accepted; ambiguity codes and RNA are rejected

Implementation Details

Inference Pipeline

Request
  |-- 1. Validate input (DNA bases only, length <= 4096)
  |-- 2. Route to action:
  |
  |-- [encode]
  |     |-- Tokenize sequences
  |     |-- Pad batch to max length
  |     |-- Forward pass with return_embeddings=True
  |     |-- Extract requested layers (blocks.N.mlp.l3)
  |     |-- Compute mean/last pooling over non-padded tokens
  |     |-- Return per-layer embeddings
  |
  |-- [log_prob]
  |     |-- Tokenize sequences
  |     |-- model.score_sequences(reduce_method="sum")
  |     |-- Return total log-prob per sequence
  |
  |-- [generate]
        |-- Set random seeds (user-provided or time-based)
        |-- model.generate(cached_generation=True)
        |-- Return generated sequence

Memory & Compute Profile

Variant GPU Memory CPU
evo2-1b-base L4 16 GB 4 cores

Only evo2-1b-base is currently enabled and tested. Larger variants (7b-base and up) are planned; see README.md for the full variant list. Their resource requirements will be higher and are not yet finalized.

Determinism & Reproducibility

Action Deterministic Notes
encode Yes Pure forward pass, no randomness
log_prob Yes Uses score_sequences with sum reduction
generate With seed Time-based entropy when seed=None; reproducible with explicit seed

When a seed is provided for generate: - random.seed(seed), np.random.seed(seed), torch.manual_seed(seed), torch.cuda.manual_seed_all(seed)

Caching Behavior

Response caching is handled outside the model container, by the gateway layer: - Cache key derived from full request payload including parameters - For generate with no seed, cache misses are expected on repeated calls

Versions & Changelog

Version Date Changes
v1 -- Initial implementation with encode, log_prob, and generate actions; 1b-base variant enabled (7b-base and larger planned)

Biology

Molecule Coverage

Primary Molecule Type(s)

Evo 2 is trained on genomic DNA from all domains of life -- prokaryotes (bacteria and archaea), eukaryotes (including human and other multicellular organisms), and viruses. This is a major expansion over Evo 1, which was limited to prokaryotic and phage genomes.

The model handles: - Prokaryotic genomes: Bacterial and archaeal chromosomes, plasmids, and operons -- the strongest domain due to training data composition - Eukaryotic genomes: Coding and non-coding regions from diverse eukaryotes, including human - Viral genomes: Bacteriophage and eukaryotic virus sequences - Coding regions: Genes, exons, open reading frames across all domains - Non-coding regions: Intergenic sequences, regulatory elements, introns

Performance considerations: - Multi-domain training improves eukaryotic sequence modeling compared to Evo 1 - The model accepts only unambiguous DNA bases (A, C, G, T) - Single-nucleotide (byte-level) tokenization preserves full sequence resolution

Cross-Applicability

Molecule / Domain Applicability Evidence Caveats
Prokaryotic genomes High Strong training domain; successor to Evo 1 Best performance expected
Eukaryotic coding regions Moderate-High Multi-domain training includes eukaryotes Less training emphasis than prokaryotes
Eukaryotic regulatory elements Moderate Trained on eukaryotic genomes including enhancers Complex distal regulation may be poorly captured
Viral genomes High Included in training data Diverse viral architectures well-represented
Synthetic DNA Moderate Can score constructs via log-probability Novel synthetic motifs may be out-of-distribution
RNA sequences Not supported Input validation rejects non-ACGT characters Convert U to T or use RNA-specific models
Protein sequences Not applicable DNA-only model Use ESM2, SaProt, or similar protein LMs

Biological Problems Addressed

Problem 1: DNA Embedding Extraction

Why this matters: Many downstream genomic analyses require fixed-dimensional numerical representations of variable-length DNA sequences. Unlike Evo 1, Evo 2 provides per-layer embedding extraction, enabling use as a feature backbone for supervised learning tasks -- gene classification, regulatory element prediction, variant effect scoring, and more.

How Evo 2 addresses it: The encode action computes embeddings from specified transformer layers. Users can request mean-pooled or last-token embeddings, and can specify which internal layers to extract from (supporting negative indexing). This flexibility allows researchers to experiment with different representation depths.

Biological meaning: Embeddings from earlier layers tend to capture local sequence patterns (dinucleotide composition, codon usage), while deeper layers capture more abstract, long-range dependencies (gene structure, regulatory context).

Problem 2: DNA Sequence Fitness Scoring

Why this matters: Evaluating whether a DNA sequence is evolutionarily plausible or functionally constrained is fundamental to variant effect prediction, synthetic sequence evaluation, and gene essentiality analysis.

How Evo 2 addresses it: The log_prob action computes the total log-probability of a DNA sequence under the autoregressive distribution. Higher (less negative) scores indicate sequences more consistent with the training distribution.

Interpreting scores: - More negative values = less likely sequences under the model - Relative comparisons (wild-type vs. mutant) are more informative than absolute values - Scores are summed over positions; normalize by length for cross-length comparisons

Problem 3: DNA Sequence Generation

Why this matters: Synthetic biology requires generating novel DNA sequences that are biologically plausible -- realistic codon usage, proper gene structure, and functional regulatory elements. Evo 2's multi-domain training makes it suitable for generating sequences across all domains of life, not just prokaryotes.

How Evo 2 addresses it: The generate action produces new DNA by autoregressively sampling from the learned distribution, given a seed prompt. Parameters (temperature, top-k, top-p) control the diversity-quality tradeoff. Generated sequences should be validated computationally and experimentally before use.

Applied Use Cases

Use Case 1: Multi-Domain Genome Modeling (Published)

Source: Brixi et al. "Genome modeling and design across all domains of life with Evo 2." bioRxiv (2025). doi:10.1101/2025.02.18.638918

Evo 2 demonstrates improved genome modeling across prokaryotic, eukaryotic, and viral domains compared to Evo 1, establishing the benefit of multi-domain training for genomic foundation models.

Use Case 2: Eukaryotic Variant Effect Prediction (Anticipated)

Using Evo 2 embeddings or log-probability scores to predict the functional impact of mutations in human and other eukaryotic genomes -- a task where Evo 1's prokaryotic bias was a limitation.

Predecessor Models

  • Evo 1 (Nguyen et al., Science 2024): The original 7B DNA model trained on prokaryotic genomes. Evo 2 extends this with multi-domain training and additional model sizes. Evo 1 is available separately in this catalog.

Complementary Models

  • Nucleotide Transformer: BERT-style DNA embeddings. Use NT for masked language modeling tasks; use Evo 2 for generation and autoregressive scoring.
  • ESM2: Protein language model. For DNA-to-protein workflows, use Evo 2 for DNA analysis and ESM2 for downstream protein analysis.
  • DNA-Chisel: Deterministic DNA feature extraction. Combine with Evo 2 embeddings for interpretable feature engineering.

Alternative Models

Alternative Advantage over Evo 2 Disadvantage vs Evo 2
Evo 1 Published in Science; well-validated Prokaryotic only; no embedding endpoint
Nucleotide Transformer 6-mer tokenization; good for classification No generation; encoder-only
DNABERT-2 Lightweight; BPE tokenization Shorter context; no generation
HyenaDNA Very long context (up to 1M bp) Smaller model; less training data

Biological Background

DNA (deoxyribonucleic acid) is the molecule encoding genetic information in all cellular life. It consists of four nucleotide bases -- adenine (A), cytosine (C), guanine (G), and thymine (T) -- arranged in a double-helical structure. The sequence of these bases encodes genes (transcribed to RNA, often translated to protein) and regulatory instructions controlling gene expression.

Key concepts relevant to Evo 2:

  • Autoregressive modeling: Predicting the next nucleotide given all preceding nucleotides. This objective naturally captures the statistical structure of genomes -- codon usage, regulatory motifs, gene boundaries -- without explicit supervision.
  • Multi-domain training: By training on genomes from bacteria, archaea, eukaryotes, and viruses, Evo 2 learns universal patterns of DNA organization that transcend individual species, while also capturing domain-specific features.
  • Embeddings: Dense numerical vectors representing DNA sequences in a learned high-dimensional space. Similar sequences (by function, structure, or evolutionary origin) cluster together in embedding space.
  • Log-probability scoring: The total log-probability of a sequence under the model serves as a proxy for evolutionary plausibility. Functionally constrained regions (essential genes, conserved regulatory elements) tend to have higher log-probabilities.
  • StripedHyena: A hybrid architecture that combines efficient gated convolutions (for capturing long-range patterns without quadratic cost) with attention layers (for precise positional interactions), enabling modeling of long genomic sequences.

Sources & license

License: Apache-2.0 (text)

Papers

  • Genome modeling and design across all domains of life with Evo 2 — bioRxiv, 2025 · DOI

Source repositories

Cite

@article{brixi2025evo2,
  title={Genome modeling and design across all domains of life with Evo 2},
  author={Brixi, Garyk and Durber, Matthew G and Nguyen, Eric and Poli, Michael and Bartie, Liam J and Hie, Brian L and Re, Christopher and Hsu, Patrick D},
  journal={bioRxiv},
  year={2025},
  doi={10.1101/2025.02.18.638918}
}