版本说明#
发布包以日期和代码版本号命名(baizegen-YYYYMMDD-xxxxxxx)。每个发布包的 README.md 中有该版本的完整变化、实测环境和参考耗时。
开发中(下一个发布包)#
- 新命令
selectvariants:GATK SelectVariants 4.6.2.0 的选取(类型、JEXL 表达式、样本子集并重算 AC/AN/AF/DP、过滤与未分型样本数、ID、indel 长度等),输出与 GATK 逐条记录相同,参数名相同;--remove-unused-alternates按保留的等位基因重算 PL/GQ/AD;-t N多线程,任意线程数输出相同。见 selectvariants。 - 新命令
variantfiltration:GATK VariantFiltration 4.6.2.0 的过滤(JEXL 表达式、SNP 聚集、掩码),输出与 GATK 逐条记录相同,参数名相同。JEXL 表达式的取值方式与 GATK 完全一致(例如QD < 2这样的整数常量和 GATK 一样报错,组合表达式中缺失的注释使整个表达式不生效)。也支持基因型层面的过滤(-G-filter、--set-filtered-genotype-to-no-call,后者按新的基因型重算 AC/AN/AF);-t N多线程,任意线程数输出相同。见 variantfiltration。 - 同一样本的多对 FASTQ:
fastq2bam、align的每一端可以写成逗号分隔的文件列表(run1_R1.fq.gz,run2_R1.fq.gz run1_R2.fq.gz,run2_R2.fq.gz),按顺序首尾相接读入,结果与先合并文件再比对完全相同,不必写出合并后的文件。所有引擎都支持;加--fastp时 fastp 对合并后的数据运行一次,输出一对修剪后的 FASTQ 和一份报告。见多对 FASTQ。 - 运行日志:任何命令运行时,都在日志目录下当天的
baizegen_YYYY-MM-DD.log里追加两行:开始时记录命令行、程序版本(含源码提交号)、用户和工作目录,结束时记录状态(成功 / 失败 / 被终止)、退出码或信号、错误信息、运行时间、CPU 时间和内存峰值;崩溃、内存不足被系统终止、被调度系统杀死时也会记录。默认目录为程序所在目录下的logs/,可用--log-dir DIR、环境变量BAIZEGEN_LOG_DIR或程序旁的baizegen.conf指定,--log-dir off关闭;--log-tag指定样本标签(默认取读组的 SM)。新增baizegen --version。见运行日志。 - 运行报告:任何命令加
--run-report FILE,写出这次运行的 JSON 记录(成功 / 失败 / 被杀死、错误信息、耗时、内存峰值、输出文件、GPU 退回 CPU 等降级、警告、stderr 末尾),崩溃或被杀死时也会写出,便于批量流程汇总出错的样本。见运行报告。 - 新命令
fqzip:FASTQ 无损压缩:解压结果与原始 FASTQ 逐字节相同。有参考基因组时,reads 以在参考上的位置和差异保存(--device gpu时由 GPU 定位);没有参考基因组时用--pseudo。fastq2bam/align(bwa 引擎)可以直接读入归档,输出与读入解压后的 FASTQ 相同。见 FASTQ 无损压缩。 - combinegvcfs 新增
--resume(断点续跑):合并途中失败或被中断时,已写出的部分保留下来。再用同一条命令加--resume运行,就从最后写完的染色体之后接着跑,结果与一次跑完逐字节相同。需要-t 2以上或--device gpu,且每个输入都有索引。见中途出错后继续运行。 --engine bwa-gpu支持长 read:此前长于 160 bp 的 read(如 2×250)直接报错退出。现在 Illumina 最长的 2×301、华大单端 400 bp 都在 GPU 上比对;更长的也能运行(约 725 bp 以上的批次交给 CPU 上的 bwa)。结果都与bwa mem逐条相同,短 read 的速度不变。--engine bwa-gpu的-A 2等打分:匹配得分大于 1 时,GPU 上 mate rescue 的次优得分(影响 MAPQ)此前与 bwa 不同(150 bp 双端约 0.2 % 的记录),已修正。- haplotyper:VCF 模式不再逐条输出
drawn after the region GATK draws it before提示(深度很高的数据上会有上千条;它不表示结果与 GATK 不同,运行结束时的汇总行仍给出计数,设置BG_QD_JITTER_DEBUG时逐条输出)。 - gvcftyper / combinegvcfs
--genotype-out的一个边界情况:位点的替代等位基因超过 6 个时,若某样本最可能的基因型是纯合参考且 GQ 恰好为 1,GATK 有时把它写成./.,此前我们写成0/0(1,091 个样本的群体中前 1 Mb 有 1 处)。已修正,与 GATK 4.6.2.0 一致。 fastq2bam(GPU 排序)内存不足时不再中断:标记重复用的 read 端点信息此前只能放在内存里(每条 read 约 20 字节,350× 的 HG005 约 85 GB),内存放不下时会被系统杀掉。现在内存不够时这部分写到-T指定的临时目录,标记完自动删除,输出的 BAM 与全部放在内存时逐字节相同。fastq2bam/align检查-R:读组行(@RG…)写在--之前时会被当作参考基因组,此前到加载索引时才报错,信息里也不提读组。现在启动时直接报错,并提示改用--rg。手册中的例子已统一用--rg给出读组(--rg适用于所有引擎,与写在--之后的-R结果相同)。
2026-11-11#
- 常规用法的输出与上一版相同。
--max-memory SIZE:所有命令都接受,给本次运行设内存上限(例如--max-memory 64G)。默认仍按机器内存和 cgroup 限制自动调整;设了上限后,排序数据、标记重复等预算都按"上限减去已占用的内存"计算,其余写到磁盘,GPU 比对器也只在内存够时才读入下一批 reads,输出不变(甘蔗fastq2bam:默认峰值 79 GB,--max-memory 32G时 26 GB,慢约 15%)。见内存。- 输出文件只在命令成功后出现:所有命令先写
<输出名>.partial,成功结束时才改名为正式文件名;命令失败或被杀死时,正式文件不生成,之前已有的同名结果不被覆盖。批量运行时"输出文件存在"即可视为该步完成。gvcftyper遇到RAW_MQ报错(退出码 2)时不再留下写到一半的 VCF。BG_ATOMIC_OUTPUT=0恢复直接写入。见输出的完整性。 - haplotyper 用靶向 panel / 外显子的 BED(
-L):17 个 panel 样本(约 200×)的 VCF 和 gVCF 与 GATK 4.6.2.0 整个文件逐字节相同。-L的区间按参考基因组的染色体顺序排序,重叠的区间合并,与 GATK 相同(此前 BED 中有重叠区间时 gVCF 会出错)。- 区间平均短于 1 Mb 时 GPU 版读 BAM 更快:一个 panel 样本的 gVCF 从 42 分钟降到约 1 分钟,结果不变。
- VCF 模式下可能报 "Invalid interval" 退出、偶尔不结束的问题已修正。
- fastq2bam:未比对的 reads 很多时(例如 33× 小麦),GPU 排序可能一直不结束,已修正。
- gvcftyper
- 表头没有声明的 INFO 字段按 GenotypeGVCFs
--lenient的方式带到输出中(此前丢弃)。 - 等位基因超过 50 个(参考等位基因和
*都计入)的位点与 GenotypeGVCFs 一样跳过、不输出(此前会输出);其后位点的 QD 因此也与 GATK 相同。
- 表头没有声明的 INFO 字段按 GenotypeGVCFs
- combinegvcfs
--variant-list和-V给出的.list文件与 GATK 读法相同:每行去掉首尾空白,跳过空行和以#开头的行。--genotype-out的.tbi索引不再偶尔被判为比数据旧。- 染色体字典的检查与 GATK 相同:输入表头多出参考基因组没有的染色体、或染色体顺序与参考基因组不同时照常运行;同名染色体长度不一致、或与参考基因组没有共同染色体时拒绝运行。落在参考基因组没有的染色体上的记录跳过并警告(GATK 会中途退出)。
- 表头没有声明的 INFO 字段(GATK 需要
--lenient才能运行)照 GATK--lenient带到合并结果和--genotype-out的 VCF 中。 --genotype-out同样跳过等位基因超过 50 个的位点,与 GenotypeGVCFs 相同。- 各输入表头列出的染色体顺序不同时,输出表头中的
##contig行与 GATK 相同(此前会多出某些输入独有的染色体行)。 --device gpu在样本很多(数百个)时,内存占用不再随运行时间不断增长:此前 GPU 传输用的主机内存每次扩大后旧的部分要到程序结束才释放,753 个样本在 125 GB 内存的机器上会涨到约 120 GB。
2026-11-09#
- 常规用法的输出与上一版相同。
- align / fastq2bam:不给
-K时批大小改为 1000 万 × 线程数,与 bwa 本身相同,结果因此随线程数变化(与 bwa 一样);给了-K的命令结果不变。 - gvcftyper
-L/-XL与 GenotypeGVCFs 相同:支持区间字符串、.bed、.interval_list、.list,可重复;新增--merge-input-intervals、--variant-output-filtering(--only-output-calls-starting-in-intervals)。此前起点在区间之前的缺失会丢失。- GATK 3 / 4.0 生成的 gVCF:与 GenotypeGVCFs 一样遇到只有
RAW_MQ的记录时报错退出(退出码 2),新增--allow-old-rms-mapping-quality-annotation-data。 - 重复等位基因、END 小于 POS 等 GATK 会中途报错退出的记录,改为跳过并警告,输出等于 GATK 在去掉这些记录后的结果。
- 若干边界情况(无变异等位基因的位点、全缺失样本、INFO 键的继承、重复的表头行)与 GenotypeGVCFs 一致。
- combinegvcfs
-L/-XL也可以与-t N、--device gpu一起使用,输出与单线程相同;--device gpu --genotype-out修正了一处可能卡住的问题。--device gpu在主机内存紧张时可能中途报错退出(857 个样本、128 GB 内存),已修正。
- haplotyper:
--gatk-version 4.1.9.0的两处边界情况与 GATK 一致;GPU 版修正了 4.5.0.0 / 4.6.2.0 下极少数记录的差异。 - 甲基化:
--aligner bowtie2在全部模式下(包括--non_directional、--local、单端--pbat)与 Bismark 逐字节相同;转换后的 reads 通过管道直接送给 bowtie2,不再写临时文件,整体更快;基因组载入更快。
2026-11-06#
fastq2bam、haplotyper的输出与上一版相同。- 结果不再依赖系统的 glibc:所有程序自带数学库。CPU 版改为基于 musl 的全静态程序,Alpine 等 musl 系统和空容器也能运行;glibc 2.41 及以后的系统上 CPU 版与 GPU 版不再有 PL 差 1 的情况;glibc 2.18–2.27 的系统上 haplotyper 也全部在 GPU 上计算。
- combinegvcfs 大幅提速,一次运行同时输出 gVCF 和 VCF:新增
--genotype-out;--device gpu在 GPU 上完成合并、分型和压缩。100 个猪样本全基因组 gVCF + VCF 约 8 分钟(此前仅 gVCF 就要 36 分钟)。可选--merge-ties-by-input(更快,但输出不再与 GATK 相同)。 - 甲基化流程有了自己的比对器(
--aligner baize,可在 GPU 上运行,不需要安装 bowtie2);新增文库类型--non_directional、--pbat(含单端)、--local;新增bsreport、bssummary;bsextract支持 Bismark 的其余选项。 gvcftyper写 VCF 更快,输出不变。
2026-10-30#
- CentOS 7 / RHEL 7 上 haplotyper 也全部在 GPU 上计算,结果不变。
combinegvcfs支持多线程(-t N)和 GPU(--device gpu),结果仍与 GATK CombineGVCFs 逐条相同;修正了 gVCF 中染色体顺序与参考基因组不一致时漏掉记录的问题。- 新增甲基化流程(试用):
bsprep、bsalign --aligner bowtie2、bsdedup、bsextract、fastq2meth,在测试过的人类 WGBS 数据上每个输出文件都与 Bismark 3.1.0 逐字节相同。
2026-10-29(第二版)#
- GPU 版可在 CentOS 7 等老系统上运行:要求从 glibc ≥ 2.34 降低为 glibc ≥ 2.17。
- 新增
realign和fastq2bam --realign:GATK 3.8-1 RealignerTargetCreator + IndelRealigner,目标区间和每条记录与 GATK 3.8-1 相同(人类 WGS 全基因组 6.77 亿条记录实测一致)。 - 新增
combinegvcfs:GATK 4.6.2.0 CombineGVCFs,输出逐条相同。 gvcftyper多样本联合分型时,等位基因超过 6 个的位点也与 GenotypeGVCFs 一致。
2026-10-29(第一版)#
- GPU 版支持 V100(sm_70)。
- 新增质控指标:
fastq2bam --qc和qcmetrics,每个文件与所选 GATK 版本自带的 Picard / GATK 逐字节相同,含 samtools flagstat(1.10–1.25)和外显子的 CollectHsMetrics;GPU 版在 GPU 上统计,几乎不增加耗时。 --gatk-host-simd avx512支持 GPU 版。fastq2bam的输出文件系统不支持 O_DIRECT 时自动改用普通写入。
2026-10-27#
- 可以指定要复现的 GATK 版本:
haplotyper --gatk-version,支持 4.0.12.0 至 4.6.2.0 共 8 个版本;新增--gatk-host-simd、--gatk-host-glibc、--pair-hmm-implementation LOGLESS_CACHING。GPU 版支持全部版本。 - VCF / gVCF 的表头与 GATK 一致(除
##GATKCommandLine外逐行相同)。 - 多样本 BAM、多倍体(GPU 版倍性 1–6 全部在 GPU 上计算);
gvcftyper支持多样本联合分型和任意倍性。 mutect2 --device gpu:组装、Smith-Waterman 和 PairHMM 在 GPU 上计算,可用多张卡,结果与 CPU 逐字节相同。fastq2bam:比对结果与 bwa mem 0.7.19 逐条相同(相同-K);每条记录添加PG:Z:MarkDuplicates标签(--no-pg-tag关闭);--fastp在任何线程数下与fastp -w 1相同。- 显存不足时各阶段自动拆小或退回 CPU,不会中途失败。