BaizeGen 使用手册 手册版本 2026-11-09

多样本联合分型#

多个样本一起分析时,推荐 GATK 的 gVCF 流程:每个样本单独生成 gVCF,把所有样本的 gVCF 合并成一个多样本 gVCF,再对合并结果做联合分型,得到群体 VCF。新增样本时只需为新样本生成 gVCF,再重新合并和分型。

haplotyper--emit-mode gvcf
每个样本一次
→
样本 gVCF× N
→
combinegvcfsCombineGVCFs
可同时联合分型:--genotype-out
→
群体 gVCF
→
gvcftyperGenotypeGVCFs
→
群体 VCF

概述#

步骤 命令 对应的 GATK 工具 输出一致性
单样本 gVCF haplotyper --emit-mode gvcf HaplotypeCaller -ERC GVCF 逐条记录相同
合并 gVCF combinegvcfs CombineGVCFs 4.6.2.0 逐条记录相同(表头除 ##GATKCommandLine 外也相同)
联合分型 gvcftyper,或 combinegvcfs --genotype-out GenotypeGVCFs 4.6.2.0 逐条记录相同

分步说明#

1. 为每个样本生成 gVCF#

baizegen-gpu haplotyper --device gpu -R REFERENCE -I SAMPLE.bam -t NUMBER_THREADS \
    --emit-mode gvcf -O SAMPLE.g.vcf.gz
  • --emit-mode gvcf 与 GATK 的 -ERC GVCF 等价(也接受 -ERC GVCF 写法)。逐碱基输出用 --emit-mode bp_resolution。
  • 多倍体样本加 --ploidy N。不同倍性的样本可以一起合并和分型。

2. 合并 gVCF 并联合分型#

ls gvcf/*.g.vcf.gz > GVCF_LIST          # 每行一个 gVCF 路径
baizegen-gpu combinegvcfs --device gpu -R REFERENCE --variant-list GVCF_LIST -t NUMBER_THREADS \
    -O COHORT.g.vcf.gz --genotype-out COHORT.vcf.gz

需要的输入:

  • REFERENCE:参考基因组 FASTA(需要 .fai)。
  • GVCF_LIST:gVCF 路径列表文件,每行一个;也可以用多个 -V SAMPLE.g.vcf.gz 逐个给出。
  • COHORT.g.vcf.gz:合并后的多样本 gVCF,与 GATK CombineGVCFs 的输出逐条相同。
  • COHORT.vcf.gz(可选):--genotype-out 在合并的同时做联合分型,输出与之后对合并结果单独运行 gvcftyper 逐字节相同。不需要 VCF 时去掉这个参数。

输入顺序会影响输出

与 GATK 一样,-V / --variant-list 中 gVCF 的顺序会影响输出中等位基因的排列顺序。要与其他结果对比时,请使用相同的输入顺序。

说明:

  • -t N(N ≥ 2)且输出为 .gz 时,按基因组区段并行处理,输出与单线程相同。
  • --device gpu(仅 GPU 版)在 GPU 上完成合并、联合分型和压缩,结果与 CPU 相同;--gpus N|all 选择显卡。
  • gVCF 表头中染色体的顺序与参考基因组不同、或表头多出参考基因组没有的染色体,都可以直接运行(与 GATK 相同);同名染色体长度不一致时才需要加 --disable-sequence-dictionary-validation。
  • 只处理部分区域时用 -L / -XL(需要输入 gVCF 有索引)。
  • 主机内存紧张时任务会等待而不是被系统终止。大队列(数百个样本)请预留充足内存。
  • 不要求与 GATK 逐字节相同时,可加 --merge-ties-by-input 提速,见加速选项。

3. 对已合并的 gVCF 联合分型#

已有合并好的 gVCF(或者只有一个单样本 gVCF)时,用 gvcftyper 分型:

baizegen gvcftyper -r REFERENCE -v COHORT.g.vcf.gz -t NUMBER_THREADS [-d DBSNP] -O COHORT.vcf.gz
  • -r REFERENCE:参考基因组,需要同时有 .fai 和 .dict。注意这里是小写 -r。
  • -v:一个 gVCF(单样本或多样本)。与 GATK GenotypeGVCFs 一样,只接受一个输入;多个样本请先用 combinegvcfs 合并。
  • -d DBSNP(可选):dbSNP VCF,用于填写 ID 列。
  • -t N(N ≥ 2)时按区段并行,输出与单线程相同;需要输入有 tabix 索引,没有时会自动创建。
  • 输出中样本按名称排序,与 GenotypeGVCFs 相同。

GATK 3 / 4.0 产生的旧 gVCF

旧版本 GATK 的 gVCF 使用 RAW_MQ 注释。GenotypeGVCFs 遇到这种记录会报错退出,gvcftyper 也一样(退出码 2)。加 --allow-old-rms-mapping-quality-annotation-data 按 GATK 的旧规则计算 MQ。

加速选项:--merge-ties-by-input#

合并时经常有多个样本在同一位置都有记录,需要决定它们的合并先后。GATK 按其内部排序结构当时的状态决定先后:这个顺序没有生物学含义,却取决于从基因组开头到该位置的全部历史,只能逐条依次计算。默认情况下 combinegvcfs 完全复现这个顺序,因此这一步只能用一个 CPU 核;在单核较慢的机器上它决定整个任务的耗时,增加显卡也不会更快。

加 --merge-ties-by-input 后,同一位置的记录改按输入列表(-V / --variant-list)中的顺序合并。这个规则不依赖前面的历史,可以分给多个 CPU 核和多张显卡同时计算。代价是输出不再与 GATK 逐字节相同。

结果有何不同#

绝大多数差异只是多等位位点上 ALT 的排列顺序:合并后的 ALT 按记录合并的先后排列。等位基因是同一组,每个样本的基因型也相同,只是编号随顺序变化;AC、AF、MLEAC、PL 等按等位基因排列的数值随之重排,数值本身不变。例如某个位置上样本 1 是 A→T、样本 2 是 A→G:

同一位置的两条记录样本 1:A → T
样本 2:A → G
→
默认(与 GATK 相同)先样本 2,后样本 1
先后由之前的全部历史决定
→
ALT = G,T样本 1 的 GT = 0/2(A/T)
同一位置的两条记录样本 1:A → T
样本 2:A → G
→
--merge-ties-by-input先样本 1,后样本 2
按输入列表的顺序
→
ALT = T,G样本 1 的 GT = 0/1(A/T)

两种写法中样本 1 都是 A/T,只是 T 的编号从 2 变成了 1。

极少数位点(约每 4 万个位点 1 个)的数值有变化:

  • QUAL 的最后一位数字(似然值相加的先后不同带来的舍入差别);
  • 候选等位基因超过 6 个的位点,保留哪 6 个可能不同(GenotypeGVCFs 默认每个位点最多保留 6 个);
  • 少数缺失变异的写法,以及被它覆盖的位点上的 *。

100 个猪样本(20 Mb 区段)实测的比例:

仅 ALT 顺序不同 数值有变化
合并后的 gVCF 记录 约 0.09% 0
联合分型后的 VCF 位点 约 2.4% 约 0.0024%

按此比例,全基因组 VCF 的约 5,600 万个位点中,约 130 万个仅 ALT 顺序不同,约 1,300 个数值有变化;全基因组实测的变异位点总数相差 2 个。

两种结果都是正确的:区别只在于同一位置的记录谁先谁后,没有哪一种更准确。

结果可重复

输入文件和输入顺序相同时,无论在哪台机器上、用几张显卡,--merge-ties-by-input 的输出都逐字节相同。与默认方式一样,改变输入顺序会改变输出,请固定输入列表的顺序。

速度#

100 个猪样本全基因组:combinegvcfs --device gpu --genotype-out
默认(与 GATK 相同)加 --merge-ties-by-input
1 × RTX 4090
默认(与 GATK 相同)14 分 17 秒
--merge-ties-by-input12 分 2 秒1.2×
2 × RTX 4090
默认(与 GATK 相同)14 分 40 秒
--merge-ties-by-input6 分 58 秒2.1×

gVCF 共 339 GB,输入在本地 NVMe;2 × Xeon Gold 6226R(共 32 核 64 线程),-t 64;一次输出 gVCF 和 VCF。倍数相对同一显卡数的默认方式。

  • 默认方式的耗时取决于 CPU 单核速度,增加显卡不会更快。
  • 加 --merge-ties-by-input 后主要工作量转到显卡上,第二张显卡才能发挥作用。
  • 峰值内存约 44–46 GB(默认方式约 28–31 GB)。

如何选择#

  • 需要与 GATK 结果逐字节比对(验收、对标测试):使用默认方式。
  • 只关心分析结果、希望更快:加 --merge-ties-by-input。在 CPU 单核较慢、有多张显卡的机器上效果最明显;单核很快、只有一张显卡时可能没有提升。

参考耗时#

  • 100 个猪样本全基因组(gVCF 共 339 GB,输入在本地 NVMe,1 × RTX 5090 32 GB + Threadripper 3960X):combinegvcfs --device gpu --genotype-out 一次输出 gVCF 和 VCF 共 11 分 40 秒,峰值内存 25.8 GB。
  • 同一批 100 个猪样本在 2 × RTX 4090 24 GB + 2 × Xeon Gold 6226R 上:默认 14 分 40 秒,加 --merge-ties-by-input 6 分 58 秒(见加速选项)。
  • 857 个玉米样本(gVCF 共 4.75 TB,输入输出都在 NAS 上):全基因组 gVCF + VCF 约 4–5 小时,峰值内存约 150 GB。

BaizeGen 使用手册 · 手册版本 2026-11-09。命令行参数以所用版本的 baizegen <命令> --help 为准。