03 注释工具VEP安装与配置
嗯,咱们开始搞VEP。我第一次接触VEP是在一个全外显子组测序项目里,当时注释跑了一天一夜还没结束,后来发现是cache文件版本选错了。从那以后,我养成了一个习惯——装VEP之前先把环境要求和数据库版本理清楚。这一章,我就把这块经验掰开揉碎讲给你。
3.1 环境要求:别让硬件卡脖子
VEP其实不挑操作系统,Linux、macOS都行。我个人习惯在CentOS 7或Ubuntu 20.04上跑,稳定。Windows?我建议你还是装个WSL或者直接上虚拟机吧。
最低硬件要求:
- CPU:2核起步,4核以上能提升并行效率
- 内存:8GB保底,32GB以上舒服(尤其处理全基因组时)
- 磁盘:50GB空闲空间,cache下载会占15-30GB
一个小技巧:如果你的服务器内存只有8GB,跑VEP时记得加 --fork 2 限制并行数,否则容易OOM。我以前在AWS的t2.medium上踩过这个坑。
软件依赖其实不多,但版本要卡死:
- Perl >= 5.10(推荐5.26+)
- zlib、curl、openssl 的基础库
- BioPerl(可选,但装了能加速某些模块)
- DBI、DBD::mysql(如果你要用数据库直连模式)
3.2 安装步骤:两种姿势任你选
安装VEP有两条路——走源码编译,或者直接用GitHub的release包。我倾向后者,省心。
3.2.1 最简单的做法:下载并运行安装脚本
# 创建目录
mkdir -p ~/tools/ensembl-vep
cd ~/tools/ensembl-vep
# 下载安装包
wget https://github.com/Ensembl/ensembl-vep/archive/release/110.tar.gz
tar xzf 110.tar.gz
cd ensembl-vep-release-110
# 一键安装
perl INSTALL.pl --AUTO a --SPECIES homo_sapiens --ASSEMBLY GRCh38
这里 --AUTO a 是全部自动安装,包含API、cache和FASTA文件。但说实话,我不建议你这么干——后面的数据库下载环节我会解释为什么。
3.2.2 我个人推荐的步骤
拆开装,更可控:
# 第一步:只安装核心脚本
perl INSTALL.pl --AUTO c
# 第二步:单独下载cache(后面会细讲)
perl INSTALL.pl --AUTO cf --ASSEMBLY GRCh38 --CACHEDIR /data/vep_cache
# 第三步:测试是否装好
./vep --help | head -20
记得测试一下,输出能看到VEP版本和基本参数就算成功。
注意: 如果你的网络需要代理,安装时会卡在curl下载那步。提前设置 export http_proxy=http://your_proxy:port,否则等到天荒地老。
3.3 数据库下载:cache与FASTA的玄机
搞VEP最难的不是安装,而是搞清楚到底要下哪些文件。我第一次搞的时候,下了个GRCh37的cache,然后用GRCh38的VCF去注释……结果可想而知。
VEP依赖两个核心数据源:
- Cache:预先计算好的转录本、变异频率、保守性分数等
- FASTA:参考基因组序列,用于获取参考等位基因
3.3.1 cache的选择策略
Ensembl提供了三种cache粒度,我整理成了一个表格:
| cache类型 | 大小 | 包含内容 | 加载速度 |
|---|---|---|---|
homo_sapiens_vep_110_GRCh38.tar.gz |
~15 GB | 完整注释(基因、转录本、变异效应) | 快 |
homo_sapiens_vep_110_GRCh38_refseq.tar.gz |
~12 GB | RefSeq版本的注释 | 快 |
homo_sapiens_vep_110_GRCh38_merged.tar.gz |
~18 GB | Ensembl + RefSeq 合并版 | 较快 |
我的建议是:
- 日常分析用 Ensembl cache,最稳定
- 如果项目要求用RefSeq ID,选 RefSeq cache
- 别碰merged cache,除非你清楚为什么要合并——我试过一次,后面处理重复转录本非常头疼
3.3.2 FASTA文件:必须和cache版本一致
很多人只下载cache,忘记下载FASTA。结果VEP注释时找不到参考等位基因,直接报错。FASTA文件通常不到1GB,但版本必须严格匹配:
# 下载GRCh38的FASTA(Ensembl版本)
wget ftp://ftp.ensembl.org/pub/release-110/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.toplevel.fa.gz
gunzip Homo_sapiens.GRCh38.dna.toplevel.fa.gz
# 下载后创建索引
samtools faidx Homo_sapiens.GRCh38.dna.toplevel.fa
创建索引这一步经常被忽略。如果你不跑 samtools faidx,VEP也能用,但速度慢很多。我以前在集群上跑200个样本,没建索引跑了3天,建了索引压缩到8小时。
3.4 cache与VCF格式对应:别搭错桥
这是最大的坑。VCF的参考基因组版本必须和cache版本一一对应。我画了一张图帮你理解:
为什么会这样?因为VCF里的chr1和cache里的chr1可能不是同一个序列。GRCh38的chr1比GRCh37多了大约4.5Mb的组装填补——你想想看,用错误的参考基因组去注释,结果会差多远。
3.4.1 具体对应规则
| VCF标注的参考基因组 | VCF中的contig命名 | 应使用的VEP cache | FASTA来源 |
|---|---|---|---|
| GRCh37 / hg19 | 1, 2, 3 ... X, Y, MT | homo_sapiens_vep_110_GRCh37.tar.gz |
Ensembl GRCh37 FASTA |
| GRCh38 / hg38 | 1, 2, 3 ... X, Y, MT 或 chr1, chr2... | homo_sapiens_vep_110_GRCh38.tar.gz |
Ensembl GRCh38 FASTA |
检查你VCF版本的命令:
# 查看VCF头部的contig行
grep "^##contig" input.vcf | head -5
# 如果看到类似于 ##contig= 就是GRCh37
# 如果是 ##contig= 或没有chr前缀但length更大就是GRCh38
3.5 配置实战:一条完整的VEP命令
好了,假设你现在有cache、有FASTA、有VCF,来跑一次完整的注释。这是我项目中反复验证过的模板:
./vep \
--input_file my_variants.vcf \
--output_file my_variants_annotated.vcf \
--cache \
--cache_version 110 \
--dir_cache /data/vep_cache \
--fasta /data/reference/Homo_sapiens.GRCh38.dna.toplevel.fa \
--species homo_sapiens \
--assembly GRCh38 \
--fork 4 \
--offline \
--vcf \
--everything \
--total_length \
--no_stats
几个关键参数解释:
--offline:使用本地cache,不联网查询。我的线上环境都用这个,不然网络波动会导致注释中断--everything:开启所有可用注释,包括SIFT、PolyPhen、gnomAD频率等。如果你只需要基本转录本注释,换成--transcript_version和--regulatory就行--fork 4:用4个并行线程。我一般设为核心数的一半,留点资源给其他进程
避坑指南: 我曾经在跑大规模WGS数据时,没有加 --no_stats,结果VEP在统计汇总阶段占用了大量内存,导致作业被集群杀掉。加了这个参数后,稳定多了。
3.6 多物种支持(附赠技巧)
虽然咱们主要用人类数据,但VEP也支持小鼠、斑马鱼等。配置逻辑一样,只是cache名字换一下:
# 小鼠GRCm39
perl INSTALL.pl --AUTO cf --SPECIES mus_musculus --ASSEMBLY GRCm39
# 运行
./vep -i mouse_variants.vcf --species mus_musculus --assembly GRCm39
对了,不同物种的FASTA文件命名规则不同,下载时留意一下 dna.toplevel.fa.gz 还是 dna.primary_assembly.fa.gz。我一般选primary_assembly,它去掉了haplotypes,更干净。
注意: 如果你在同一个机器上跑多个物种,建议把它们放到不同的cache目录下,比如 /data/vep_cache/human 和 /data/vep_cache/mouse。然后通过 --dir_cache 指定。混在一起容易乱。
这一套下来,基本上VEP的安装和配置就不会出大问题了。记住核心三要素:版本对齐、cache完整、FASTA建索引——这三个点做到位,注释就能顺顺利利跑完。