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与cache版本对应关系图 VCF 文件(输入) 指定参考基因组: GRCh37 / GRCh38 / hg19 / hg38 版本必须一致 VEP Cache Ensembl版本号 + 组装版本 如:vep_110_GRCh38 正确注释的VCF输出 版本不匹配 → 错误 / 空结果

为什么会这样?因为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建索引——这三个点做到位,注释就能顺顺利利跑完。