EVO Models
EVO2¶
In [ ]:
Copied!
## Make sure you have installed the dependencies for Evo2 model
## (Install flash_attn and transformer-engine require compile, which may take a while)
# !uv pip install "flash_attn<=2.7.4.post1" --no-build-isolation --no-cache-dir
# !uv pip install "transformer-engine[pytorch]==2.3.0" --no-build-isolation --no-cache-dir
# !uv pip install evo2==0.3.0
## Make sure you have installed the dependencies for Evo2 model
## (Install flash_attn and transformer-engine require compile, which may take a while)
# !uv pip install "flash_attn<=2.7.4.post1" --no-build-isolation --no-cache-dir
# !uv pip install "transformer-engine[pytorch]==2.3.0" --no-build-isolation --no-cache-dir
# !uv pip install evo2==0.3.0
In [1]:
Copied!
from dnallm import load_config
from dnallm import load_model_and_tokenizer, DNAInference
from dnallm import load_config
from dnallm import load_model_and_tokenizer, DNAInference
In [2]:
Copied!
# Load configurations
configs = load_config("./inference_evo_config.yaml")
# Load configurations
configs = load_config("./inference_evo_config.yaml")
In [ ]:
Copied!
model_name = "arcinstitute/evo2_1b_base"
model, tokenizer = load_model_and_tokenizer(model_name, task_config=configs['task'], source="huggingface")
model_name = "arcinstitute/evo2_1b_base"
model, tokenizer = load_model_and_tokenizer(model_name, task_config=configs['task'], source="huggingface")
[09/17/25 11:13:04] INFO root - INFO - Could not find package transformer_engine_jax. Install __init__.py:58 transformer-engine using 'pip3 install transformer-engine[jax]==VERSION'
11:13:05 - dnallm.models.model - WARNING - Current device compute capability is 8.0, which does not support FP8.
Downloading Model from https://www.modelscope.cn to directory: /home/liuguanqing/.cache/modelscope/hub/models/lgq12697/evo2_1b_base 11:13:06 - dnallm.models.model - INFO - Model files are stored in /home/liuguanqing/.cache/modelscope/hub/models/lgq12697/evo2_1b_base
Loading model from /home/liuguanqing/.cache/modelscope/hub/models/lgq12697/evo2_1b_base/evo2_1b_base.pt... Loading config from /home/liuguanqing/github/dnallm_dev/DNALLM/dnallm/configuration/evo/evo2-1b-8k-noFP8.yml...
INFO StripedHyena - INFO - Initializing StripedHyena with config: model.py:616 {'model_name': 'shc-evo2-1b-8k-2T-v2', 'vocab_size': 512, 'hidden_size': 1920, 'num_filters': 1920, 'attn_layer_idxs': [3, 10, 17, 24], 'hcl_layer_idxs': [2, 6, 9, 13, 16, 20, 23], 'hcm_layer_idxs': [1, 5, 8, 12, 15, 19, 22], 'hcs_layer_idxs': [0, 4, 7, 11, 14, 18, 21], 'hcm_filter_length': 128, 'hcl_filter_groups': 1920, 'hcm_filter_groups': 128, 'hcs_filter_groups': 128, 'hcs_filter_length': 7, 'num_layers': 25, 'short_filter_length': 3, 'num_attention_heads': 15, 'short_filter_bias': False, 'mlp_init_method': 'torch.nn.init.zeros_', 'mlp_output_init_method': 'torch.nn.init.zeros_', 'eps': 1e-06, 'state_size': 16, 'rotary_emb_base': 10000, 'make_vocab_size_divisible_by': 8, 'inner_size_multiple_of': 16, 'inner_mlp_size': 5120, 'log_intermediate_values': False, 'proj_groups': 1, 'hyena_filter_groups': 1, 'column_split_hyena': False, 'column_split': True, 'interleave': True, 'evo2_style_activations': True, 'model_parallel_size': 1, 'pipe_parallel_size': 1, 'tie_embeddings': True, 'mha_out_proj_bias': True, 'hyena_out_proj_bias': True, 'hyena_flip_x1x2': False, 'qkv_proj_bias': False, 'use_fp8_input_projections': False, 'max_seqlen': 8192, 'max_batch_size': 1, 'final_norm': True, 'use_flash_attn': True, 'use_flash_rmsnorm': False, 'use_flash_depthwise': False, 'use_flashfft': False, 'use_laughing_hyena': False, 'inference_mode': True, 'tokenizer_type': 'CharLevelTokenizer', 'prefill_style': 'fft', 'mlp_activation': 'gelu', 'print_activations': False}
0%| | 0/25 [00:00<?, ?it/s]
52%|█████▏ | 13/25 [00:00<00:00, 129.92it/s]
100%|██████████| 25/25 [00:00<00:00, 158.67it/s]
Extra keys in state_dict: {'unembed.weight', 'blocks.10.mixer.dense._extra_state', 'blocks.17.mixer.dense._extra_state', 'blocks.24.mixer.dense._extra_state', 'blocks.3.mixer.dense._extra_state'}
In [4]:
Copied!
# Create inference engine
inference_engine = DNAInference(
model=model,
tokenizer=tokenizer,
config=configs
)
# Create inference engine
inference_engine = DNAInference(
model=model,
tokenizer=tokenizer,
config=configs
)
In [5]:
Copied!
output = inference_engine.generate(["@", "ATG"])
output = inference_engine.generate(["@", "ATG"])
WARNING: Batched generation is turned off.
Initializing inference params with max_seqlen=401
/home/liuguanqing/github/dnallm_dev/DNALLM/.venv/lib/python3.12/site-packages/vortex/model/engine.py:559: UserWarning: Casting complex values to real discards the imaginary part (Triggered internally at /pytorch/aten/src/ATen/native/Copy.cpp:308.) inference_params.state_dict[layer_idx] = state[..., L - 1].to(dtype=state_dtype)
Initializing inference params with max_seqlen=403 Prompt: "@", Output: "AGTTGCTGTGGGCAGCTAAAGAAGCTTTCTGGTATACGCTAAGACCCCCAATGTTCACCGAACCGTTAGAGGGACCTCATCCGCCGAAGTAATTGTTGATGAAACAATATTCAATTCATCCGGTTTCACAGTGTGGCTAGTAAGTCATGAATTTACCACCCTGCGGACGGTGTGGGCCACCAGGCGGCCTGGCCATCACCAAGGTCTTATCACGACGAAGATCGCCGTTAAAAGTTTGTACAAAGGAAGCAGTTTTGGTCGTTTCAGCAGTCTGGTGGGCTCAATCATCCAAAACTTGCACGTTCGCTACAGATACGCCGAGCCTAAGGTCTTCATAGTCATCACCACAACGCATGGCGACAAAATGGAATTGTACGCGTACCGCAGCAGTTCATGTGTA", Score: -1.3838366270065308 Prompt: "ATG", Output: "CGTGACATTCGCATTTTTTTTTTGCTTTTAGATTTTGTTTTTTAAAATACTGTTTTCTACTTATGTCGCGGCGTCTTTGTCTTTTACGCAACCCCGGAGTGCAAGGGCATCATCCTAGTTGTGTTCACCGCGGAAGAGAGCGAAACCATTTTAGAATCTCTTATACACCACCCCAGCTTTTTCTACGTAACAAACAGACTAATTAACGACAATGCACGACCTTATTACCTACAGTAAATGACTTATGCACCGACCATGTTTCGAGTGTGACAGTACGGCTTCACCACCCGCAATATTTTCCAGCCAACATCCAGATCAACGAACTTTCAAGTTAAACGGACGTAAGCTCCTACAAGAAGCAGGCCTGCCCCGAGACACGGCTAGTCATTCGCGGTCCCCA", Score: -1.334855318069458
In [6]:
Copied!
for seq in output:
print(f"Input Sequence: {seq['Prompt']}")
print(f"Generated Sequence: {seq['Output']}")
print(f"Score: {seq['Score']}")
print()
for seq in output:
print(f"Input Sequence: {seq['Prompt']}")
print(f"Generated Sequence: {seq['Output']}")
print(f"Score: {seq['Score']}")
print()
Input Sequence: @ Generated Sequence: AGTTGCTGTGGGCAGCTAAAGAAGCTTTCTGGTATACGCTAAGACCCCCAATGTTCACCGAACCGTTAGAGGGACCTCATCCGCCGAAGTAATTGTTGATGAAACAATATTCAATTCATCCGGTTTCACAGTGTGGCTAGTAAGTCATGAATTTACCACCCTGCGGACGGTGTGGGCCACCAGGCGGCCTGGCCATCACCAAGGTCTTATCACGACGAAGATCGCCGTTAAAAGTTTGTACAAAGGAAGCAGTTTTGGTCGTTTCAGCAGTCTGGTGGGCTCAATCATCCAAAACTTGCACGTTCGCTACAGATACGCCGAGCCTAAGGTCTTCATAGTCATCACCACAACGCATGGCGACAAAATGGAATTGTACGCGTACCGCAGCAGTTCATGTGTA Score: -1.3838366270065308 Input Sequence: ATG Generated Sequence: CGTGACATTCGCATTTTTTTTTTGCTTTTAGATTTTGTTTTTTAAAATACTGTTTTCTACTTATGTCGCGGCGTCTTTGTCTTTTACGCAACCCCGGAGTGCAAGGGCATCATCCTAGTTGTGTTCACCGCGGAAGAGAGCGAAACCATTTTAGAATCTCTTATACACCACCCCAGCTTTTTCTACGTAACAAACAGACTAATTAACGACAATGCACGACCTTATTACCTACAGTAAATGACTTATGCACCGACCATGTTTCGAGTGTGACAGTACGGCTTCACCACCCGCAATATTTTCCAGCCAACATCCAGATCAACGAACTTTCAAGTTAAACGGACGTAAGCTCCTACAAGAAGCAGGCCTGCCCCGAGACACGGCTAGTCATTCGCGGTCCCCA Score: -1.334855318069458
In [7]:
Copied!
scores = inference_engine.scoring(["ATCCGCATG", "ATGCGCATG"])
for res in scores:
print(f"Input Sequence: {res['Input']}")
print(f"Score: {res['Score']}")
print()
scores = inference_engine.scoring(["ATCCGCATG", "ATGCGCATG"])
for res in scores:
print(f"Input Sequence: {res['Input']}")
print(f"Score: {res['Score']}")
print()
100%|██████████| 2/2 [00:00<00:00, 49.34it/s]
Input Sequence: ATCCGCATG Score: -1.4130859375 Input Sequence: ATGCGCATG Score: -1.4072265625
EVO1¶
In [ ]:
Copied!
## Make sure you have installed the dependencies for Evo-1 model
# !uv pip install "flash_attn<=2.7.4.post1" --no-build-isolation --no-cache-dir
# !uv pip install evo-model==0.4
## Make sure you have installed the dependencies for Evo-1 model
# !uv pip install "flash_attn<=2.7.4.post1" --no-build-isolation --no-cache-dir
# !uv pip install evo-model==0.4
In [ ]:
Copied!
model_name = "togethercomputer/evo-1-131k-base"
model, tokenizer = load_model_and_tokenizer(model_name, task_config=configs['task'], source="huggingface", use_mirror=True)
model_name = "togethercomputer/evo-1-131k-base"
model, tokenizer = load_model_and_tokenizer(model_name, task_config=configs['task'], source="huggingface", use_mirror=True)
11:13:18 - dnallm.models.model - INFO - Using HuggingFace mirror at hf-mirror.com
11:15:30 - dnallm.models.model - INFO - Model files are stored in /home/liuguanqing/.cache/huggingface/hub/models--togethercomputer--evo-1-131k-base/snapshots/78c715ab81852e02ec3b1c7e795dc7250d8c7625
Loading checkpoint shards: 0%| | 0/3 [00:00<?, ?it/s]
In [9]:
Copied!
# Create inference engine
inference_engine = DNAInference(
model=model,
tokenizer=tokenizer,
config=configs
)
# Create inference engine
inference_engine = DNAInference(
model=model,
tokenizer=tokenizer,
config=configs
)
In [10]:
Copied!
output = inference_engine.generate(["@", "ACGT"])
output = inference_engine.generate(["@", "ACGT"])
Note: Prompts are of different lengths. Note: Will not do batched generation.
Prompt: "@", Output: "TGCGCCGCAAAAACTTAACAAACTAAAAAAGCCCAACACGTCAAAGATAAACAAGCCAGCCCAAGAAAAAAATAAACCCACACAAAACTCCACGATGCGAATCAGCCCCACCGCGCAACGTCACCTAGCGGGGTTCTAACAACTGCGAATCAAGCGCTTTTTACGTATCATACCGGCGCACGTACAGACCAAACAAACATAAATCCGCCTAAGGTAAAACAAAACGAACCCCACCCTGCATCATAGGCCAAAGCTTTCCCGTGCCCATAGACGCTAATATTGATCCATCAGCAGATTGTTTATTCCCAACAAGGTTGCCGTGTGTTTCAGCCGGGTTGTTCAAACGTTCAGCCATCATCATCATCAATCTTTACTCATTTTATAAACAACTAACAAACGT", Score: -1.4032673835754395 Prompt: "ACGT", Output: "GAAACTAAGAAAAACTACAAAAAAACCAAACAAAGAAACAAAAACAACAACACCCGAAAACCGCTCAAACCAGCAGCTGTTTCCCGCAACAGCTGCACCAGAACTGCAACACCCCTTCACCACAAAATAACGCCAGAAACTCACCAGACCTTCGCCACAAATCGCAAAAAAACATCACCAACACCGTTCACTTTCTTCAGCAAACCAGCAACAGCGCGACCCGGGCTCCAACACCGTGAAAAAATTTTTAAAATAAATCTGAAACTGGATCGCTGCGTTGCCAGCAGCGGTTGCGTCCCGCGTGCAGCGCGCAGGCAGATCACAAAATAAAATCACGAAGCGCCGCGCGGCGCGCAAACATCGCCAGCATCATTTTCGCCATCTCGGTCTTAGCGTGTTT", Score: -1.8380001783370972
In [11]:
Copied!
for seq in output:
print(f"Input Sequence: {seq['Prompt']}")
print(f"Generated Sequence: {seq['Output']}")
print(f"Score: {seq['Score']}")
print()
for seq in output:
print(f"Input Sequence: {seq['Prompt']}")
print(f"Generated Sequence: {seq['Output']}")
print(f"Score: {seq['Score']}")
print()
Input Sequence: @ Generated Sequence: TGCGCCGCAAAAACTTAACAAACTAAAAAAGCCCAACACGTCAAAGATAAACAAGCCAGCCCAAGAAAAAAATAAACCCACACAAAACTCCACGATGCGAATCAGCCCCACCGCGCAACGTCACCTAGCGGGGTTCTAACAACTGCGAATCAAGCGCTTTTTACGTATCATACCGGCGCACGTACAGACCAAACAAACATAAATCCGCCTAAGGTAAAACAAAACGAACCCCACCCTGCATCATAGGCCAAAGCTTTCCCGTGCCCATAGACGCTAATATTGATCCATCAGCAGATTGTTTATTCCCAACAAGGTTGCCGTGTGTTTCAGCCGGGTTGTTCAAACGTTCAGCCATCATCATCATCAATCTTTACTCATTTTATAAACAACTAACAAACGT Score: -1.4032673835754395 Input Sequence: ACGT Generated Sequence: GAAACTAAGAAAAACTACAAAAAAACCAAACAAAGAAACAAAAACAACAACACCCGAAAACCGCTCAAACCAGCAGCTGTTTCCCGCAACAGCTGCACCAGAACTGCAACACCCCTTCACCACAAAATAACGCCAGAAACTCACCAGACCTTCGCCACAAATCGCAAAAAAACATCACCAACACCGTTCACTTTCTTCAGCAAACCAGCAACAGCGCGACCCGGGCTCCAACACCGTGAAAAAATTTTTAAAATAAATCTGAAACTGGATCGCTGCGTTGCCAGCAGCGGTTGCGTCCCGCGTGCAGCGCGCAGGCAGATCACAAAATAAAATCACGAAGCGCCGCGCGGCGCGCAAACATCGCCAGCATCATTTTCGCCATCTCGGTCTTAGCGTGTTT Score: -1.8380001783370972
In [12]:
Copied!
scores = inference_engine.scoring(["ATCCGCATG", "ATGCGCATG"])
for res in scores:
print(f"Input Sequence: {res['Input']}")
print(f"Score: {res['Score']}")
print()
scores = inference_engine.scoring(["ATCCGCATG", "ATGCGCATG"])
for res in scores:
print(f"Input Sequence: {res['Input']}")
print(f"Score: {res['Score']}")
print()
Input Sequence: ATCCGCATG Score: -3.7654080390930176 Input Sequence: ATGCGCATG Score: -3.502007484436035
In [ ]:
Copied!