Evo2
模型介绍
Evo2 是一个面向基因组序列的大规模基础模型,能够对 DNA/RNA 序列进行生成、补全和功能预测。它支持在大规模基因组数据集上预训练,并可快速适配到调控元件预测、变异效应评估等下游任务,为基因组学研究提供了统一的序列建模工具。
模型描述
Evo2 基于 Hyena 算子与卷积门控混合架构,支持百万级上下文窗口。模型在数万亿碱基对的多物种基因组数据上预训练。输入原始核苷酸序列,支持自回归生成、序列分类与嵌入提取。兼容多 GPU 分布式训练与灵活数据混合,在 GenBench 等基准中性能领先,适用于预训练、微调及下游功能验证。
适用场景
| 场景 | 说明 |
|---|---|
| DNA/RNA 序列生成 | 输入 prompt 后生成后续基因组序列片段 |
| FASTA 序列预测 | 读取 FASTA 输入并输出序列预测结果 |
| 本地离线推理验证 | 使用仓库内示例输入和本地 checkpoint 跑通推理链路 |
| mini 训练流程验证 | 使用 data/data_mini/genome_data/ 验证训练脚本、数据读取和 checkpoint 流程 |
| 集群训练适配 | 使用 scripts/train_slurm.py 在 Slurm/集群环境中运行训练 |
| 数据预处理 | 对 FASTA/JSON 数据生成 Byte-Level tokenizer 所需的 .bin/.idx 数据 |
使用说明
1. OneCode 使用
可通过 OneCode 在线环境体验智能化一键式 AI4S 编程:
2. 手动安装使用
硬件要求
- 推荐使用 GPU 或 DCU 运行。
- CPU 可以用于导入和小配置连通性验证,完整训练和推理速度较慢。
- DCU 用户需要预先安装 DTK,建议使用 DTK 25.04.2 以上版本或与当前集群匹配的 OneScience 推荐版本。
下载模型包
modelscope download --model OneScience/evo2 --local_dir ./evo2
cd evo2
安装运行环境
DCU环境
# 请首先激活DTK及CONDA
conda create -n onescience311 python=3.11 -y
conda activate onescience311
# 支持uv安装
pip install onescience[bio] -i http://mirrors.onescience.ai:3141/pypi/simple/ --trusted-host mirrors.onescience.ai
如果脚本需要访问 OneScience 源码,可设置:
export ONESCIENCE_ROOT=/path/to/onescience
在本目录运行时,脚本会自动把项目根目录和 model/ 加入 sys.path。也可以手动验证本地包导入:
export PYTHONPATH=$(pwd)/model:${PYTHONPATH:-}
python -c "import evo2; print('evo2 import ok')"
3. 快速开始
快速检查
查看入口参数:
python scripts/infer.py --help
python scripts/predict.py --help
python scripts/train.py --help
python scripts/train_slurm.py --help
4. 数据与权重
示例训练数据已放在:
data/data_mini/genome_data/
其中包含:
chr20.fa、chr21.fa、chr22.fa及压缩版本- 合并 FASTA:
chr20_21_22.fa - 预处理后的训练、验证、测试二进制数据:
preprocessed_data/
config/genome_data_config.yaml 中的 dataset_prefix 是相对路径,实际运行时需要配合:
--dataset-dir data/data_mini/genome_data
默认 7B NeMo checkpoint 放置在仓库内:
checkpoints/evo2_nemo_7b/
推理和预测入口会默认读取该目录;训练默认不加载 checkpoint。如需从已有权重微调或续训,请在训练命令中显式传入 --ckpt-dir checkpoints/evo2_nemo_7b。也可以通过 EVO2_CKPT_DIR 或 --ckpt-dir 覆盖为其他 checkpoint 路径:
export EVO2_CKPT_DIR=/path/to/evo2_nemo_7b
权重文件在/path/to/evo2/checkpoints/evo2_nemo_7b/weights路径下
5. Prompt 生成推理
infer.py 会把结果写入 --output-file,但不会自动创建父目录。首次运行前先创建输出目录:
mkdir -p outputs
最小示例:
python scripts/infer.py \
--prompt "ATGCGT" \
--output-file outputs/evo2_generation.txt
常用参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--ckpt-dir |
checkpoints/evo2_nemo_7b |
NeMo checkpoint 目录,可用 EVO2_CKPT_DIR 覆盖 |
--prompt |
内置 E. coli 分类标签 prompt | 输入序列或文本 prompt |
--max-new-tokens |
1024 |
最大生成 token 数 |
--temperature |
1.0 |
采样温度 |
--top-k |
0 |
top-k 采样 |
--top-p |
0.0 |
top-p 采样 |
--tensor-parallel-size |
1 |
张量并行规模 |
--output-file |
空 | 指定时写入文件,否则打印日志 |
6. FASTA 预测
目录内置示例 FASTA:
data/predict_example.fa
运行预测:
python scripts/predict.py \
--fasta data/predict_example.fa \
--output-dir outputs/predict
predict.py 会自动创建 --output-dir。如不传 --fasta,默认读取 data/predict_example.fa;如不传 --output-dir,默认输出到 outputs/predict。
常用参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--fasta |
data/predict_example.fa |
输入 FASTA 文件 |
--ckpt-dir |
checkpoints/evo2_nemo_7b |
NeMo checkpoint 目录,可用 EVO2_CKPT_DIR 覆盖 |
--output-dir |
outputs/predict |
预测结果目录 |
--batch-size |
1 |
预测 batch size |
--model-size |
7b |
模型规格,可选值由 NeMo HYENA_MODEL_OPTIONS 决定 |
--output-log-prob-seqs |
关闭 | 输出序列 log probability |
data/data_mini/genome_data/chr20.fa、chr21.fa、chr22.fa 是较大的染色体级 FASTA。直接预测可能占用较高显存,建议先切分为较短片段,或使用多卡并行配置。
7. 训练
训练入口要求二选一:传入 -d/--dataset-config,或使用 --mock-data。内置示例数据推荐使用 config/genome_data_config.yaml 和 data/data_mini/genome_data。
使用 1B 架构从头训练或做训练流程验证示例:
python scripts/train.py \
-d config/genome_data_config.yaml \
--dataset-dir data/data_mini/genome_data \
--model-size 1b \
--result-dir results_1b \
--devices 8 \
--num-nodes 1 \
--seq-length 8192 \
--micro-batch-size 2 \
--lr 0.0001 \
--warmup-steps 5 \
--max-steps 1000 \
--clip-grad 1 \
--wd 0.01 \
--activation-checkpoint-recompute-num-layers 1 \
--val-check-interval 50 \
--limit-val-batches 2
该示例不加载 checkpoint,适合在没有 1B 权重时验证训练链路。如需从 1B NeMo checkpoint 微调,可额外传入 --ckpt-dir /path/to/evo2_nemo_1b。
使用 7B 长上下文架构从头训练或做训练流程验证示例:
python scripts/train.py \
-d config/genome_data_config.yaml \
--dataset-dir data/data_mini/genome_data \
--model-size 7b_arc_longcontext \
--result-dir results_7b \
--devices 8 \
--num-nodes 1 \
--seq-length 1024 \
--micro-batch-size 1 \
--lr 0.0001 \
--warmup-steps 5 \
--max-steps 1000 \
--clip-grad 1 \
--wd 0.01 \
--activation-checkpoint-recompute-num-layers 1 \
--val-check-interval 50 \
--limit-val-batches 2
该示例不加载 checkpoint。若需要从已有 7B NeMo checkpoint 微调或续训,可额外传入 --ckpt-dir checkpoints/evo2_nemo_7b 或其他 checkpoint 路径。
Slurm/集群环境可把入口替换为:
python scripts/train_slurm.py ...
常用训练参数:
下表覆盖上面训练示例和 scripts/train_evo2_1b.sh、scripts/train_evo2_7b.sh 中用到的主要参数;更多高级参数可运行 python scripts/train.py --help 查看。
| 参数 | 默认值 | 说明 |
|---|---|---|
-d, --dataset-config |
必填或使用 --mock-data |
训练数据配置 YAML |
--mock-data |
关闭 | 不读取真实数据,使用 mock 数据做连通性测试;与 -d/--dataset-config 二选一 |
--dataset-dir |
EVO2_DATASET_DIR 或 data/data_mini/genome_data |
数据根目录 |
--ckpt-dir |
空 | 初始 checkpoint 目录;从已有权重微调或续训时显式传入 |
--model-size |
7b |
模型规格,常用 1b、7b、7b_arc_longcontext,测试可用 test |
--devices |
1 |
单节点设备数 |
--num-nodes |
1 |
节点数 |
--tensor-parallel-size |
1 |
张量并行规模 |
--pipeline-model-parallel-size |
1 |
流水线并行规模 |
--context-parallel-size |
1 |
context parallel 规模 |
--sequence-parallel |
关闭 | 启用 sequence parallel,通常配合张量并行使用 |
--seq-length |
8192 |
训练序列长度 |
--micro-batch-size |
1 |
micro batch size |
--global-batch-size |
自动推断 | global batch size |
--grad-acc-batches |
1 |
梯度累积 batch 数,用于推断 global batch size |
--lr |
3e-4 |
学习率,示例中显式设为 0.0001 |
--min-lr |
3e-5 |
cosine scheduler 最小学习率 |
--warmup-steps |
2500 |
warmup 步数,示例中显式设为 5 |
--constant-steps |
80000 |
学习率保持常量的步数 |
--max-steps |
500000 |
训练步数 |
--wd |
0.01 |
optimizer weight decay |
--clip-grad |
1.0 |
梯度裁剪阈值 |
--workers |
8 |
DataLoader worker 数 |
--activation-checkpoint-recompute-num-layers |
空 | 覆盖激活重计算层数,示例中显式设为 1 |
--val-check-interval |
空 | 验证和 checkpoint 检查间隔,示例中显式设为 50 |
--limit-val-batches |
20 |
每次验证最多运行的 batch 数,示例中显式设为 2 |
--result-dir |
./results |
日志与结果目录 |
--experiment-name |
evo2 |
实验名称,影响日志目录 |
--disable-checkpointing |
默认不传,checkpoint 回调启用 | 连通性测试时可传入该参数关闭 checkpoint 回调 |
--no-save-last-checkpoint |
默认保存 last checkpoint | 禁止保存最后一个 checkpoint,常与 --disable-checkpointing 一起用于快速测试 |
--save-top-k |
5 |
保存最优 checkpoint 数量 |
--ckpt-async-save |
关闭 | 启用异步 checkpoint 保存 |
8. 数据预处理
当前示例训练数据已预处理。如需处理新的 FASTA 或 JSON 数据,可使用:
bash scripts/tools/data_process/preprocess_data_fasta.sh
bash scripts/tools/data_process/preprocess_data_json.sh
相关配置:
config/genome_preprocess_config.yaml
config/genome_data_config.yaml
OneScience 官方信息
| 平台 | OneScience 主仓库 | Skills 仓库 |
|---|---|---|
| Gitee | https://gitee.com/onescience-ai/onescience | https://gitee.com/onescience-ai/oneskills |
| GitHub | https://github.com/onescience-ai/OneScience | https://github.com/onescience-ai/oneskills |
引用与许可证
- Evo2 原始论文:Genome modelling and design across all domains of life with Evo 2。
- Evo2 原始代码使用 Apache License 2.0,见本仓库
LICENSE。原始许可证来源:ArcInstitute/evo2 LICENSE。 - Evo2 7B 模型权重来源于 HuggingFace
arcinstitute/evo2_7b,本仓库中checkpoints/evo2_nemo_7b为转换后的 NeMo checkpoint 格式。原始权重许可证为 Apache-2.0。 - 示例数据集
data/data_mini/genome_data/由 UCSC Genome Browser 提供的 hg38chr20、chr21、chr22chromosome FASTA 下载并预处理得到,仅用于训练和推理流程验证。数据下载目录见:UCSC hg38 chromosomes。 - UCSC hg38 数据的使用请遵守 UCSC Genome Browser 数据使用条款,见:UCSC 使用条款。
- 如果在科研工作中使用本仓库、模型权重或生成结果,建议引用 Evo2 原始论文、模型权重来源、UCSC hg38 数据来源和 OneScience 相关项目信息,并根据实际任务补充下游分析工具或数据集引用。