DeepVariant — 深度学习驱动的基因组变异检测工具¶
一句话说明¶
DeepVariant 把变异检测变成"图像分类"问题——把基因组比对结果转成类似图片的张量,然后用深度神经网络(类似 ImageNet 分类)来判断每个位置是否有变异,准确率超过传统工具。
安装与配置¶
# 方法1:Docker运行(Google官方推荐,最简单,版本1.10.0)
BIN_VERSION="1.10.0"
docker pull google/deepvariant:"${BIN_VERSION}" # 拉取镜像
# GPU版本(需要NVIDIA GPU + nvidia-docker)
docker pull google/deepvariant:"${BIN_VERSION}-gpu"
# 方法2:Singularity(HPC集群常用,无root权限)
singularity pull docker://google/deepvariant:1.10.0
singularity run deepvariant_1.10.0.sif run_deepvariant --help
# 方法3:conda安装
conda install -c bioconda deepvariant # 版本可能落后,建议用Docker
# 方法4:Bioinformatics平台(Terra, DNAnexus等)
# DeepVariant有官方WDL流程,可直接在Terra平台运行
核心用法¶
一键运行模式(all-in-one,推荐新手)¶
BIN_VERSION="1.10.0"
# WGS数据(Illumina短读)
docker run \
-v /home/user/data:/input \ # 挂载数据目录
-v /home/user/output:/output \ # 挂载输出目录
google/deepvariant:${BIN_VERSION} \
/opt/deepvariant/bin/run_deepvariant \
--model_type=WGS \ # 模型类型:WGS、WES、PACBIO、ONT、HYBRID_PACBIO_ILLUMINA
--ref=/input/reference.fasta \ # 参考基因组
--reads=/input/sample.bam \ # 输入BAM文件
--output_vcf=/output/sample.vcf.gz \ # 输出VCF
--output_gvcf=/output/sample.g.vcf.gz \ # 输出GVCF(可选)
--num_shards=8 # 并行分片数=CPU线程数
分步运行模式(适合集群,可并行)¶
# 第一步:生成候选位点图像张量
make_examples \
--mode calling \
--ref reference.fasta \
--reads sample.bam \
--examples examples.tfrecord.gz \ # 输出张量文件
--gvcf gvcf_records.tfrecord.gz \
--task 0 --num_shards 16 # 分片并行,task从0到15
# 第二步:深度学习模型调用变异
call_variants \
--outfile call_variants_output.tfrecord.gz \
--examples examples.tfrecord*.gz \ # 输入所有分片的张量
--checkpoint /opt/deepvariant/models/WGS # 模型检查点路径
# 第三步:后处理输出VCF
postprocess_variants \
--ref reference.fasta \
--infile call_variants_output.tfrecord.gz \
--outfile sample.vcf.gz \
--gvcf_outfile sample.g.vcf.gz # 同时输出GVCF
参数详解¶
| 参数 | 说明 | 可选值 |
|---|---|---|
--model_type | 数据类型决定使用的模型 | WGS、WES、PACBIO、ONT、HYBRID_PACBIO_ILLUMINA |
--num_shards | 并行分片数(=CPU线程数) | 8、16、32 |
--regions | 限定分析区间 | chr1:1-1000000 或 BED文件 |
--sample_name | 样本名称(写入VCF头) | SAMPLE1 |
--haploid_contigs | 指定单倍体区域(如chrX在男性) | chrX,chrY |
--intermediate_results_dir | 保存中间文件目录 | /tmp/intermediate/ |
实战案例¶
# 案例:HiFi PacBio数据变异检测(使用Docker)
BIN_VERSION="1.10.0"
INPUT_DIR="/data/pacbio_project"
OUTPUT_DIR="/data/deepvariant_out"
REF="${INPUT_DIR}/hg38.fasta"
BAM="${INPUT_DIR}/hifi_sample.bam"
# 确保BAM已排序和建索引
samtools sort -o sorted.bam $BAM && samtools index sorted.bam
# 运行DeepVariant(PACBIO模型)
docker run \
-v "${INPUT_DIR}":"/input" \
-v "${OUTPUT_DIR}":"/output" \
google/deepvariant:"${BIN_VERSION}" \
/opt/deepvariant/bin/run_deepvariant \
--model_type=PACBIO \
--ref=/input/hg38.fasta \
--reads=/input/hifi_sample.bam \
--output_vcf=/output/hifi_sample.vcf.gz \
--output_gvcf=/output/hifi_sample.g.vcf.gz \
--num_shards=$(nproc) \ # 使用所有可用CPU
--logging_dir=/output/logs \ # 保存日志目录
--intermediate_results_dir=/output/intermediate
# 查看结果统计
zcat ${OUTPUT_DIR}/hifi_sample.vcf.gz | grep -v "^#" | wc -l # 变异总数
常见报错与解决¶
报错1:RuntimeError: Invalid model path - 原因:--model_type与数据类型不匹配,或自定义模型路径不正确 - 解决:WGS用--model_type=WGS,PacBio HiFi用PACBIO,ONT用ONT
报错2:ValueError: reads must be sorted - 原因:输入BAM文件未排序 - 解决:samtools sort -o sorted.bam input.bam && samtools index sorted.bam
报错3:Docker OOM (Out of Memory) - 原因:Docker分配内存不足(一般每个分片需要2-4GB) - 解决:减少--num_shards数量,或通过docker run --memory=32g增加内存限制
速查表¶
| 命令/参数 | 说明 |
|---|---|
--model_type=WGS | Illumina WGS模型(最常用) |
--model_type=PACBIO | PacBio HiFi模型 |
--model_type=ONT | Oxford Nanopore模型 |
--model_type=WES | Illumina外显子组模型 |
--model_type=HYBRID_PACBIO_ILLUMINA | PacBio+Illumina混合 |
--num_shards=$(nproc) | 使用所有CPU核心 |
run_deepvariant | 一键完整流程(推荐) |
--haploid_contigs chrX,chrY | 男性X/Y染色体单倍型 |
google/deepvariant:1.10.0 | 最新稳定版Docker镜像 |