Zero-Shot突变预测VenusREM的安装和使用
写在前面:酶工程通过改造野生型蛋白质,以提升其催化活性、稳定性、结合亲和力等特性,从而满足工业和科研的需求。近年来,深度学习方法在蛋白质建模中的应用展现出了相较于传统方法(如定向进化和理性设计)更优越的效果和更低的成本。在突变效应预测中,预训练深度学习模型的关键在于精准理解蛋白质序列、结构与功能之间的复杂关系。本研究提出了一种检索增强型蛋白语言模型 ProtREM,用于综合分析蛋白质的本征属性(通过序列和局部结构相互作用)以及进化属性(通过检索得到的同源序列)。研究人员在一个公开基准数据集 ProteinGym 上,使用来自 217 个实验的逾 200 万个突变体对该模型进行了评估,验证了其领先的性能。此外,研究人员还对模型在提高 VHH 抗体稳定性和结合亲和力方面的能力进行了事后分析;并设计了 10 个新的 DNA 聚合酶突变体,在湿实验中评估了它们在高温下的活性提升。无论是在计算预测还是实验验证中,结果均显示我们的方法能够可靠预测突变效应,为生物学家改良现有酶提供了有力的辅助工具。
一、安装问题
直接按照官方的github教程安装会遇到下列问题
原因是因为:
1、仓库中提供的
environment.yml
文件中使用了 PyTorch Geometric 的 GPU 加速版本(带+pt25cu121
后缀)的包,如:
pyg-lib==0.4.0+pt25cu121
、torch-scatter==2.1.2+pt25cu121
等,而这些版本是无法通过 PyPI 默认镜像或国内镜像(如清华、中科大)安装的。2、
environment.yml
文件中还指定了torch==2.5.1+cu121、torchaudio==2.5.1+cu121、torchvision==0.20.1+cu121
,而 pip 无法从默认源安装带有+cu121
后缀的版本(这类带 CUDA 后缀的 PyTorch 不是 PyPI 官方支持格式,需要从特殊源安装)。
❓为什么 pip 无法安装 torch==2.5.1+cu121
这样的包?
1、+cu121
是 非标准 PyPI 包版本后缀
PyPI(即 pip 默认的官方仓库)不支持包含加号 +
的版本后缀(如 torch==2.5.1+cu121
),这些是PyTorch 官方在其私有仓库托管的特殊版本。
例如:
-
✅ PyPI 支持版本:
torch==2.5.1
(默认是 CPU 或 CUDA 自动判断) -
❌ PyPI 不支持版本:
torch==2.5.1+cu121
2、这类 CUDA 后缀的 PyTorch(如 +cu121
)托管在 PyTorch 官方的私有仓库:
官方地址是:
https://download.pytorch.org/whl/cu121
这个仓库必须通过 --index-url
显式指定,才能访问:
pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu121
二、安装教程如下
1、克隆仓库
git clone https://github.com/ai4protein/VenusREM.git
2、修改environment.yml文件
# 修改 environment.yml 文件,以下有三处需要修改name: venusrem
...- pip:...# 删除或注释掉所有带 +pt25cu121 的 PyTorch Geometric 相关 pip 包:# - pyg-lib==0.4.0+pt25cu121# - torch-scatter==2.1.2+pt25cu121# - torch-sparse==0.6.18+pt25cu121# - torch-cluster==1.6.3+pt25cu121# - torch-spline-conv==1.2.2+pt25cu121# 删除或注释指定 PyTorch 版本的行,后续手动安装,防止依赖报错# - torch==2.5.1+cu121# - torchaudio==2.5.1+cu121 # - torchvision==0.20.1+cu121# 保留其他内容- torch-geometric==2.6.1# 修改自己的conda或者miniconda3的路径
prefix: /home/username/miniconda3/envs/venusrem
3、激活环境并安装PyTorch GPU 版本
# 激活环境
conda activate venusrem# 安装对应的 CUDA 支持版本的Pytorch (CUDA 12.1,PyTorch 2.5.1):
pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu121
4、安装 PyG 依赖
pip install pyg-lib torch-scatter torch-sparse torch-cluster torch-spline-conv -f https://data.pyg.org/whl/torch-2.5.1+cu121.html
5、安装多序列比对工具:HMMER 和 EVCouplings
pip install hmmer
pip install https://github.com/debbiemarkslab/EVcouplings/archive/develop.zip
这两个工具用于生成和处理蛋白质的多序列比对(MSA),在结构预测、突变影响分析中很常用。
✅ 安装成功后可通过以下方式验证,有输出参数详情则说明安装成功:
hmmscan -h
evcouplings -h
6、安装 PLMC:用于蛋白质协同突变建模(Potts Model)
PLMC 是一个用于从多序列比对(MSA)中拟合 Potts 模型的工具,广泛应用于协同突变分析、蛋白质结构预测等任务。
# 1. 克隆 PLMC 仓库
git clone https://github.com/debbiemarkslab/plmc.git# 2. 进入项目目录
cd plmc# 3. 编译(使用 OpenMP 并行支持)
make all-openmp
输出如下,表示 make all-openmp
命令已经成功调用了 gcc
编译器,并将 plmc
项目的源代码文件编译为一个可执行文件 bin/plmc
:
你可以运行以下命令测试,显示结果如下:
./bin/plmc -h
7、配置路径
安装完成后,需要将 plmc
的可执行文件路径写入配置文件:
打开VenusREM目录下的 src/single_config_monomer.txt 文件,将其中的 PLMC 路径字段替换为你本地编译生成的 plmc
可执行文件的完整路径,如下:
plmc: /home/username/VenusREM/plmc/bin/plmc
✅ 确保路径指向的是 plmc
编译产物所在位置,且文件具有可执行权限。
三、运行测试
1、需要准备的数据结构如下
data/<your_protein_dir_name>/
├── aa_seq/ # 原始氨基酸序列(fasta 格式)
│ ├── protein1.fasta
│ └── protein2.fasta
├── aa_seq_aln_a2m/ # 同源序列比对结果(a2m 格式)
│ ├── protein1.a2m
│ └── protein2.a2m
├── pdbs/ # 蛋白质结构文件(pdb 格式)
│ ├── protein1.pdb
│ └── protein2.pdb
├── struc_seq/ # 从结构提取的序列(fasta 格式)
│ ├── protein1.fasta
│ └── protein2.fasta
├── substitutions/ # 单突变体文件(csv 格式)
│ ├── protein1.csv
│ └── protein2.csv
2、生成单点突变的CSV文件
如果你没有突变体信息(substitutions),运行以下命令可为所有可能的单点突变生成一个 CSV 文件(分值为 0):
python src/data/get_sav.py \--fasta_file data/$protein_dir/$protein_name.fasta \--output_csv data/$protein_dir/substitutions
⚠ 注意:
-
protein_name
应该是.fasta
文件的文件名前缀; -
生成的 CSV 会列出所有可能的单突变,便于后续用模型打分;
-
.fasta
中的蛋白名字(>xxx
)需要与文件名一致。
3、使用 JackHMMer 搜索同源序列
这是生成多序列比对(MSA)的第一步,用于后续协同突变分析(如 DCA 或 PLM 模型)。
Step 1:搜索 MSA
# step 1: search homology sequences
protein_dir=<your_protein_dir_name>
query_protein_name=<your_protein_name> # 蛋白名,例如 fluorescent_protein
protein_path=data/$protein_dir/aa_seq/$query_protein_name.fasta
database=<your_path>/uniref100.fasta # 下载好的 UniRef100 蛋白数据库(FASTA 格式)evcouplings \-P output/$protein_dir/$query_protein_name \-p $query_protein_name \-s $protein_path \-d $database \-b "0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9" \-n 5 src/single_config_monomer.txt
参数解释:
参数 | 含义 |
---|---|
-P | 输出目录 |
-p | 蛋白名称 |
-s | 查询序列 fasta 路径 |
-d | 同源搜索数据库(如 UniRef100) |
-b | MSA 的 coverage 阈值范围(比对过滤) |
-n | 搜索轮数(或多个比对策略) |
-c | 配置文件(如 single_config_monomer.txt ) |
⚠ 注意:你需要为每个蛋白重复一遍这个步骤(脚本可批量处理多个)。
这里会得到一系列的输出文件,如下所示:
运行完之后关注这个文件:xxx_job_statistics_summary.csv ,部分列名的含义如下:
列名 | 含义 |
---|---|
prefix | 每次比特得分对应的 MSA 结果路径,通常包含比特得分信息(如 _b0.1 表示 bitscore=0.1) |
minimum_column_coverage | MSA 的最小列覆盖率,保留列的阈值(通常设置为 0.7) |
num_seqs | MSA 中包含的序列总数(更大表示更丰富的同源序列) |
seqlen | 蛋白质序列长度 |
num_cov | 覆盖区域的氨基酸位置数量 |
num_lc | 低复杂度区域的位点数量 |
perc_cov | MSA 覆盖蛋白的比例(num_cov / seqlen) |
1st_uc | 首个有效覆盖的位点位置 |
last_uc | 最后一个有效覆盖的位点位置 |
len_cov | 覆盖区域的长度(last_uc - 1st_uc) |
num_lc_cov | 覆盖区域中低复杂度的数量 |
N_eff | 有效序列数(考虑冗余后的序列代表性) |
domain_threshold | 域选择的 bitscore 阈值 |
num_significant | 推断出的 significant evolutionary couplings 数量(越高越好) |
precision | 预测偶联精度(结构接近度) |
average_identity | MSA 序列平均一致性(保守性,空表示未计算) |
Step 2:选择合适的 .a2m
文件
# step 2: select a2m file
protein_dir=<your_protein_dir_name>
python src/data/select_msa.py \--input_dir output/$protein_dir \--output_dir data/$protein_dir
这个脚本会从 evcouplings
结果中选出合适的 .a2m
文件(MSA)并保存到 data/.../aa_seq_aln_a2m/
。
4、准备蛋白质结构(PDB 文件)
你可以从以下途径获取结构文件:
-
AlphaFold3 / ESMFold 预测结构;
-
PDB数据库 下载已知结构;
-
实验结构(建议),优先使用高质量的晶体结构。
结构文件保存到目录:
data/<your_protein_dir_name>/pdbs/
5、从结构提取序列(对齐结构和序列)
protein_dir=<your_protein_dir_name>
python src/data/get_struc_seq.py \--pdb_dir data/$protein_dir/pdbs \--out_dir data/$protein_dir/struc_seq--vocab_size 2048
生成的结构序列 .fasta
文件将用于后续结构编码部分,确保结构序列与原始序列一致性(特别是链选择)。
6、进行模型推理(打分)
完成以上准备后,运行主程序计算突变体的适应度分数:
protein_dir=<your_protein_dir_name>
python compute_fitness.py \--base_dir data/$protein_dir \--out_scores_dir result/$protein_dir--aa_seq_dir my_fasta \ # 注:如果前面生成的文件夹是自己命名的话,可以重新指定以下这些参数--struc_seq_dir my_struc_seq \--mutant_dir my_substitutions \
输出:
-
在
result/$protein_dir
中生成.csv
文件,记录了每个突变体的预测适应度分数; -
可用于进一步筛选功能突变、热稳定性分析等任务。
参考链接:
https://github.com/ai4protein/VenusREM/